That would seem to me like a bit of a sledgehammer solution. All you need to do is use the Javascript::link / Html::css functions in your views, without the inline setting, and they will be added to the collection when you get round to replacing scripts_for_layout in your layout. Of course you could also subclass a view to do the automagic approach, keeping the view stuff (css and javascript) in the view layer, rather than putting it in your controllers.
Simon http://www.simonellistonball.com On Apr 10, 4:43 pm, grigri <[EMAIL PROTECTED]> wrote: > Am I missing something here? This seems quite an easy thing to do: > > class AppController extends Controller { > var $helpers = "SomeRandom"; > > } > > class SomeRandomHelper extends AppHelper { > var $helpers = array('Html', 'Javascript'); > > function beforeRender() { > // Load controller-specific css and js if exists > $this->_loadIfExistsJs($this->params['controller']); > $this->_loadIfExistsCss($this->params['controller']); > > // Load action-specific css and js if exists > $this->_loadIfExistsJs($this->params['action']); > $this->_loadIfExistsCss($this->params['action']); > > // Load controller+action-specific css and js if exists > $this->_loadIfExistsJs($this->params['controller'], > $this->params['action']); > > $this->_loadIfExistsCss($this->params['controller'], > $this->params['action']); > > } > > function _loadIfExistsJs() { > $bits = func_get_args(); > $file = JS . implode(DS, $bits) . '.js'; > if (file_exists($file)) { > $this->Javscript->link(implode('/', $bits) . '.js', false); > } > } > > function _loadIfExistsCss() { > $bits = func_get_args(); > $file = CSS . implode(DS, $bits) . '.css'; > if (file_exists($file)) { > $this->Html->css(implode('/', $bits) . '.css', null, null, > false); > } > } > > } > > Assume that the controller is 'PostsController' and the action is > 'view', then the following files will be loaded (if they exist): > > /app/webroot/js/posts.js > /app/webroot/js/view.js > /app/webroot/js/posts/view.js > > /app/webroot/css/posts.css > /app/webroot/css/view.css > /app/webroot/css/posts/view.css > > The only gotcha I can see is if you're in an action 'bacon' and you > call $this->render('eggs') then it will be bacon.js that will be > loaded, not eggs.js - due to the way Controller::render() works. If > you use $this->setAction(), then it won't be a problem. Overcoming > this would require overriding AppController::render() to store the > first parameter somewhere accessible by the helper. > > Just remember to have <?php echo $scripts_for_layout; ?> in your > layout and all will be well. > > On Apr 10, 10:17 am, simon <[EMAIL PROTECTED]> wrote: > > > is there a method to do the same for the above but for css sheets? > > > On Apr 9, 10:14 am, "R. Rajesh Jeba Anbiah" > > > <[EMAIL PROTECTED]> wrote: > > > On Apr 8, 8:59 am, John R <[EMAIL PROTECTED]> wrote: > > > > > Is there an easy way with Cake to get /js/register.js to be > > > > automatically included in register.ctp? (And conversely not included > > > > if it doesn't exist?) > > > > Not automagic, but you may add this in the view file: > > > $this->addScript('register'); > > > > -- > > > <?php echo 'Just another PHP saint'; ?> > > > Email: rrjanbiah-at-Y!com Blog:http://rajeshanbiah.blogspot.com/ --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Cake PHP" group. To post to this group, send email to cake-php@googlegroups.com To unsubscribe from this group, send email to [EMAIL PROTECTED] For more options, visit this group at http://groups.google.com/group/cake-php?hl=en -~----------~----~----~----~------~----~------~--~---