【问题标题】:Codeigniter - Templating with separate templatesCodeigniter - 使用单独的模板进行模板化
【发布时间】:2013-02-01 10:23:43
【问题描述】:

我希望有一个带有 3 个模板的 codeigniter 应用程序。

  1. 用于显示登录视图或错误视图的模板。

  2. 带有标题正文导航的模板

  3. 带有页眉正文侧边栏页脚的模板

现在我可以构建 codeigniter 应用程序,但是我找不到一个简单的模板系统来完成这项任务。有很多关于可用库的建议,但它们缺乏实现细节。

我们将不胜感激建议和指导。

【问题讨论】:

    标签: php codeigniter templates


    【解决方案1】:

    您可以使用 CodeIgniter 模板。 http://williamsconcepts.com/ci/codeigniter/libraries/template/index.html 在此处下载库,您还可以获得完整的文档。

    使用此库,您可以使用多个模板,并且可以轻松管理并分组进行管理。

    【讨论】:

      【解决方案2】:

      只要你了解它就很简单。

      您需要为上面列出的每个内容创建一个视图文件,因此您需要这样的内容(文件夹/文件明智):

      views/page-login.php
      views/page-error.php
      views/header.php
      views/footer.php
      

      然后,您将从控制器加载其中一个页面视图。 然后,您可以在页面视图中加载所需的元素,因此页眉和页脚以及它们之间的页面特定代码。

      例如,您的登录页面可能是:

      <?php $this->load->view('header'); ?>
      
          <h1>Login</h1>
          <p>Please login to my website.</p>
      
      <?php $this->load->view('footer'); ?>
      

      【讨论】:

      • 我很喜欢这个建议,但是这样可以很容易保持相同的风格和连续性
      • 我在几个大型网站上使用过 CI。我总是这样布置我的代码。我从来没有需要改变它。我更喜欢将模块拉入我的页面,而不是将我的页面拉入模板,真的是个人品味。
      • 这种方式在技术上似乎不那么复杂,这样组织网站是否有任何陷阱。
      • 没有我知道的陷阱。这遵循自然的非 MVC PHP 结构,您将在每个页面中包含页眉和页脚。自己尝试一下,看看你是怎么做的,如果你确实有问题,换一种不同的方法不会花很长时间。
      • 最后,这可以与改变主要内容视图的侧边栏视图一起使用
      【解决方案3】:

      这很简单。

      一个简单的例子:

      您可以在控制器中放置

      //a test variable
      $data["foo"] = 'bar';
      $data["page"] = 'a_page'; // this will make sure it loads the views/pages/a_page.php in your template
      $this->load->view('templates/login',$data);
      

      您可以在views/template/login.php 中输入:

      <!-- your login template html  -->
      <html>
          ...
          <!-- include the view you want inside your login template -->
          <?php $this->load->view('pages/'.$page);?><!-- As you can see it loads /views/pages/a_page.php -->
          <?php echo $foo;?> //This will echo Bar
      </html>
      

      或:

      <?php $this->load->view('template/login_header');?>
      <?php $this->load->view('pages/'.$page);?>
      <?php $this->load->view('template/login_footer');?>
      

      views/pages/a_page.php 也会知道$foo

      这会在您的模板中加载另一个视图(views/pages/a_page.php)。

      这样您就可以创建您想要的所有模板,并将您的视图包含在这些模板中。

      提示:以这种方式处理页眉和页脚很快就会变得难以管理。而且还是用模板库比较好。试试Phil sturgeon's library

      【讨论】:

      • 在重新阅读您的答案时,我可以将我的模板写成这样(大致)&lt;body&gt; &lt;div nav&gt; &lt;/div nav&gt; &lt;div content&gt; &lt;?php $this-&gt;load-&gt;view('pages/'.$page);?&gt; &lt;/div content&gt; &lt;div footer&gt; &lt;/div footer&gt; &lt;/body&gt;,但我对 $data["page"] = 'a_page'; $this-&gt;load-&gt;view('templates/login',$data); 感到困惑,例如使用它来加载表单
      • 看起来不错,您放入 $data 的所有内容都可以在您的页面中访问。例如,如果您添加 $data["foo"] = "bar";然后在 /views/pages/a_page.php 中添加 print_r($foo) 它将打印“bar”没问题。
      • 所以澄清$data = array( 'name' =&gt; 'username', 'id' =&gt; 'username', 'value' =&gt; 'johndoe', 'maxlength' =&gt; '100', 'size' =&gt; '50', 'style' =&gt; 'width:50%', ); 也可以吗?
      • 是的,但也不要忘记 'page'=>'a_page' ;) 并阅读我的提示:以这种方式处理页眉和页脚很快就会变得难以管理。最好的方法是对拥有一个可以使用的良好模板库进行更多研究。除非这没什么大不了的。
      猜你喜欢
      • 2011-08-05
      • 1970-01-01
      • 2021-06-29
      • 1970-01-01
      • 2020-09-30
      • 2011-09-25
      • 1970-01-01
      • 1970-01-01
      • 2019-02-28
      相关资源
      最近更新 更多