這是我100%harcoded解決方案,包括定製問題。這是關於使用全局變量指向下一個包含文件名,然後包括我的自定義代理包含文件(這將取代您的自定義代理包括功能)
1 - 將此代碼添加到全局包含(無論您的customInclude功能定義)
$GLOBALS['next_include'] = "";
$GLOBALS['next_include_is_once'] = false;
function next_include($include_file) {
$GLOBALS['next_include_is_once'] = false;
$GLOBALS['next_include'] = $include_file;
}
function next_include_once($include_file) {
$GLOBALS['next_include_is_once'] = true;
$GLOBALS['next_include'] = $include_file;
}
2-創建一些包含代理包含文件,例如「debug_include」。PHP的」
<?php
if(empty($GLOBALS['next_include'])) die("Includes Problem");
// Pre-include code
// ....
if($GLOBALS['next_include_is_once']) {
include_once($GLOBALS['next_include']);
} else {
include($GLOBALS['next_include']);
}
// Post-include code
// ....
$GLOBALS['next_include'] = "";
3 - 執行搜索,並在所有文件替換:(除debug_include.php)
搜索: '包括:((*));'作爲reg.exp
替換爲: '{next_include($ 1);包括(' debug_include.php ');}'
和
搜索:「include_once;作爲reg.exp
((*)。) 替換爲: '{next_include_once($ 1);包括(' debug_include.php ');}'
也許你應該需要另一個搜索和替換,如果你有一些不規範的包括像
include (.... include (.... include (....
我認爲你可以找到一些更好的搜索和替換模式,但我不是一個正則表達式用戶,所以我做了這是困難的方式。
這不是一個答案,而且它根本沒有幫助。下次使用評論。無論如何,你只是重複別人的話,而不用任何支持。順便說一下,這是一個相當複雜的MVC實現,但這個問題的性質完全不同。在一位平面設計師的眼中,架構只是不相關的:她只想快速訪問磁盤上的特定文件,而不考慮apache重定向,路由,控制器,視圖,參數,ajax調用等等。只是查看URL,輸出太複雜了。 – Palantir 2010-06-04 12:27:11
你是認真的嗎?當沒有解決方案時,它仍然是一個答案。但是,我並不是在談論其他人 - 沒有面向對象的人會遇到問題。這是你的呼聲,但是不要試圖用eval來繞過明顯的語言行爲。而且,我幾乎看不到其他人在這裏回答。 MVC體系結構完全按照您的需要進行設置 - 它將每個模板和代碼分開,因此設計人員無需查看代碼,反之亦然。 – 2010-06-04 13:14:47
請仔細閱讀。我已經告訴過你我正在使用OOP和MVC。我有一系列的視圖(比如:node/edit.tpl.php,node/index.tpl.php等),然後是一些局部視圖,這些視圖依次調用其他局部視圖。我想幫助設計人員快速找到視圖文件。你真的覺得這很荒唐嗎?其他的「乾淨」選項是在每個視圖的頂部放置其名稱,並關閉它的底部... – Palantir 2010-06-04 13:28:06