Look at initView
And the directory structure here:
http://github.com/weierophinney/pastebin/tree/b796ad0e5905e46b312a5b904a2a80c3ed8ff808/application
Hope that helps
2009/2/25 Lucas Corbeaux <lucas.corbeaux@gmail.com>:
> Thanks for your answer,
>
> If I understand right your plugin, you rewrite part of the ViewRenderer
> plugin to add the common path "on the top" of the plugin's directories
> stack. There is no other shorter way for respecting the LIFO order of views
> helpers, as using a modified view for the ViewRenderer and adding a global
> path before he do is job ?
>
> Hector Virgen a écrit :
>>
>> What I usually do is set up a controller plugin that adds the default
>> helper path to the view prior to dispatching. Then, using the postDispatch
>> hook, I add the current module's helper path to the stack so that helpers
>> from both "default" and the current module become available.
>>
>> I'm not sure if this approach is "Zend Framework compliant" but it seems
>> to work well for me.
>>
>> Here's a copy of the plugin I wrote to handle view directories:
>>
>> <?php
>>
>> class Virgen_Controller_Plugin_View extends
>> Zend_Controller_Plugin_Abstract
>> {
>> protected $_view;
>> protected $_viewRenderer;
>> public function __construct()
>> {
>> // Set up view
>> $this->_viewRenderer =
>> Zend_Controller_Action_HelperBroker::getStaticHelper('ViewRenderer');
>> $this->_view = $this->_viewRenderer->view;
>> if (null === $this->_view) {
>> $this->_viewRenderer->init();
>> $this->_view = $this->_viewRenderer->view;
>> }
>> // Add default scripts/helpers to the script/helper paths
>> $defaultViewPath = MODULE_PATH . DIRECTORY_SEPARATOR . 'default' .
>> DIRECTORY_SEPARATOR . 'views';
>> $this->_view->addScriptPath($defaultViewPath . DIRECTORY_SEPARATOR
>> . 'scripts');
>> $this->_view->addHelperPath($defaultViewPath . DIRECTORY_SEPARATOR
>> . 'helpers', 'Virgen_View_Helper');
>> }
>> public function postDispatch(Zend_Controller_Request_Abstract
>> $request)
>> {
>> // Determine module directory
>> $front = Zend_Controller_Front::getInstance();
>> $module = $request->getModuleName();
>> $controllerDirectory = $front->getControllerDirectory($module);
>> $moduleDirectory = dirname($controllerDirectory);
>> $viewsPath = $moduleDirectory . DIRECTORY_SEPARATOR .
>> 'views';
>> $scriptsPath = $viewsPath . DIRECTORY_SEPARATOR . 'scripts';
>> $helpersPath = $viewsPath . DIRECTORY_SEPARATOR . 'helpers';
>> // Override script path with this module's script path
>> $this->_view->setScriptPath($scriptsPath);
>> // Add helpers to default helpers
>> $helperPrefix = ('default' == $module) ? 'Virgen_View_Helper' :
>> 'Virgen_' . ucfirst($module) . '_View_Helper';
>> $this->_view->addHelperPath($helpersPath, $helperPrefix);
>> }
>> }
>>
>> -Hector
>>
>>
>> On Mon, Feb 23, 2009 at 2:43 PM, Lucas Corbeaux <lucas.corbeaux@gmail.com
>> <mailto:lucas.corbeaux@gmail.com>> wrote:
>>
>> Hi there,
>>
>> I have a little design question as I want to be the most "Zend
>> Framework compliant" as possible in my application design.
>>
>> I have three modules, and both uses the same view helpers. If I
>> put my helpers in default/views/helpers/, it works perfectly for
>> the default module, but I must use a
>>
>> $this->view->addHelper('document_root/../application/default/views/helpers/)
>> in my others modules' init method (wich is not really complex, as
>> all my modules controller inherit from an abstract one, inheriting
>> themselves from a much global one for all the application).
>>
>> Is there a best practice, or, at least, a more common way to do
>> for such a configuration (Custom view class, Front plugin...) ? So
>> many way, so hard to choose one ;)
>>
>> Thanks,
>> Lucas
>>
>>
>
>
--
----------------------------------------------------------------------
[MuTe]
----------------------------------------------------------------------
没有评论:
发表评论