【问题标题】:How to load a view in codeigniter如何在codeigniter中加载视图
【发布时间】:2014-12-23 05:22:54
【问题描述】:

我已经根据网站结构的需要将我的网站的html分割成多个文件,并将它们全部保存为codeigniter的views文件夹中的视图。

我正在从一个通用控制器加载相同的内容:

$this->load->view($this->config->item('templates_path') . 'header', $this->data);
$this->load->view($this->config->item('templates_path') . 'navbar', $this->data);
$this->load->view($this->config->item('templates_path') . 'main-container', $this->data);
$this->load->view($this->config->item('templates_path') . $sidebar, $this->data);
$this->load->view($this->config->item('templates_path') . 'main-content', $this->data);
$this->load->view($this->config->item('templates_path') . 'breadcrumb', $this->data);
$this->load->view($this->config->item('templates_path') . 'page-content', $this->data);
$this->load->view($this->config->item('templates_path') . 'main-content-end', $this->data);
$this->load->view($this->config->item('templates_path') . 'footer');
$this->load->view($this->config->item('templates_path') . 'main-container-end', $this->data); 
$this->load->view($this->config->item('templates_path') . 'bottom');

上面的一些视图文件在文件中只有几个 HTML 标签,例如: 查看文件

$this->load->view($this->config->item('templates_path') . 'main-content-end', $this->data);

只有

</div><!-- /.main-container --> 

codeigniter 中有没有办法直接加载 html 部分而不将其创建为新的视图文件?

【问题讨论】:

  • 您可以使用简单的 php include(); 语句将此文件包含在其他视图文件中。
  • 为什么不能将所有这些部分合并到一个或两个文件中?在我的 CodeIgniter 项目中,我有一个模板控制器,可以将我的内容插入到单个模板文件中。我想我只是不明白你为什么需要做所有这些。
  • 使用布局库并在布局视图中组合所有元素参见布局库教程:github.com/bcit-ci/CodeIgniter/wiki/layout-library

标签: php html codeigniter


【解决方案1】:

在您的 Views 目录中创建一个文件夹,并将其命名为“包含”或您想要的任何名称。
然后,您可以使用以下 PHP 在其他视图中包含这些 HTML 模板片段:

include('/path/to/include/file-to-include.php');


评论:
• 文件的路径应该相对于视图文件
• 包含的文件不必是 .php 文件,如果您愿意,它可以是 HTML 文件(或者如果您愿意,它可以包含 PHP 代码)
• 我在本地安装的codeigniter 中对此进行了测试,结果按预期工作

【讨论】:

  • OP 说他不想为极少量的 HTML 创建视图文件。使用 PHP include 有何不同?对于单个 HTML 标记,也许 PHP echo 更合适。或者,也许 OP 需要创建一个控制器来将他的内容插入到单个模板中。
  • 我不建议创建视图文件,但是除了 include() 之外,OP 还有什么其他选项可以将其放入渲染页面...我建议使用这些小的 sn-p 元素只需放入包含文件夹并添加到相关视图中(一些视图将返回到浏览器,此解决方案试图减少用于构成最终渲染视图的子视图块的数量
  • 我想我只是没有看到您的答案与他已经在做的事情(使用相同数量的外部文件)之间存在很大差异。为什么他不能将所有这些外部部分组合成一个模板?
  • 我想这取决于他的整个网站有多少是可模板化的还是从视图到视图的自定义...在我的情况下,我的页面变化非常自定义,所以我认为唯一的区域是真正模板化和不变的是我的页眉、导航和页脚。我不需要进一步将我的项目分开,但我确实将它的结构包含在我的视图文件中的 2 个模板文件(页眉/导航和页脚)——我的答案的目标是减少视图加载调用,因为静态元素将包含在单个视图文件中(有点像设置它并忘记它的场景,因为它是自动添加的。
  • 我对你的回答没有特别的问题......我只是不明白 OP 在这里说什么,“我已经将我的网站的 html 切成了多个文件根据站点结构的需求”,但随后暗示一切都通过“公共控制器”。要么一切都是共同的,要么不是。如果它很常见,那为什么一开始就把它切成这么小的碎片,只是抱怨碎片太小了?
【解决方案2】:

据我所知,创建视图“文件”是必需的,必须创建并包含 html 或 php 文件,load-&gt;view 部分只是为您完成,它与包含完全相同,只是它抛出了一些CI 逻辑。

我通常为我的网站做的是创建一个名为“mainTemplate”的函数我的 MY_Controller,(名称可能不同)

function mainTemplate($views = null, $data)
{
$this->load->view('header',$data);
$this->load->view('breadcrumbs',$data);

//now some logic, if we have a string for a view, we just load the string
if(is_string($views)
$this->load->view($views,$data)

//if it's an array of views, we just iterate over the array and show each view
foreach ($views as $view)
{
    $this->load->view($view,$data);
}  
 //and now the footer
  $this->load->view('footer',$data);  
}

现在你可以在你的控制器内部调用这样的东西:

$this->mainTemplate('pageContent',$data);

您可以为每个模板创建一个新函数并包含每个模板所需的视图。例如,我有一个登录模板、一个主页模板、一个产品模板等。

希望它更接近您的要求。

【讨论】:

  • 我已经在做同样的事情了,我的问题是关于加载一些 HTML 标签而不创建视图文件。谢谢
  • 如果没有在某处实际编写 HTML,就无法显示 HTML 代码。你可以通过 PHP 本身来实现,这太可怕了,比如 ` echo "home page" ` ,但是这是非常糟糕的做法,我不确定您要达到什么目的。
【解决方案3】:

如果是codeigniter,首先创建一个视图文件并将其存储在views文件夹中。 加载视图文件的语法

$this->load->view('filenane');

文件名不需要有扩展名。 更多详情请首选codeigniter

【讨论】:

    【解决方案4】:

    在你的视图侧进行完整的设计,然后使用下面的代码来加载你的视图

    $this->load->view('filenane');
    

    不要在文件名中使用扩展名来加载你的视图,只需使用你的文件名。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-07
      • 2014-10-18
      • 1970-01-01
      • 2014-02-14
      • 1970-01-01
      相关资源
      最近更新 更多