Я 'довольно новичок в MVC, и я 'нашел CodeIgniter недавно. Я продолжаю учиться каждый день, но одна проблема - это его шаблонизатор. Какой лучший способ создания шаблонов в CodeIgniter?
CakePHP поставляется с собственной библиотекой шаблонов, есть ли подобная возможность в CodeIgniter?
В отличие от других фреймворков CodeIgniter не имеет глобальной системы шаблонов. Каждый контроллер управляет своим собственным выводом независимо от системы, а представления работают по принципу FIFO, если не указано иное.
Например, если у нас есть глобальный заголовок:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd" >
<html>
<head>
<title><?=$title?></title>
<!-- Javascript -->
<?=$javascript ?>
<!-- Stylesheets -->
<?=$css ?>
</head>
<body>
<div id="header">
<!-- Logos, menus, etc... -->
</div>
<div id="content">
и глобальный нижний колонтитул:
</div>
<div id="footer">
<!-- Copyright, sitemap, links, etc... -->
</div>
</body>
</html>
тогда наш контроллер будет выглядеть следующим образом
<?php
class Welcome extends Controller {
function index() {
$data['title'] = 'My title';
// Javascript, CSS, etc...
$this->load->view('header', $data);
$data = array();
// Content view data
$this->load->view('my_content_view', $data);
$data = array();
// Copyright, sitemap, links, etc...
$this->load->view('footer', $data);
}
}
Существуют и другие комбинации, но лучшие решения можно найти в пользовательских библиотеках, таких как:
Смотрите комментарии ниже
Я'пробовала несколько способов сделать шаблоны CodeIgniter и так, что я останусь это самый быстрый и простой, выглядит следующим образом.
В контроллер:
//Charge the view inside array
$data['body'] = $this->load->view('pages/contact', '', true);
//charge the view "contact" in the other view template
$this->load->view('template', $data);
Ввиду template.php:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"><html xmlns="http://www.w3.org/1999/xhtml" xml:lang="es">
<head>
<title>Template codeigniter</title>
</head>
<body>
<div>
<?=$body?>
</div>
<div class="clear"></div>
<div>Footer</div>
</div>
</body>
</html>
`$тело-это вид контакта.
Сделать библиотеку, которая включает в себя все ваши мнения и отправить ему данные, которые нужно отправить на ваш взгляд контент. Это все!
<?php
class Display_lib
{
public function user_page($data,$name)
{
$CI =& get_instance ();
$CI->load->view('preheader_view',$data);
$CI->load->view('header_view');
$CI->load->view('top_navigation_view');
$CI->load->view($name.'_view',$data);
$CI->load->view('leftblock_view',$data);
$CI->load->view('rightblock_view',$data);
$CI->load->view('footer_view');
}
}
Эта библиотека, простота в использовании и настройке, делает именно то, что вы'd не ожидал:
Я использую CodeIgniter со Smarty, и это 'здорово (если вам нравится Smarty, как нравится мне).
Скажем, у вас есть контроллер статей, вы можете сделать в нем что-то вроде этого:
class Article extends Controller {
function show_all() {
$articles = $this->article_model->get_all();
$this->smarty->assign('entities', $articles);
$this->smarty->view('list');
}
}
А затем в вашем шаблоне:
{include file="header.tpl"}
<ul>
{foreach from=$entities item=entity}
<li>{$entity.title}</li>
{/foreach}
</ul>
{include file="footer.tpl"}
Самое приятное в этом то, что контроллеру не нужно знать о заголовках и колонтитулах. Он просто знает, что группа статей должна быть показана в виде списка. Отсюда следует, что только шаблоны отвечают за определение того, как будет отображаться список, в данном случае в ul между верхним и нижним колонтитулами.
Еще одна интересная вещь, которую вы можете сделать, это использовать этот шаблон списка для вещей, которые не являются статьями. Вы можете иметь список пользователей или страниц или что-то еще. В некоторых случаях повторное использование такого шаблона может быть полезным. Не всегда, но иногда.
Настройка CodeIgniter для smarty довольно проста. Нужно скопировать файлы Smarty в папку библиотеки и создать простую обертку для него. Вы можете найти инструкции здесь:
http://devcha.blogspot.com/2007/12/smarty-as-template-engine-in-code.html
Как только вы настроите его, он станет замечательным.
Ну вы на самом деле можете использовать библиотеки в CodeIgniter для шаблоны. Наиболее известными из них являются:
У меня есть два основных шаблонов; один для узла и один для нашей админ-панели. Вот мои настройки для нашего основного сайта (в основном статические)... я решил на один контроллер под названием "сайт" это вызывает файл шаблона и каждой странице и получает своих просмотр файла.
Почему'т кто-нибудь упоминал шаблонизатор использовать? - Просто - вид лучше/быстрее?
вид
:$шаблон['сайта']['шаблон'] = 'site_template'; $шаблон['сайта']['регионы'] = массив('название','в разделе','столбец col2','содержание',); $шаблон['сайта']['парсер'] = 'парсер'; $шаблон['сайта']['parser_method'] = 'разобрать'; $шаблон['сайта']['parse_template'] = ложь;
$маршрут['что-мы-делаем'] = 'сайт/what_we_do'; $маршрут['кто-то-несколько'] = 'сайт/who_we_are'; $маршрут['кто-мы-/(: любой)'] сайта/who_we_are/1$&я = то ";
сайт класс расширяет CI_Controller { функция конструкт() { родитель:: методConstruct(); $это->По шаблону>set_template('сайта'); // задать для сайта шаблон $этом-и GT;нагрузка->библиотека('Мобил'); } индекс общественные функции() { $данных = блок('в разделе' => 'дома'); $это->По шаблону>write_view('столбец col2', 'сайт/меню.на PHP', $данных); $это->По шаблону>писать('название', то "крутое название страницы и", Истина); $это->По шаблону>писать('в разделе', $данных['в разделе'], истина); $это->По шаблону>write_view('содержание', 'сайт/добро пожаловать', $данных); $это->шаблон->отрисовка(); } who_we_are общественные функции() { // этот бит готовит второй сегмент. $слаг = как strreplace('-', '', $это->Ури->сегмент(2, 0)); если($слизняк) // если есть второй сегмент, мы нагружаем человека. { $данных['био'] = $этом-и GT;загрузить->вид('сайт/человек/'.$слизень, '', правда) } еще { // где он загружает общий вид who_we_are } // и так далее для каждой страницы...
и как точно заметил маршрутизатор позволяет нам оставить `/сайт/' в URL, http://the site.com/who-we-are
мысли? кто? Бюллер?
Я'м смещена в сторону этой библиотеки шаблонов, сделанных Кармело Capinpin потому что это настолько прост в использовании: текст ссылки. Просто скопируйте файл в вашей библиотеке и вы'вновь готов идти. Инструкции о том, как использовать это в ссылке, которую я предоставил.
Есть библиотека, которая позволяет использовать шаблоны в CodeIgniter с в собственном стиле. Чтобы загрузить шаблон/тема вобще:
$this->load->theme(‘theme_name’);
Для загрузки CSS и JavaScript файлы из вашего мнения можно сделать:
$this->load->css(‘path/file.css’);
$this->load->js(‘path/file.js’);
При желании вы можете контролировать путь кэш браузера УСБ & JS файлы.
Ну codeignier нет такой библиотеки по умолчанию. Но если вы хотите, чтобы управлять различными темами, мнениями, и активов, попробуйте использовать это:
Позвольте мне предложить более простой способ сделать это. Считают мой ответ на подобный вопрос.
Плюсы:
Минусы:
шаблон
(или макет
—если вы хотите сделать это так, как рельсы каталоге) под видом для того, чтобы правильно структурировать ваш код. Это вытекает из плюсы[2].Шаблон Codeigniter - это, как правило, просто PHP-файл. Вы можете использовать весь обычный синтаксис PHP для вывода переменных, выполнения циклов и вызова другого PHP-кода.
Пример контроллера:
<?php
class Blog extends Controller {
function index()
{
$data['title'] = "My Real Title";
$data['heading'] = "My Real Heading";
$this->load->view('blogview', $data);
}
}
?>
Образец представления:
<html>
<head>
<title><?php echo $title;?></title>
</head>
<body>
<h1><?php echo $heading;?></h1>
</body>
</html>
Подробнее читайте в документации здесь: CodeIgniter User Guide: Views