CodeIgniter中的部分视图

时间:2016-12-03 16:13:13

标签: php laravel codeigniter dynamic blade

我是使用CodeIgniter Framework的初学者。以前,我学过Laravel。而我的问题是我想在Laravel中制作像Blade这样的动态模板。因此,在每个页面中,我只加载该页面所需的样式和脚本。

以下是我使用CodeIgniter创建的代码,因此可以动态加载自定义样式和自定义脚本。

的template.php

 <?php
        defined('BASEPATH') OR exit('No direct script access allowed');

        // <hmtl>
        $this->load->view($header);
        if(isset($style))
            $this->load->view($style);

        // <body>
        $this->load->view($navbar);
        if(isset($sidebar))
            $this->load->view($sidebar);
        $this->load->view($content);
        $this->load->view($footer);
        // </body>

        if(isset($script))
            $this->load->view($script);
        // </html>

和我的控制器

public function index()
    {
        $data = [
            'title'     => 'Home',
            'header'    => 'partials/_header',
            'navbar'    => 'partials/_navbar',
            'content'   => 'guest/public',
            'footer'    => 'partials/_footer'
        ];
        $this->load->view('template', $data);
    }
也许你有更好的想法,因为我坚持下去。在Laravel这很容易,因为有@yield@section。你们的任何想法对我都很有帮助,谢谢。

2 个答案:

答案 0 :(得分:1)

最后,我只是想出了让它变得动态的最佳方式。如何在每个不同的页面中加载自定义脚本和CSS。

这是template.php(内部视图文件夹)

的代码
<?php
    defined('BASEPATH') OR exit('No direct script access allowed');

    $this->load->view($header);
    $this->load->view($navbar);
    $this->load->view($content);
    $this->load->view($footer);

和控制器控制器

public function index() {
    $data = [
        'header'        => 'partials/_header',
        'style'         => 'partials/style/_public_css',
        'navbar'        => 'partials/_navbar',
        'content'       => 'guest/public',
        'footer'        => 'partials/_footer',
        'script'        => 'partials/script/_public_js'
    ];
    $this->load->view('template', $data);
}

并在_header.php

的局部视图中
<!DOCTYPE HTML>
<html lang="en">
<head>
   <meta charset="UTF-8">
   <title>...</title>

   <!-- Partial CSS Here -->
   <?php if(isset($style)) $this->load->view($style); ?>
</head>
<body>

_navbar.php

<header>
   <nav class="navbar navbar-inverse navbar-fixed-top">
      ....
   </nav>
</header>

然后控制器中的内容变量,它加载public.php(在我的情况下,你必须替换你想要加载的任何页面)

<div class="container">
     ....
</div>

,最后一个是_footer.php

    <footer>
         ....
    </footer>

    <!-- JQuery HERE -->

    <!-- any js that you will you in all pages HERE -->

    <!-- Partial Script Here -->
    <?php if(isset($script)) $this->load->view($script); ?>
</body>
<html>

记住,如果您的页脚在每个页面中都是静态的,那么将JQuery放在_footer.php中,如果它没有将jquery放在_header.php中,即使它也是如此不是首先加载脚本的最佳做法。

答案 1 :(得分:0)

我曾经做过类似的事情,不久之前已经确实如此,但我在模板库中做到了这一切。

使用像

这样的setter
   $this->template_library->set_css_script('page.css');
   $this->template_library->set_layout('product_page');

控制器将以如下调用结束:

  $this->template_library->render_page();

然后模板库将使用load-&gt;视图函数创建页面并根据设置或未设置的值输出页面,页面布局意味着我可以拥有各种设置布局,如home_page,product_page, checkout_page,message_page等等。

对于布局,我有一个完成主页面的主布局,以及不同页面的变体。

最后虽然我恢复了简单的视图,使用了页眉和页脚的常见文件以及任何变体。维护许多不同的视图文件比维护所有布局和模板以及部分文件更容易。

有一点很重要的是视图可以加载另一个视图。因此,为了保持所有DRY,这意味着任何衍生页面部分视图都可以保存在“部分”中。像“相关产品”这样的文件夹&#39;或者&#39; blog_list&#39;等

希望有所帮助。