Лучший способ создать веб-приложение в коде воспламенителя - PullRequest
0 голосов
/ 04 августа 2011

Как люди создают веб-сайты с помощью Cake / CI ect ... для удобства обслуживания в 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 голосов
/ 04 августа 2011

У меня есть контроллер с именем MY_Controller, у которого есть метод, который отображает всю страницу.Я расширяю все свои контроллеры с этого основного контроллера.Как это помогает?Мои основные контроллеры выбирают представление и встраивают его в основную область содержимого страницы и собирают полную страницу.Этот контроллер принимает заголовок, нижний колонтитул, боковую панель и выполняет все мамбо-джамбо.Очень легко разработать такую ​​систему в 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!

0 голосов
/ 04 августа 2011

Codeigniter и CakePHP используют преимущества конфигурации Model View Controller .Они отделяют запросы базы данных и обработку данных от представлений.Это обеспечивает простой в использовании и простой в использовании способ кодирования.Контроллеры Multiply могут использовать одно и то же представление, которое помогает сократить объем написанного кода и его сложность.Методы в моделях можно использовать повторно, что уменьшает количество ошибок и объем написанного кода.А контроллеры предоставляют и простой в использовании способ чтения и записи кода.Я не уверен, что ответил на ваш вопрос, но прокомментируйте мой ответ, если вам нужно, и дополнительные пояснения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...