-- Ian Warner <[EMAIL PROTECTED]> wrote
(on Monday, 21 January 2008, 02:12 PM +0000):
> Thanks for your patience and persistance :)
My pleasure!
> That indeed worked. I utilised the first method. As I am basically creating
> an area for global helpers - actually mostly for Facebook Common Tasks such
> as there Form rendering and other components such as the Wall.
>
> Is there a repository of Helpers that other users have created? i would
> find this very helpful to either draw from or submit too - this kind of
> thing would not need to be monitored very much as the code snippets would
> be small and isolated I would think in most cases.
There isn't an official one. One thing to note, however: Zend_View was
originally written by Paul M. Jones -- and is derived from his own work
on Savant and Solar_View. As a result, you should be able to use helpers
from any of these projects with ZF without an issue -- you'd simply need
to add helper path/prefixes to those helpers:
$view->addHelperPath('path/to/Savant/Helper', 'Savant_Helper');
$view->addHelperPath('path/to/Solar/View/Helper', 'Solar_View_Helper');
(Not absolutely sure of the class prefix and path for these; you get the
idea, though.)
> Matthew Weier O'Phinney wrote:
>> -- Ian Warner <[EMAIL PROTECTED]> wrote
>> (on Monday, 21 January 2008, 12:24 PM +0000):
>>> However still no joy, this is my stack output for the view - and I assume
>>> if the new path was registered correctly then it would show up in here
>>>
>> <snip>
>>> Registering the path - tried in controller and a few other places.
>>>
>>> $view = new Zend_View();
>>>
>>> // Add /other/path/to/helpers with class prefix
>>> 'Your_View_Helper'
>>> $view->addHelperPath('D:\AWebEnvironment\htdocs\Site_Template\library\Common\Components',
>>>
>>> 'Common_Components');
>>>
>>> My helper class taken from the example.
>>>
>>> <?php
>>> class Common_Components_SpecialPurpose
>>> {
>>> protected $_count = 0;
>>>
>>> public function specialPurpose()
>>> {
>>> $this->_count++;
>>> $output = "I have you {$this->_count} time(s).";
>>> return htmlspecialchars($output);
>>> }
>>> }
>> The above looks good...
>>> Ok having debugged the View files in the Framework it seems that I am
>>> instantiating the View class adding the helpers - below is an output of
>>> _path
>> <snip -- path looked good>
>>> but then the view is getting instantiated again somewhere and killing my
>>> adding paths with its own SetPath
>>>
>>> Same output of _path
>>>
>>> [helper] => Array
>>> (
>>> [0] => Array
>>> (
>>> [prefix] => Zend_View_Helper_
>>> [dir] => sites\admintrianglesolutions\views\helpers\
>>> )
>>>
>>> [1] => Array
>>> (
>>> [prefix] => Zend_View_Helper_
>>> [dir] =>
>>> D:\AWebEnvironment\ZendFramework-1.0.3\library\Zend\View\Helper\
>>> )
>>>
>>> )
>>>
>>> So its basicalyl getting overwritten later on. Should this happen?
>>>
>>> I am not calling new Zend_View anywhere else in my code - so it must be
>>> when the viewRenderer is automatically instantiated
>> I see what's going on. Yes, the ViewRenderer instantiates its own view
>> unless it is provided one -- so if you want to add a global helper path,
>> you need to tell the ViewRenderer. (The view object is not a singleton,
>> so if you set the helper path on one instance, it doesn't propagate to
>> other instances.)
>> You have a couple of ways of doing this. In your bootstrap, you can
>> create your view object, and inject it into the ViewRenderer:
>> $view = new Zend_View();
>> $view->addHelperPath('path/to/Common/Components/',
>> 'Common_Components');
>> Zend_Controller_Action_HelperBroker::getStaticHelper('viewRenderer')
>> ->setView($view);
>> (I broke the last statement over two lines to make it readable.)
>> The next option is to take the view out of the ViewRenderer and alter
>> it. The method for doing so varies, based on whether the ViewRenderer
>> will have initialized the view object or not. The ViewRenderer first
>> initializes its view when its internal init() method is called -- which
>> is triggered the first time a controller is dispatched.
>> So, let's say you want to do the above in an early running plugin -- in
>> which case the view won't have been initialized. Here's one example of
>> how that might work:
>> class ViewPlugin extends Zend_Controller_Plugin_Abstract
>> {
>> public function
>> dispatchLoopStartup(Zend_Controller_Request_Abstract $request)
>> {
>> $viewRenderer =
>> Zend_Controller_Action_HelperBroker::getStaticHelper('viewRenderer')
>> $viewRenderer->initView();
>> $viewRenderer->view->addHelperPath(
>> 'path/to/Common/Components',
>> 'Common_Components');
>> }
>> }
>> If you wanted to set it from within a controller or an action helper,
>> the view will have been initialized, and you can just do the following:
>> $viewRenderer =
>> Zend_Controller_Action_HelperBroker::getStaticHelper('viewRenderer')
>> $viewRenderer->view->addHelperPath(
>> 'path/to/Common/Components',
>> 'Common_Components');
>> Hope that helps.
>>> Matthew Weier O'Phinney wrote:
>>>> -- Ian Warner <[EMAIL PROTECTED]> wrote
>>>> (on Sunday, 20 January 2008, 07:54 PM +0000):
>>>>> $view = new Zend_View();
>>>>>
>>>>> // Add /other/path/to/helpers with class prefix
>>>>> 'Your_View_Helper'
>>>>>
>>>>> $view->setHelperPath('D:\AWebEnvironment\htdocs\Site_Template\library\Zend\View\Helper',
>>>>>
>>>>> 'Common_Components');
>>>>>
>>>>> I have tried the above and also with addHelperPath and still no luck -
>>>>> tried this on my ubuntu machine also.
>>>>>
>>>>> whats the naming convention for helpers, the docs dont give any advice
>>>>> on what the actual file name should be
>>>> Not to be mean, but they *do* spell it out, several times:
>>>> http://framework.zend.com/manual/en/zend.view.helpers.html
>>>> Second paragraph: "A helper is simply a class. Let's say we want a
>>>> helper named
>>>> 'fooBar'. By default, the class is prefixed with 'Zend_View_Helper_'
>>>> (you can specify a custom prefix when setting a helper path), and
>>>> the last segment of the class name is the helper name; this segment
>>>> should be TitleCapped; the full class name is then:
>>>> Zend_View_Helper_FooBar."
>>>> And further in that same page:
>>>> 37.4.3. Writing Custom Helpers
>>>> Writing custom helpers is easy; just follow these rules:
>>>> * The class name must, at the very minimum, end with the
>>>> helper name itself, using CamelCaps. E.g., if you were
>>>> writing a helper called "specialPurpose", the class name
>>>> would minimally need to be "SpecialPurpose". You may,
>>>> and should, give the class name a prefix, and it is
>>>> recommended that you use 'View_Helper' as part of that
>>>> prefix: "My_View_Helper_SpecialPurpose". (You will need
>>>> to pass in the prefix, with or without the trailing
>>>> underscore, to addHelperPath() or setHelperPath()). There's also
>>>> one other place it's mentioned, in the section detailing
>>>> helper paths.
>>>> So, in your example, if you have the prefix "Common_Components" as your
>>>> view helper class prefix, and your library code is in
>>>> "D:\AWebEnvironment\htdocs\Site_Template\Library\', the most logical
>>>> place to put these helpers would be in the "Common\Components\"
>>>> subdirectory of that location, and you would then add the following path
>>>> to your view helper paths:
>>>>
>>>> $view->addHelperPath('D:\AWebEnvironment\htdocs\Site_Template\Library\Common\Components\',
>>>>
>>>> 'Common_Components');
>>>> If you then have a "foo" helper, it would be in the 'Foo.php'
>>>> file in that directory, and have the class name Common_Components_Foo.
>>>> Hope that helps.
>>>>> Matthew Weier O'Phinney wrote:
>>>>>> -- Ian Warner <[EMAIL PROTECTED]> wrote
>>>>>> (on Sunday, 20 January 2008, 01:00 PM +0000):
>>>>>>> Sorry I should have said that I tried that also.
>>>>>>>
>>>>>>> Still no luck
>>>>>> I use code like the following code regularly:
>>>>>> $view->addHelperPath('path/to/My/View/Helper', 'My_View_Helper');
>>>>>> and it works fine. Can you send me the code you used when trying
>>>>>> addHelperPath()?
>>>>>>> Pieter wrote:
>>>>>>>> Hi Ian,
>>>>>>>> I think that you should use the $view->addHelperPath() function.
>>>>>>>> Regards,
>>>>>>>> Pieter Kokx
>>>>>>>> Ian Warner schreef:
>>>>>>>>> hi
>>>>>>>>>
>>>>>>>>> I am having real trouble trying to set helper paths.
>>>>>>>>>
>>>>>>>>> I assume I can place this anywhere in my code structure - I have
>>>>>>>>> tried in bootstrap / controllers and a few other places
>>>>>>>>>
>>>>>>>>> Pathing - I think I have this correct below though I although I
>>>>>>>>> have changed this any which way but loose.
>>>>>>>>>
>>>>>>>>> $view = new Zend_View();
>>>>>>>>>
>>>>>>>>> // Add /other/path/to/helpers with class prefix
>>>>>>>>> 'Your_View_Helper'
>>>>>>>>>
>>>>>>>>> $view->setHelperPath('D:\AWebEnvironment\htdocs\Site_Template\library\Zend\View\Helper',
>>>>>>>>>
>>>>>>>>> 'Common_Components');
>>>>>>>>>
>>>>>>>>> I have this when I throw the stack in the view.
>>>>>>>>>
>>>>>>>>> [_path:private] => Array
>>>>>>>>> (
>>>>>>>>> [script] => Array
>>>>>>>>> (
>>>>>>>>> [0] =>
>>>>>>>>> sites\admintrianglesolutions\views\scripts\
>>>>>>>>> )
>>>>>>>>>
>>>>>>>>> [helper] => Array
>>>>>>>>> (
>>>>>>>>> [0] => Array
>>>>>>>>> (
>>>>>>>>> [prefix] => Zend_View_Helper_
>>>>>>>>> [dir] =>
>>>>>>>>> sites\admintrianglesolutions\views\helpers\
>>>>>>>>> )
>>>>>>>>>
>>>>>>>>> [1] => Array
>>>>>>>>> (
>>>>>>>>> [prefix] => Zend_View_Helper_
>>>>>>>>> [dir] =>
>>>>>>>>> D:\AWebEnvironment\ZendFramework-1.0.3\library\Zend\View\Helper\
>>>>>>>>> )
>>>>>>>>>
>>>>>>>>> )
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>
--
Matthew Weier O'Phinney
PHP Developer | [EMAIL PROTECTED]
Zend - The PHP Company | http://www.zend.com/