天天看點

zendframework分子產品(modules)配置多視圖(layouts)綜合配置

zendframework分子產品(modules)配置多視圖(layouts)綜合配置

圖檔: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視圖

zendframework分子產品(modules)配置多視圖(layouts)綜合配置

這裡強調一點(藍色代碼部分),我們使用了“<?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了,試試吧

繼續閱讀