2016-03-06 68 views
0

我想用Yii編寫一個程序,以便用戶可以擁有自己的模板。如何在Yii中使用模板引擎?

我的解決方案是,每個用戶都有一個DB中的記錄來保存像HTML代碼和Smarty或Twig等語法的自定義模板。

如何使用PHP獲取該記錄並將其打印在屏幕上,我的模板引擎會提取語法並顯示最佳結果?這有可能嗎?我應該怎麼做?

真的,你知道如果你將php代碼保存在數據庫中,當你將它們打印到文件中時,你保存在數據庫中的php代碼不會運行。 對我來說,最重要的是將數據庫中的模板保存爲php php命令,然後在文件中回顯它們,並且php代碼通常運行相同。

但是使用smarty或twig並且不要讓用戶直接添加php代碼很重要。

+2

請詳細說明預期結果。很難忘記你正在努力實現的目標, – WeSee

+0

我編輯我的問題。謝謝 – Amin

+1

如果可能,請不要讓您的用戶編寫自己的PHP代碼。這可以讓你的用戶用你的PHP解釋器運行的任何特權在你的系統上執行任何操作,這是一個重大的安全漏洞。對於這個問題,不要讓他們寫HTML代碼。對於大多數任務來說,降價就足夠了。 – Beowulfenator

回答

0

我找到了我的答案。 只需在數據庫中保存所有內容,並在加載它們時使用eval()函數。 在php和w3school中查看文檔。

1

對於用戶界面模板,您可以在Yii中使用不同的佈局。只要把你的不同佈局模板在./views/layouts文件夾:

./views/layouts/main-template-1.php 
./views/layouts/main-template-2.php 
./views/layouts/main-template-3.php 

和執行,這取決於應當在控制器被稱爲用戶的動作時,在控制器選擇佈局。

編輯:未經用戶上傳的佈局文件,你可以從數據庫裝載(HTML骨架)的模板代碼,然後在控制器放在一起佈局和視圖代碼:

$contentWithoutLayout = $this->renderPartial('myview',...); 
return $this->applyLayout(contentWithoutLayout, $layoutFromDb); 

其中applyLayout()是你的方法合併佈局和查看內容。

+0

是的,我知道這一點,但我不想讓用戶上傳文件,我需要讓用戶自定義他們的模板。 – Amin