Php 在CodeIgniter中构建网站应用程序的最佳方法

Php 在CodeIgniter中构建网站应用程序的最佳方法,php,codeigniter,Php,Codeigniter,人们如何用cake/CI等构建网站。。。为了便于html的维护 我可以将每个部分放在自己的视图文件中,并以这种方式创建网站: <div id="header"></div> <!-- header_view.php --> <div id="content"> <!-- header_view.php --> <div id="left_column"></div> <!-- page_x_view

人们如何用cake/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 -->

但是每个pagex_view.php文件将包含

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

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


希望我清楚。

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

我有一个控制器,该控制器具有一个呈现整个页面的方法。我从此主控制器扩展所有控制器。这有什么帮助?我的主控制器获取一个视图并将其嵌入页面的主内容区域,然后组装一个完整的页面。该控制器获取页眉、页脚和侧栏视图,并执行所有mambo jumbo操作。在CI中开发这样一个系统非常容易。有些称之为两步或多视图。所以,如果某一天我不得不改变我的页面布局,我只需要看看我的_控制器

另一边的蛋糕使用布局。我在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));
    }
}

模板/布局库怎么样?这是Phil Sturgeon的一个:我需要第二个模板。你应该把它贴出来作为答案!编辑:虽然,我喜欢的是:-)对模板来说非常陌生,为什么你们推荐两个不同的模板库?从来没有听说过一个控制器组装一个页面,我能有一小段代码来帮助我理解吗?编辑:还有,为什么不使用模板呢?
 $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);