Проблема макета CodeIgniter по умолчанию: Как создать макет по умолчанию для всего проекта в CodeIgniter_2.0.2? - PullRequest
0 голосов
/ 30 августа 2011

Я хочу создать макет по умолчанию для всего проекта codeigniter. (как cakephp)

Мне также нужно передать значение из базы данных (через контроллер) в макет по умолчанию.

Как я могу это сделать?

Ответы [ 4 ]

1 голос
/ 17 сентября 2012

На самом деле есть очень простое решение, которое вы можете использовать.Это микробиблиотека, которую я написал для использования макетов в CodeIgniter :

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed'); 

class Layout {
protected $CI;

public function __construct() {
    $this->CI =& get_instance();
}

/**
 * This method loads either the default layout (defined in the config.php file with the key default_layout) or a specific layout
 * @param string $view
 * @param array $params
 * @param string $layout
 */
public function load_layout($view, $params = array(), $layout = "") {  
    // get the name of the layout file
    $layout_file = file_exists(dirname(__FILE__) . "../views/" . $layout) ? $layout : $this->CI->config->item("default_layout");
    // load it, transmit the params
    $this->CI->load->view(
        $layout_file, 
        array(
            "view_name" => $view,
            "view_params" => $params
        )
    );
}
?>

Добавьте этот файл в свой проект в макете .php file, затем просто перейдите в ваш конфигурационный файл и добавьте следующую строку:

$config['default_layout'] = "your-default-layout-name.php";

И, наконец, создайте новый файл в папке application / views вашего проекта иназовите его значением, которое вы указали в своем конфигурационном файле, например your-default-layout-name.php .Вставьте все содержимое базовой структуры ваших страниц и добавьте в основную оболочку:

<?php
    // load required view
    if (isset($view_name)) {
        $this->load->view(
                $view_name, $view_params
        );
    }        
?>

Хорошо!теперь вы можете просто заменить родной:

$this->load->view("view-name.php", $params);

на:

// load the default layout
$this->layout->load_layout("view-name.php", $params);
// load a specific layout
$this->layout->load_layout("view-name.php", $params, "my-specific-layout.php"); 

И он будет работать как шарм!

Примечание: не забудьте включитьбиблиотеки, либо в вашем файле autoload.php, либо непосредственно в вашем скрипте.

1 голос
/ 30 августа 2011

Вы можете использовать крючки для достижения этого

post_controller - Вы можете установить переменные с этим.
Вызывается сразу после того, как ваш контроллер полностью выполнен.

display_override - Вы можете переопределить отображение и включить свой собственный вид.
Переопределяет функцию _display (), используемую для отправки завершенной страницы в веб-браузер в конце выполнения системы. Это позволяет вам использовать собственную методологию отображения. Обратите внимание, что вам нужно будет ссылаться на суперобъект CI с помощью $ this-> CI = & get_instance (), и тогда окончательные данные будут доступны, вызвав $ this-> CI-> output-> get_output ()

ссылка: http://codeigniter.com/user_guide/general/hooks.html

1 голос
/ 31 августа 2011

CodeIgniter wiki - отличное место для поиска этого типа помощи.

Например, вот четыре различных подхода для достижения того, что вы хотите сделать.

1 голос
/ 30 августа 2011

Вы можете рассмотреть возможность использования системы шаблонов.Например Библиотека шаблонов

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