CodeIgniter 中的部分视图

Partial Views in CodeIgniter

我是使用 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
你们的任何想法对我来说都会很有帮助,谢谢。

我确实做过一次类似的事情,现在承认,但我是在模板库中完成的。

使用像

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

控制器将以这样的调用结束:

  $this->template_library->render_page();

然后模板库会使用 load->view 函数来创建页面并根据设置或未设置的值输出它,页面布局意味着我可以有各种设置布局,如 home_page、product_page、checkout_page、message_page 等等等等

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

虽然最后我恢复到简单视图,但页眉和页脚以及任何变体都有通用文件。维护大量不同的视图文件比维护所有布局、模板和局部更容易。

一个很有帮助的事情是一个视图可以加载另一个视图。因此,为了保持一切干燥,这意味着任何衍生页面部分视图都可以保存在 'partials' 文件夹中,例如 'related products' 或 'blog_list' 等

希望对您有所帮助。

最后,我想出了使它动态化的最佳方法。如何在每个不同的页面加载自定义脚本和 css。

这里是 template.php 的代码(在 views 文件夹内)

<?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 中,即使先加载脚本也不是最佳做法。