-- 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/

Reply via email to