gpt4 book ai didi

kohana - 如何管理多个模板和模板资源

转载 作者:行者123 更新时间:2023-12-02 09:43:04 27 4
gpt4 key购买 nike

我对 Kohana 完全是新手,一直在阅读文档、教程和论坛帖子来了解它是如何工作的。

我正在尝试在我的一个应用程序上实现此框架,但现在我只能管理多个模板及其 Assets 。

基本上,我的应用程序将有一个模板文件夹,如 template1、template2 ....,与特定模板相关的所有图像、CSS、JS 都需要包含在模板文件夹中。

那么有可能有这样的实现吗?如果是这样,我如何将模板特定资源加载到父模板文件中?

最佳答案

简而言之

我自己在用 Kohana 3.0 制作的网站上使用模板。我将尝试解释它的基本设置;要使用模板,您的 Controller 需要扩展 Controller_Template ,并且内部的 $template 变量指定要在 View 文件夹中加载的模板页面,因此我制作了自己的主 Controller 类来扩展管理要加载哪个模板的controller_template类;在下面您将看到我的默认模板的名称只是 template,因此如果我的 Controller 上未指定模板,它将从我的 View 文件夹加载 template.php

我有一个 ma​​ster.php 主 Controller ,其类定义为(简化)

abstract class Controller_Master extends Controller_Template
{
public $template = 'template'; // Default template

public function before()
{
// Set a local template variable to what template the controller wants to use, by default 'template'
$template = $this->template;

// This is important and for abstraction, since we're extending a class and its functions we need to make sure we still execute its before(); function
// This will load the view you need from /views/template.php or /views/template2.php depending on what your controller specifies into $this->template
parent::before();

// Check which template our code/controller needs to use
if ($template == 'template')
{
$this->template->header = View::factory('template/head'); // Loads default header file from our views folder /views/template/head.php
$this->template->content = View::factory('template/index'); // Loads default index file from our views folder /views/template/index.php
$this->template->footer = View::factory('template/footer'); // Loads default footer file from our views folder /views/template/footer.php

return;
} elseif ($template == 'template2')
{
$this->template->header = View::factory('template2/head'); // Loads default header file from our views folder /views/template2/head.php
$this->template->sidebar = View::factory('template2/sidebar'); // Loads default sidebar file from our views folder /views/template2/sidebar.php
$this->template->content = View::factory('template2/index'); // Loads default index file from our views folder /views/template2/index.php
$this->template->footer = View::factory('template2/footer'); // Loads default footer file from our views folder /views/template2/footer.php

return;
}
}
}

我有一个 user.php 用户 Controller ,其类定义为

// This is important, make sure your controllers extend your master controller class
class Controller_User extends Controller_Master
{
// In this example this user controller just needs to use the default controller
// so nothing needs to be changed on it besides extending our Controller_Master

// Example action inside the user class on how to load different content into your template instead of the default index page.
function action_login()
{
// Load the login view page from /views/template/forms/login.php
$this->template->content = View::factory('template/forms/login');
}
}

现在假设我们有一个需要使用不同模板的 Controller ,所以可以说您有一个 photo.php 照片 Controller ,其类定义为

// This is important, make sure your controllers extend your master controller class
class Controller_Photo extends Controller_Master
{
// Since this controller needs to use a different template we extend the before() function
// to override the $template variable we created in master to use 'template2'
function before()
{
$this->template = 'template2';
}
}

/views/template.php 包含类似

的内容
    <body>
<div id="header">
<?= $header; ?>
</div>
<div id="content">
<?= $content; ?>
</div>
<div id="footer">
<?= $footer; ?>
</div>
</body>

/views/templat2e.php 包含不同的布局,例如

    <body>
<div id="header">
<?= $header; ?>
</div>
<div id="sidebar">
<?= $sidebar; ?>
</div>
<div id="content">
<?= $content; ?>
</div>
<div id="footer">
<?= $footer; ?>
</div>
</body>

主 Controller 中的$header$sidebar$content$footer设置在哪里或者由 Controller 中的代码通过 $this->template->header 等覆盖。

希望这足以解释如何在 Kohana 中使用模板。

关于kohana - 如何管理多个模板和模板资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8158017/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com