2012-02-03 14 views
4

デフォルトのレイアウトファイルの名前をlayout.phtml以外の名前にしたいのですが、それは実際にどのようなレイアウトのタイプが記述されていないからです。これどうやってするの?ありがとう!あなたはこのような何かを行うことができ、あなたのbootstrap.phpのファイルからZend Framework:デフォルトのレイアウトスクリプトをlayout.phtml以外に変更するにはどうすればよいですか?

答えて

6

、:

protected function _initLayoutName() 
{ 
    // use sitelayout.phtml as the main layout file 
    Zend_Layout::getMvcInstance()->setLayout('sitelayout'); 
} 

あなたが別のモジュールのために別のレイアウトを使用する場合は、ブートストラップでプラグインを登録する必要があり、持っていますプラグインは次のコードを含める:あなたのapplication.ini内から

class Application_Plugin_LayoutSwitcher extends Zend_Controller_Plugin_Abstract 
{ 
    public function dispatchLoopStartup(Zend_Controller_Request_Abstract $request) 
    { 
     $module = $request->getModuleName(); // get the name of the current module 

     if ('admin' == $module) { 
      // set the layout to admin.phtml if we are in admin module 
      Zend_Layout::getMvcInstance()->setLayout('admin'); 
     } else if ('somethingelse' == $module) { 
      Zend_Layout::getMvcInstance()->setLayout('somethingelse'); 
     } 
    } 
} 

を、あなたはレイアウトスクリプトを設定するには、この操作を行うことができます。

resources.layout.layout = "layoutname" 

これはレイアウト単位では機能しません。モジュールに基づいてレイアウトを変更する必要がある場合は、プラグインを使用する必要がありますが、application.iniの設定を使用してデフォルトのレイアウト名を設定することができます。

+0

THX!これは私が探していたものですが、iniの設定ファイルでそれを行う方法はありますか? – blacktie24

+1

例を使って答えを更新しました。 – drew010

+0

gotcha、詳細返信のためのthx! – blacktie24

3

あなたがプラグインを作成して、ブートストラップに登録することができます あなたのモジュールに基づいに応じて特定のレイアウトを持つようにしたい場合:

<?php 

class Plugin_LayoutModule extends Zend_Controller_Plugin_Abstract 
{ 
     /** 
     * preDispatch function. 
     * 
     * Define layout path based on what module is being used. 
     */ 
     public function preDispatch(Zend_Controller_Request_Abstract $request) 
     { 
       $module = strtolower($request->getModuleName()); 
       $layout = Zend_Layout::getMvcInstance(); 

       if ($layout->getMvcEnabled()) 
       { 
         $layout->setLayoutPath(APPLICATION_PATH . '/modules/' . $module . '/layouts/'); 
         $layout->setLayout($module); 
       } 
     } 
} 

//Register it in your bootstrap.php  
    <?php 
     defined('APPLICATION_PATH') 
      or define('APPLICATION_PATH', dirname(__FILE__)); 
     ... 

     Zend_Layout::startMvc(); 
     $frontController->registerPlugin(new Plugin_LayoutModule()); 
    ?> 

EDIT:

あなたのレイアウトを設定します.iniファイルを使用して別のファイルにコピー:

layout.iniファイルを作成して入れてください:

ブートストラップファイルで
[layout] 
layout = "foo" 
layoutPath = "/path/to/layouts" 
contentKey = "CONTENT" 

$config = new Zend_Config_Ini('/path/to/layout.ini', 'layout'); 

$layout = Zend_Layout::startMvc($config); 
+0

Thxのヘルプ!先にdrew010に尋ねたところで、デフォルトのレイアウト名をini設定ファイルで設定する方法はありますか? – blacktie24

+0

私の答えをlayout.iniファイルを使って編集しました –

関連する問題