繁体   English   中英

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

最后,我只是想出了使其动态化的最佳方法。 如何在每个不同的页面中加载自定义脚本和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>

然后控制器中的content变量将加载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中,即使不是首先加载脚本的最佳实践。

我曾经做过一次类似的事情,现在肯定是现在,但是我在模板库中都做了。

使用像

   $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等等等

对于布局,我有一个主页面负责主页面,而不同页面的版本不同。

最后,尽管我恢复了简单的视图,并使用了页眉和页脚以及任何变体的通用文件。 维护许多不同的视图文件比维护所有布局,模板和局部部件要容易得多。

有很大帮助的一点是,一个视图可以加载另一个视图。 因此,为了使所有内容保持干燥,这意味着可以将任何派生页面部分的视图保存在“部分”文件夹中,以保存“相关产品”或“ blog_list”等内容。

希望能有所帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM