
圖檔:1.gif
許多人在使用過程中都會遇到這樣那樣的問題,我在這裡,簡單介紹一下如何使用zend framework建立子產品化(并且使用layout進行布局)的應用程式。
讓大家看看我最終的目錄結構。
[attachment=32141]
看到了嗎?
1、我在application檔案夾下建立了一個modules檔案夾,這個檔案夾下建立了兩個子產品,分别是admin、default
2、我的layout布局分了兩部分,一個是admin子產品使用的layout,在admin/layouts/scripts檔案夾下,另一個是default子產品的layout,在application/layouts/scripts檔案夾下。
下面講解步驟。
1、準備工作
首先假設你已經部署了web伺服器和php,并下載下傳了zend framework,建議大家使用xampp中的xampp-shell視窗來建立了一個原始的zend framework項目(原因很簡單——很規範,不像有些視訊教程中寫的,隻能讓application跑起來,但是當application大點的時候,他們的方法就打折扣了)。
2、建立子產品
現在我們來建立一個admin子產品,目錄如下:
application/modules/admin/controllers
application/modules/admin/models
application/modules/admin/views
application/modules/admin/views/scripts
application/modules/admin/views/helpers
application/modules/admin/views/filters
并建立以下檔案:
application/modules/admin/controllers/IndexController.php(類名為Admin_IndexController)
application/modules/admin/views/scripts/index/index.phtml
除了建立子產品檔案之外,還需要在配置檔案application.ini添加關于子產品的配置内容(添加内容為圖中藍色部分)
[attachment=32145]
現在我們就可以通過 http://localhost/public/子產品名來通路我們的建立的admin子產品和default子產品。至此子產品的配置工作完成了,現在來做不同子產品下layout的配置工作。
3、視圖建立
首先我們現在上面的兩個layouts檔案夾下建立我們的layout視圖

這裡強調一點(藍色代碼部分),我們使用了“<?php echo $this->partial("footer.phtml") ?>”這樣的語句在layout.phtml中添加了另一個視圖頁面。
這時如果通路 http://localhost/public,你會發現我們通路的default子產品是可以正常顯示的,但是通路 http://localhost/public/admin時,你會發現系統并沒有使用期望的admin的layout.phtml作為布局檔案,而是使用了預設default子產品的layout.phtml。這是因為admin那行配置并不是系統預設能處理的有效配置,是以我們要自己來處理它。
3、admin的Bootstrap.php的建立
首先我們建立檔案:library/Jlxu/Controller/Action/Helper/LayoutLoader.php,
代碼如下:
class Jlxu_Controller_Action_Helper_LayoutLoader extends Zend_Controller_Action_Helper_Abstract
{
public function preDispatch()
{
$bootstrap = $this->getActionController()
->getInvokeArg('bootstrap');
$config = $bootstrap->getOptions();
$module = $this->getRequest()->getModuleName();
if (isset($config[$module]['resources']['layout']['layoutPath'])) {
$layoutPath =
$config[$module]['resources']['layout']['layoutPath'];
$this->getActionController()
->getHelper('layout')
->setLayoutPath($layoutPath);
}
}
}
這個檔案的作用就是判斷你通路的是哪個子產品,然後為不同的子產品調用不同的layout.phtml。
我們要充分發揮子產品的強大功能,我們還需要為子產品添加一個啟動檔案——Bootstrap.php。它可以使得你在事個子產品中友善的使用類資源,models, filters, helpers等。在admin下建立Bootstrap.php,代碼如下:
class Admin_Bootstrap extends Zend_Application_Module_Bootstrap
{
protected function _initLayoutHelper()
{
$this->bootstrap('frontController');
$layout = Zend_Controller_Action_HelperBroker::addHelper(
new Jlxu_Controller_Action_Helper_LayoutLoader());
}
}
并且在application/Bootstrap.php檔案裡加入以下方法:
protected function _initAppAutoload()
{
$autoloader = new Zend_Application_Module_Autoloader(array(
'namespace' => 'App',
'basePath' => dirname(__FILE__),
));
return $autoloader;
}
4、大功告成
現在你已經可以使用不同的layout來配置不同的module了,試試吧