0

preDispatch プラグインでビュー スクリプトに新しいパスを追加しようとしています。

私の最終的な目標は、それぞれ独自のレイアウト スクリプトとビュー スクリプトを使用して、同じ Zend Framework アプリケーションから複数のサイトを実行することです。ただし、サイトに独自のビュー/レイアウトがない場合は、デフォルトのレイアウト/ビューを使用したいと考えています。

レイアウトが正しく機能するようになりましたが、ビュー スクリプトをロードできません。

私のビューフォルダーのレイアウトは次のとおりです

/application
    /modules
        /views
            /scripts
                /index
                    index.phtml -> the default index controller view script
                /sites
                    /domingod -> this is a site
                        /index
                            /index.phtml -> the sites index controller view script

私が達成しようとしているのは、domingod/index/index.phtml のインデックス ビュー スクリプトをロードすることです。このファイルが見つからない場合は、デフォルトの index.phtml ビュー スクリプトをレンダリングします。

これまでにこれを試しましたが、運がありません

Zend_Layout::getMvcInstance()->getView()->setScriptPath($viewScriptPath);

これはパスを追加するように見えますが、ZF はまだサイト (domingod) ではなくデフォルトの index.phtml をレンダリングしています。

これがすべて理にかなっていることを願っています。事前に感謝します。

ギャリー

4

2 に答える 2

1

私が思いついた解決策は、サイトにビュー スクリプトがあるかどうか、レンダリングするように設定されているかどうかを確認することでした。

class FreedomS_Zend_Controller_Plugin_SetView extends Zend_Controller_Plugin_Abstract
{
    public function preDispatch(Zend_Controller_Request_Abstract $request)
        {
            $module = $request->getModuleName();
            $controller = $request->getControllerName();
            $action = $request->getActionName();

            $viewScriptPath = APPLICATION_PATH . '/modules/' . $module . '/views/scripts/sites/' . Zend_Registry::get('siteId') . '/';

            $view = Zend_Controller_Action_HelperBroker::getExistingHelper('ViewRenderer')->view;
            if (file_exists($viewScriptPath . $controller . '/' . $action . '.phtml'))
                $view->addScriptPath($viewScriptPath);
        }
}
于 2013-01-06T16:59:12.413 に答える
0

実際には常に index/index.phtml を探します。ベースアクションとベースコントローラーです。目標を達成したい場合は、そこにリダイレクトを設定して確認する必要があると思います。

$this->_redirect(   $this
                            ->view
                            ->url(array('controller' => 'domingod',
                                        'action' => 'index')));
            return;

しかし、私の謙虚な意見では、サイトに何があり、何がないかを確実に知っておく必要があります. サイトが存在する必要がない場合は、そこにリダイレクト リンクを設定すると、Web サイトはスイスの時計として機能します。

于 2013-01-06T12:18:04.000 に答える