Home » Php » php – CakePHP – include css based on specific pages?

php – CakePHP – include css based on specific pages?

Posted by: admin July 12, 2020 Leave a comment

Questions:

I want to include a specific css file that should be applied to the homepage, and 6-7 other pages throughout my site.

I know I can do this via PHP, getting the URL, finding out what page, linking the css…etc, but I was wondering if there was a slick way (or any better way) using CakePHP to include the correct css file(s).

I realize I can link the CSS file from the specific views, but – then they wouldn’t be in the <head>. Is there a way to link from a view and have it show up in the head?

I hope my questions make sense, and greatly appreciate any help.

How to&Answers:

I realize I can link the CSS file from
the specific views, but – then they
wouldn’t be in the <head>. Is there a
way to link from a view and have it
show up in the head?

Yes, they would be in the head. See the HTML Helper documentation:

If key ‘inline’ is set to false in
$options parameter, the link tags are
added to the $scripts_for_layout
variable which you can print inside
the head tag of the document.

So, this snippet in your view…

$this->Html->css('my-css', null, array('inline' => false));

…will add the proper <link> element to your <head>.

Answer:

Check this little tutorial out:

http://nuts-and-bolts-of-cakephp.com/2008/05/05/css-files-and-scripts_for_layout/

Basically you can use this standard view attribute $scripts_for_layout to inject CSS files based on the view. Hope this is what you’re looking for. There’s a few other crazy options I thought of, involving extension parsing, but it would probably be more cumbersome than just manually linking the stylesheets. I think this link describes the best solution.

Answer:

You can also have different layouts, and include css in them:

http://book.cakephp.org/view/1080/Layouts#!/view/1080/Layouts

This comes handy if all the views of a model have the same css, or script.

Answer:

It is not the answer for your question, but…
you can program your own injection for the layout file. The problem with $scripts_for_layout is that js and css codes are injected in the header. If you write your own implementation you can put the $scripts_for_layout var (for the js) at the end of the layout file. The cue is: separation…