5

ZendFrameworkのレイアウトについて質問があります。これが私のプロジェクトの構造です。

  • 「backoffice」と「frontoffice」という名前の2つのモジュールがあります。
  • バックオフィスとフロントオフィスの両方のlayouts/scriptsに1つのlayout.phtmlがあります。
  • ここで、「バックオフィス」と「フロントオフィス」に別々の「レイアウト/スクリプト」が必要です。
  • 私のapplication.iniには、次のものがあります。resources.layout.layoutPath = APPLICATION_PATH "/layouts/scripts/"

レイアウトが分かれているので、どうすれば修正できますか?

4

4 に答える 4

8

フォルダに別のレイアウトを配置し、layout/scriptsモジュール、コントローラ、またはアクションに、デフォルトのレイアウトの代わりに他のレイアウトを使用するように指示するだけです。

コントローラに別のレイアウトを使用させたい場合は、次のように配置できます。init()

$this->_helper->layout->setLayout('layoutname');

これは、特定のアクションまたはモジュール全体に対してそれぞれ実行できます。

于 2013-01-17T18:12:47.250 に答える
3

これをapplication.iniに入れます

resources.layout.layout = "layout"
resources.frontController.moduleDirectory = APPLICATION_PATH "/modules"

レイアウトファイルは/modules/MODULE_NAME/views/scripts/layout.phtmlになります

于 2013-01-18T17:52:59.413 に答える
1

その目的のためにフロントコントローラープラグイン(レイアウトセレクターと呼ばれる)を作成する必要があります。

Bootstrap.phpで、そのプラグインを登録します-レイアウトセレクター:

protected function _initPlugins(){
    $front = Zend_Controller_Front::getInstance();
    $front->registerPlugin(new My_Plugins_LayoutSelector());
}

application.iniに名前空間My_を自動ロードします

Autoloadernamespaces[] = "My_"

そして最後に、/libraryに新しいフォルダ「My」とそのフォルダ「Plugins」を作成し、その中にファイル「LayoutSelector.php」をコードで作成します。

class My_Plugins_LayoutSelector extends Zend_Controller_Plugin_Abstract {
    public function preDispatch(Zend_Controller_Request_Abstract $request) {
        $module = $request->getModuleName();
        $layout = Zend_Layout::getMvcInstance();
        $layout->setLayout($module);
    }
}

このようにして、将来のすべてのモジュールは適切なレイアウトを使用し、レイアウトを選択するために各コントローラーに書き込む必要はありません。

于 2013-01-18T11:00:41.357 に答える
0

このカスタムプラグインをいくつか変更して使用し、モジュールごとに特定の構造で特定のレイアウトを作成します http://blog.vandenbos.org/2009/07/19/zend-framework-module-specific-layout/

于 2013-01-18T11:09:52.450 に答える