我的网站是www.kipclip.com,它正在Kohana上运行。我创建了一个新的租赁页面。但它不是我的CSS和JS文件。我试图找到这是如何包含或如果Kohana有一个特殊的方法来做到这一点。但仍然没有成功。你对此有什么想法吗?
答案 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。虽然,这是我会阻止你在生产代码中做的事情。
无论哪种方式,我希望这可以帮助你。