2
\$\begingroup\$

I have the following in the header.php file which is included in all of my views:

$dh = opendir(Vs.get_class($this).'/js') ;
while($script = readdir($dh)) {
 if(!is_dir($script))
 {
 echo '<script type="text/javascript" src="js/'.$script.'"></script>' ;
 }
}
$dh = opendir(Vs.get_class($this).'/css') ;
while($css = readdir($dh)) {
 if(!is_dir($css))
 {
 echo '<link type="text/css" href="css/'.$css.'" rel="stylesheet"/>' ;
 }
}

It's purpose is to autoload all the CSS and JS files for a particular view (which has the same name as the controller, hence get_class).

Should all this be a part of the associated controller or is how I have done it fine?

Jamal
35.2k13 gold badges134 silver badges238 bronze badges
asked Dec 4, 2012 at 11:42
\$\endgroup\$

1 Answer 1

3
\$\begingroup\$
  1. The way you are scanning the directory is going to get all files. If this is intentional thats cool, but if you are really just looking for js & css files, use glob and scan for them directly. This will be much better in performance, and you can avoid the directory check.

  2. It seems like its a brittle idea to have the paths mapped to a specific class name. There has to be an easier way to associate views and view resources rather than referencing $this.

  3. This does not belong in the controller unless you are assigning the view data there. In frameworks like Zend, there are action helpers which take care of this for you. If you don't have access to that, create a base controller class and do a magic helper method to keep the functionality the same across all pages. This will allow you to maintain this functionality closer, and you can still use the $this if needed.

  4. Is this really a good idea to just scan a directory and include all files? What happens if a new developer comes along and dumps a js file they were testing something in, in the directory and it got included by accident? If there are very few includes, try to just manually put them in; either through a layout or just hardcoding them in there. If you really have that much js and css being included in.... maybe there is a more fundamental problem.

Better Scandir w/ Glob:

$jsGlob = Vs.get_class($this).'/js/*.js';
foreach (glob($jsGlob) as $js)
{
 echo '<script type="text/javascript" src="$js"></script>' ;
}
$cssGlob = Vs.get_class($this).'/css/*.css';
foreach (glob($cssGlob) as $css)
{
 echo '<link type="text/css" href="$css" rel="stylesheet"/>' ;
}
palacsint
30.3k9 gold badges81 silver badges157 bronze badges
answered Dec 4, 2012 at 17:38
\$\endgroup\$

Your Answer

Draft saved
Draft discarded

Sign up or log in

Sign up using Google
Sign up using Email and Password

Post as a guest

Required, but never shown

Post as a guest

Required, but never shown

By clicking "Post Your Answer", you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.