Как работать с шаблонами Codeigniter?
Я новичок в MVC, и недавно нашел CodeIgniter. Я все еще изучаю каждый день, но одна проблема - его механизм шаблонов. Каков наилучший способ создания шаблонов в CodeIgniter?
CakePHP поставляется со своей собственной библиотекой шаблонов, есть ли аналогичная функция в CodeIgniter?
Ответы
Ответ 1
В отличие от других фреймворков 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);
}
}
Существуют и другие комбинации, но лучшие решения существуют через пользовательские библиотеки, например:
См. комментарии ниже
Ответ 2
Я пробовал несколько способов делать шаблоны 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>
$body
- это контакт вида.
Ответ 3
Создайте библиотеку, которая включает все ваши представления и отправьте ее, которые вам нужно отправить на ваш контент. Это все!
<?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');
}
}
Ответ 4
Эта библиотека, простая в использовании и настройке, делает именно то, что вы ожидаете:
- избегать дублирования HTML (header, footer..)
- Не нужно изучать новый язык (!)
Самая простая библиотека шаблонов для CodeIgniter
Ответ 5
Я использую 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
Как только вы получите, это очень удобно.
Ответ 6
У меня есть два основных шаблона; один для сайта и один для нашей панели администратора. Вот моя настройка для нашего основного сайта (в основном статического)... Я решил один контроллер под названием site
Он вызывает файл шаблона и каждую страницу и получает его файл вида.
Почему никто не упоминает использование движка шаблонов? Are -just- views лучше/быстрее?
-
В config/template.php
я определил шаблон (ы). Примечание * site_template * находится в папке views
:
$template['site']['template'] = 'site_template';
$template['site']['regions'] = array('title','section','col2','content',);
$template['site']['parser'] = 'parser';
$template['site']['parser_method'] = 'parse';
$template['site']['parse_template'] = FALSE;
-
В config/routers.php
Я устанавливаю правила для обработки запросов на
Контроллер site
, который состоит из отдельных сегментов, в основном, но мы делаем
имеют один раздел, который структурирован как таковой; /who -we-are, а затем
для избранных людей /who -we-are/robert-wayne и так:
$route['what-we-do'] = 'site/what_we_do';
$route['who-we-are'] = 'site/who_we_are';
$route['who-we-are/(:any)'] = "site/who_we_are/$1"
-
И controllers/site.php
Опять с функцией для каждой страницы/раздела:
class Site extends CI_Controller
{
function __construct() {
parent::__construct();
$this->template->set_template('site'); // ask for the site template
$this->load->library('mobile');
}
public function index()
{
$data = array('section' => 'home');
$this->template->write_view('col2', 'site/menu.php', $data);
$this->template->write('title', "COOL PAGE TITLE", TRUE);
$this->template->write('section', $data['section'], TRUE);
$this->template->write_view('content', 'site/welcome', $data);
$this->template->render();
}
public function who_we_are()
{
// this bit readies the second segment.
$slug = str_replace('-', '_', $this->uri->segment(2, 0));
if($slug) // IF there is a second segment we load the person.
{
$data['bio'] = $this->load->view('site/people/'.$slug, '', true)
} else {
// where it loads the general view who_we_are
}
// and so on for each page...
и в качестве тонкой заметки маршрутизатор позволяет нам не указывать "/site/" в URL-адресе,
http://site.com/who-we-are
мысли? кто угодно? Bueller?
Ответ 7
Хорошо, вы можете использовать библиотеку codeigniter для шаблонов. Самые известные из них:
Ответ 8
Я склонен к этой библиотеке шаблонов, созданной Carmelo Capinpin, потому что она настолько проста в использовании: текст ссылки. Просто скопируйте файл в свою библиотеку, и вы готовы к работе. Инструкции о том, как его использовать, указаны в ссылке, которую я предоставил.
Ответ 9
Существует библиотека, которая позволяет использовать шаблоны в CodeIgniter в родном стиле.
Чтобы загрузить шаблон/тему, просто выполните:
$this->load->theme(‘theme_name’);
Чтобы загрузить файлы CSS и javascript из ваших представлений, вы можете:
$this->load->css(‘path/file.css’);
$this->load->js(‘path/file.js’);
Вы можете дополнительно управлять тем, как браузеры кэшируют файлы CSS и JS.
Ответ 10
Шаблон 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: Представления
Ответ 11
Позвольте мне предложить более простой способ сделать это. Рассмотрите мой ответ на аналогичный вопрос.
Плюсы:
- Ваш файл шаблона может быть полным HTML файлом. Вам не нужно разбивать заголовок и нижний колонтитул.
- Любой файл просмотра может быть превращен в шаблон с минимальными усилиями.
- Данные для конкретного представления могут быть сгенерированы в шаблоне.
Минусы:
1. Возможно, вам нужно добавить каталог template
(или layout
-if, который вы хотите сделать это в режиме Rails), в целях просмотра структуры кода. Это следует из п. [2].
2. Данные для конкретного представления от контроллера должны, прежде всего, быть переданы в шаблон.
Ответ 12
У Well codeignier нет такой библиотеки по умолчанию. Но если вы хотите, чтобы различные темы, представления и активы, которые нужно было контролировать, используйте это:
https://github.com/mahadazad/php-layout-manager