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

时间:2011-08-04 02:54:19

标签: 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.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>

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

希望我很清楚。

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

我有一个控制器caled MY_Controller,它有一个呈现完整页面的方法。我从这个主控制器扩展了所有控制器。这有帮助吗?我的主控制器获取视图并将其嵌入页面的主要内容区域并组装完整的页面。这个控制器采用页眉,页脚,侧边栏视图,并完成所有mambo jumbo。它很容易在CI中开发这样的系统。有些人会调用两步或多个视图。因此,如果有一些随机的日子我必须改变我的页面布局,我只需要看一下MY_Controller。

另一边的蛋糕使用布局。我在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,您将了解我在配置文件中设置了要查看的路径。这有助于我设置两个完全不同的主题并使用相同的控制器。我还可以添加基于用户身份验证/身份验证的身份验证层,可以在标头中显示登录或注销链接。这是一个我不断更改的模板,我从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!