2011-03-12 65 views
1

這可能是一個非常簡單的問題,因此不要提出更具挑戰性的道歉!在HTML中查找自定義標記的發生,執行函數並用函數輸出替換標記

我正在開發一個內部使用模板系統的CMS。

爲了使CMS儘可能擴展,我想使用「模塊」。因此,在模板文件中我想放置表示模塊的自定義HTML標籤。

這將是這樣的:

ob_start(); 
include "templatefile.tpl"; 
$buffer= ob_get_contents(); 
ob_end_clean(); 

現在我想通過的$buffer內容和<Module name="moduleName" />我的每一次出現:

<p><Module name="newsTicker" property="value" anotherProperty="anotherValue" /></p>

我用得到我的模板文件想要include "moduleName.class.php",創建該類的新實例,運行該模塊的getOutput()函數,並將返回值放置在標記爲<Module />的位置 以前是。

我不知道該怎麼去......:/有什麼想法?

如果你不明白新聞股票的想法。我可以編寫一些代碼,查看我的數據庫中的新聞表,並列出10條最新的新聞報道,然後將其輸出到html <ul>。我想抽象這個,以便它可以在很多頁面上使用。所以在我的主頁模板中,我可能會有標籤<Module name="newsTicker" />。現在,當我訪問主頁時,我需要查看主頁tpl文件,我會找到它說<Module name="newsTicker" />的位置,我將提取name屬性幷包含基於該名稱的類(在這種情況下,它將是newsTicker.class.php )。這將有一個名爲getOutput()的功能,所以我將能夠類似於:$output = $current_module->getOutput();然後我需要返回到我的tpl文件並更改<Module name="newsTicker" />的內容爲$output的內容。

感謝您的幫助。 :)

湯姆

回答

2
  • 使用DOM文檔找到Module元素(我會用小寫不但親自)。
  • 商店name屬性。
  • include_once該類基於name屬性(如果使用自動加載,則跳過)。
  • 使用$class = new $name
  • 刪除原來的Module DOM元素和appendChild$class->getOutput()
+0

看起來不錯,但它會工作,如果這些模板文件不是完整的HTML文件?例如,我將要使用的文件可能只是頁面內的一塊內容,而不是整個HTML文檔。 – 2011-03-12 16:48:54

+0

@Thomas是的,它應該可以工作,但是當你使用'$ dom-> saveHTML()'的時候,你可能需要從'body'元素中提取。 – alex 2011-03-12 16:52:08