在代码点火器中构建网站应用程序的最佳方法


Best way to construct a website application in code igniter

人们如何用蛋糕/CI构建网站…为了方便维护html?

我可以把每个部分放在自己的视图文件中,并使网站这样:

<div id="header"></div> <!-- header_view.php -->
<div id="content"> <!-- header_view.php -->
    <div id="left_column"></div> <!-- page_x_view.php -->
    <div id="center_column"></div> <!-- page_x_view.php -->
</div>
<div id="footer"></div> <!-- footer_view.php -->

但是每个page_x_view。php文件都会包含

<div id="left_column"><!-- Content --></div>
<div id="center_column"><!-- Content --></div>

我在每个文件中复制这些项,所以如果我需要改变列结构,那就不容易了。

我有一个名为MY_Controller的控制器,它有一个呈现完整页面的方法。我从这个主控制器扩展了所有的控制器。这有什么用呢?我的主控制器获取一个视图并将其嵌入到页面的主要内容区域中,并组装一个完整的页面。这个控制器接受页眉,页脚,侧边栏视图,并完成所有繁琐的工作。在CI中开发这样的系统非常容易。其中一些称为两步视图或多视图。因此,如果某天我需要改变页面布局,我只需要查看MY_Controller。

另一边的Cake使用布局。我在CakePHP中只做了一个项目,所以我不是专家,但你可以在任何框架中实现相同的效果。下面是我在CI 中的操作方法
<?php if (!defined('BASEPATH')) exit('No direct script access allowed');
class MY_Controller extends CI_Controller 
{
    public function __construct() 
    {
        parent::__construct();
        log_message('debug', 'Controller Library '.__CLASS__ . ' ('. __FILE__ .') loaded.');
        $this->properties['viewPath'] = $this->config->item('viewPath');
        $this->setPageMetaData();
        $this->setFavIcon();
    }
    public function render($viewData = null, $data=null)
    {
        $data = array(
            'headerLayout' => $this->printHeaderLayout(array_merge($this->properties, (isset($data['headerLayout'])?$data['headerLayout']:array()))),
            'leftLayout' => $this->printLeftLayout(array_merge($this->properties, (isset($data['leftLayout'])?$data['leftLayout']:array()))),
            'rightLayout' => $this->printRightLayout(array_merge($this->properties, (isset($data['rightLayout'])?$data['rightLayout']:array()))),
            'footerLayout' => $this->printFooterLayout(array_merge($this->properties, (isset($data['footerLayout'])?$data['footerLayout']:array()))),
            'containerLayout' => $viewData,
        );
        this->load->view($this->properties['viewPath'].'layout/layout.php', $data);
    }
    public function setPageMetaData($pageMetaData=null) 
    {
        $this->properties['pageTitle'] = isset($pageMetaData['pageTitle'])? $pageMetaData['pageTitle'] : $this->config->item('pageTitle');
        $this->properties['pageKeywords'] = isset($pageMetaData['pageKeywords'])? $pageMetaData['pageKeywords'] : $this->config->item('pageKeywords');
        $this->properties['pageDescription'] = isset($pageMetaData['pageDescription'])? $pageMetaData['pageDescription'] : $this->config->item('pageDescription');
    }
    public function setFavIcon($favIcon=null) 
    {
        $this->properties['favIcon'] = (null !== $favIcon) ? $favIcon : $this->config->item('favIcon');
    }
    public function printHeaderLayout($data=null)
    {
        return ($this->load->view($this->properties['viewPath'].'layout/header', $data, true));
    }
    public function printFooterLayout($data=null)
    {
        return( $this->load->view($this->properties['viewPath'].'layout/footer', $data, true));
    }
    public function printLeftLayout($data=null)
    {
        return($this->load->view($this->properties['viewPath'].'layout/left', $data, true));
    }
    public function printRightLayout($data=null)
    {
        return($this->load->view($this->properties['viewPath'].'layout/right', $data, true));
    }
}

请注意,这不是确切的代码。我不得不为你修改它,所以不要盲目使用它。如果您了解CI,您将了解我在配置文件中有要查看的设置路径。这有助于我设置两个完全不同的主题,并使用相同的控制器。我还可以添加身份验证层,这将基于用户身份验证/cookie可以显示头部的登录或注销链接。这是一个我一直在改变的模板我从MY_Controller扩展了我所有的控制器在我的控制器中我只需要输入

 $viewDataForForm = $this->load->view($this->properties['viewPath'].'homepage/some-form', array(), true);
 $viewDataForContent = $this->load->view($this->properties['viewPath'].'homepage/some-content', array(), true);
 $this->render($viewDataForForm.$viewDataForContent);

HTH !

Codeigniter和CakePHP利用了模型视图控制器的配置。它们将数据库查询和数据处理从视图中分离出来。这提供了一种易于使用和维护的编码方式。多个控制器可以使用相同的视图,这有助于减少编写的代码量和复杂性。模型中的方法可以重用,从而减少bug和编写的代码量。控制器提供了易于遵循的阅读和编写代码的方式。我不确定我是否回答了你的问题,但如果你需要更多的解释,请评论我的回答。