为什么Kohana不读我的CSS?

时间:2013-08-09 19:09:06

标签: css kohana

我的网站是www.kipclip.com,它正在Kohana上运行。我创建了一个新的租赁页面。但它不是我的CSS和JS文件。我试图找到这是如何包含或如果Kohana有一个特殊的方法来做到这一点。但仍然没有成功。你对此有什么想法吗?

1 个答案:

答案 0 :(得分:0)

快速而肮脏的方法是使用常规html脚本和样式标记来实现您正在实现的视图中的脚本和样式的名称,并从那里继续

但是,如果您不喜欢快速和肮脏,并且更喜欢更好,更具体,如果您使用Kohana 3.2,您可以执行以下操作。我没有在较旧版本或较新版本上尝试此操作,因此它可能会或可能不会在其中工作(如果您尝试将其移植到该版本,请参阅相对于您希望的版本的transitioning document do not use short tags in production code!端口):

/**
*      /application/classes/controller/application.php
*/
abstract class Controller_Application extends Controller_Template {

    public function before() {
        parent::before();

        if($this->auto_render) {
            //Initialize empty values for use by ALL other derived classes
            $this->template->site_name = '';//this is a psuedo-global set in this class
            $this->template->title = '';//this too is set by the controller and action
            $this->template->content = ''; //this is set by the controller and action
            $this->template->styles = array();
            $this->template->scripts = array();
            $this->template->admin_scripts = array();
        }
    }    

    /**
     * The after() method is called after your controller action.
     * In our template controller we override this method so that we can
     * make any last minute modifications to the template before anything
     * is rendered.
     */
    public function after() 
    {
        if ($this->auto_render) {

            //set the CSS files to include
            $styles = array(
                'style1', //the css file with all the defaults for the site
                'jquery-library-css'
            );


            //set the JavaScript files to include
            $scripts = array(
                'myscript1',
                'myscript2'
            );


            $admin_scripts = array(
                'jquery-admin-functions',
            );
            //now, merge all this information into one so that it can be accessed
            //by all derived classes:
            $this->template->styles = array_merge($this->template->user_styles, $user_styles);
            $this->template->scripts = array_merge($this->template->user_scripts, $user_scripts);
            $this->template->admin_scripts = array_merge($this->template->admin_scripts, $admin_scripts);
        }

        //bind the site_name to the template view
        $this->template->site_name = 'My Site Name';


        //OLD WAY shown below:
        View::set_global('site_name', 'My Site Name'); //set the site name

        //now that everything has been set, use parent::after() to finish setting values
        //and start rendering
        parent::after();
    }

}

那么,这是如何工作的?请记住,application.php类是从中派生所有其他控制器类的基本控制器类。 通过对基本控制器实现这种类型的绑定,每个派生控制器都可以访问可用的脚本,样式等。因此,该控制器调用的每个关联视图也可以访问这些变量。

所以,现在要在视图中访问这些变量:

示例,模板PHP文件:/application/views/template.php

如果它是这样定义的(使用PHP短标签 - 但是{{3}}):

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd>
<html>
<head>
    <meta charset='utf-8'/>
    <script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.0/jquery.min.js"></script>
<?php
/**
 * Link the css files stored in the `static` folder from the project root.
 * This will vary depending on how you have your files saved.
 */
foreach($user_styles as $style) : ?>
    <link rel="stylesheet" href="<?php echo URL::base() . 'static/css/' . $style ?>.css" type="text/css"/>
<?php endforeach; ?>
    <?php //Create AND set a dynamic page title - much like Facebook ?>
    <title><?php echo $site_name; if(!empty($title)) echo ' - ' . $title; ?></title>
</head>
<body>

<!-- Fill in the body with HTML, PHP - whatever you want -->

<?php
/**
 * Now, load the scripts:
 * According to Yahoo, for better site performance, all scripts should be loaded after the body has been loaded
 */

foreach($user_scripts as $script) : ?>
    <script src="<?php echo URL::base() . 'static/js/' . $script; ?>.js" type="text/javascript"></script>
<?php endforeach; ?>
</body>
</html>

所有这些都有两个外卖点

一:如果您希望某些东西是全局的,或者可供所有控制器(以及后续视图)使用,请在基本应用程序控制器类中定义它们并绑定它们。

二:因此,此功能还为您提供了巨大的杠杆作用和强大功能,如果您有派生类,您可以实现与该特定控制器类相同类型的绑定,使其可用于任何后续派生控制器类。这样,如果你有两个不应该访问某些文件及其相关功能的类,例如一个用户加载所有帖子的管理员JavaScript文件,然后这种实现可以让你的生活变得更加轻松。

而且,第三个隐藏选项是给Kohana是PHP,如果你不能立即解决它,你可以在相关视图中使用常规的vanilla PHP / HTML。虽然,这是我会阻止你在生产代码中做的事情。

无论哪种方式,我希望这可以帮助你。