2

カスタム ビュー オブジェクトを使用できるように、zend フレームワークでデフォルトのビュー オブジェクトを上書きするにはどうすればよいですか?

class Bootstrap extends Zend_Application_Bootstrap_Bootstrap {
    
    function _initViewHelpers() { 
        $this->bootstrap('view');
        $view = $this->getResource('view');
        $view->doctype('HTML4_STRICT');
        $view->setHelperPath(APPLICATION_PATH . '/helpers', '');        
        $view->headMeta()->appendHttpEquiv('Content-type', 'text/html;charset=utf-8')
                         ->appendName('description', 'Zend Framework');
        $view->headTitle()->setSeparator(' - ');
        $view->headTitle('Zend Custom View');
        $view->setScriptPath(APPLICATION_PATH . '/themes/admin');
        
        return $view;
    }
}

デフォルト ビューには、モジュールのデフォルト スクリプト パスが含まれています。テンプレート システムを有効にするために、すべてのモジュールに対して 1 つのパスが必要です。このsetScriptPathメソッドは、ビュー オブジェクトによって生成されたデフォルト パスを上書きする必要がありますが、そうではありません。

array(2) { [0]=> string(66) "C:/xampp/htdocs/NEOBBS_v6/application/modules/admin/views\scripts/" [1]=> string(51) "C:\xampp\htdocs\NEOBBS_v6\application/themes/admin/" }

2 つscriptPathの s があります。これは、デフォルトのビュー オブジェクトを上書きすることで実行できますか?

4

2 に答える 2

3

ArneRieが投稿した内容は正しいですが、ViewRendererは、標準のスクリプトパスが設定されているかどうかを確認し、設定されていない場合は追加します。パスはLIFOでチェックされるため、ViewRendererが標準パスの後に標準パスを追加し、常にそのパスを使用していることが発生します。

私にとってうまくいったのは、標準パスとカスタムパスの両方を同時に設定し、カスタムパスを最後に設定することでした。

$view->setScriptPath(array(
    APPLICATION_PATH . '/views/scripts/', // or whatever the standard path is
    APPLICATION_PATH . '/themes/admin'
));

しかし、これにはもっと良い解決策があるかもしれません。

于 2011-05-20T09:56:29.140 に答える
2

追加してみてください:

        $viewRenderer = new Zend_Controller_Action_Helper_ViewRenderer();
        $viewRenderer->setView($view);
        Zend_Controller_Action_HelperBroker::addHelper($viewRenderer);
于 2011-05-20T09:10:16.220 に答える