2013-09-25 32 views
1

真的不確定問題的標題是否適合整體問題。但是在這裏。Zend Framework,爲相同的代碼庫設置多個模板

我目前擁有的是一個現有的SaaS項目。我們希望隨着時間的推移推出新模板。想想谷歌如何引入新功能。或者其他一些網站可能會用「試用我們的新測試版」..類型的東西。那麼我們也想做同樣的事情,然後我們最終會淘汰舊的外觀和感覺。

因此,這個應用程序是建立在Zend Framework之上的,所以通過查看文檔我可以找出如何覆蓋給定控制器上的模板。但是我想要做的事情很可能會利用這些會話。如果存在,請使用此模板。如果沒有,請使用舊的。

是否有可能以這種方式覆蓋默認模板?例如,現在默認加載的文件是「tops.phtml」,如果會話存在,我想加載「tops_v2.phtml」。因此,當會話被找到時,它可以使用它作爲模板而不是「tops.phtml」。

+1

你試過這個'$ this - > _ helper-> layout-> setLayout('/ path/to/your/layout_script');' –

回答

1

Zend框架1.x的解決方案:

您可以在動作禁用ViewRenderer插件,並手動選擇模板:

public function indexAction(){ 
     $this->_helper->viewRenderer->setNoRender(true); 
     echo $this->view->render("path/to/template/template.phtml");   
} 
0

我認爲,佈局是你可能要使用的東西正如裏奇所簡述的那樣。基於這個問題,我猜你還沒有使用它們。最終,您可以設計一個定義整體網站外觀的佈局,然後您的每個動作模板將只呈現頁面的一個片段(將動態放置在佈局的內容部分)。

使用您選擇的任何邏輯,然後您可以指定任意數量的佈局之一以用於給定的頁面加載,當然,您可以將其存儲爲用戶首選項或其他內容。

+0

這個項目已經在使用佈局了,該項目然而。應用程序文件夾中有根級別,然後是2個獨立的子文件夾,其中包含每個模板類型的控制器,佈局等。聽起來比它更糟糕,這兩個關閉鏡頭與主應用程序共享代碼。然後每個都是一個子應用程序,所有工作正常。然而在這種情況下,我需要在佈局上進行工作。現在,大部分內容都是在bootstrap.php或給定類型的indexController.php中定義的。 – chris