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