2

私は非常に基本的な Zend Framework のレイアウトを知っており、サイト全体で 1 つのレイアウトを使用していました。しかし今は、より中間的/組織的なセットアップが必要です。

  • パブリック サイトのレイアウトは、div#mainContent12 列全体を占めます (960gs を使用)
  • ログインしたサイトにはdiv#mainContent、9 列 + 3 列のサイドバーが表示されます。
  • ログインしたサイトのサイドバーでは、さまざまなページにさまざまなモジュールが含まれている場合があります (Zend Framework のモジュールではなく、「ボックス/ウィジェット」のようなものです)。
  • ナビゲーションメニューも異なります

2 つのサブ レイアウトが「拡張」される 1 つのベース レイアウトを使用することを考えています。基本レイアウトには<html>headScripts などの宣言のみが含まれ、サブレイアウト<body>にはラッピングの定義が含まれますdivs div.grid_12, grid_9, grid_3。この「拡張」を実装するにはどうすればよいですか。基本的には、コードを再利用したいだけです

また、サイドバーボックス/ウィジェットをレンダリングする良い方法は何ですか

4

2 に答える 2

9

ウェブサイトのサブドメインに応じてレイアウトを切り替えています。

これが私が使用しているレイアウトプラグインです...

class App_Layout_Controller_Plugin_Layout extends Zend_Layout_Controller_Plugin_Layout
{

    public function preDispatch(Zend_Controller_Request_Abstract $request)
    {
        $layout = $this->getLayout();
        $filename = $layout->getLayoutPath() . '/' . $request->getModuleName() . '.' . $layout->getViewSuffix();

        //check if the layout template exists, if not use the default layout set in application.ini
        if (file_exists($filename))
        {
            $this->getLayout()->setLayout($request->getModuleName());
        }
    }

}

もちろん、これを独自のニーズに合わせて変更できます。

次のような要素を含め、application.ini も正しく設定してください...

resources.layout.layout = "default"
resources.layout.layoutPath = APPLICATION_PATH "/layouts/scripts"
resources.layout.pluginClass = "App_Layout_Controller_Plugin_Layout"

私の場合、私は持っています:

default.phtml、admin.phtml、clients.phtml

これが役に立てば幸いです...
エンジェル

于 2011-01-19T12:26:22.527 に答える
2

これが最善の方法かどうかはわかりませんが、各コントローラーで使用可能な init() メソッド内で現在のレイアウトを設定する方法です。

たとえば、次の URL がある場合: www.mysite.com/social/

class SocialController extends BaseController
{
    public function init(){
        $layout = $this->_helper->layout();
        $layout->setLayout('social');
    }
}

次に、config.ini 内で次のようにします。

resources.layout.layoutPath = APPLICATION_PATH "/layouts/scripts/"

そして、resources.layout.layoutPath 内に定義された socia.phtml があります。

于 2011-09-07T06:35:20.853 に答える