Как работать с шаблонами Codeigniter?

Я довольно новичок в 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> 

$body – контакт вида.

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

 <?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'); } } 

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

  • избегайте дублирования HTML (заголовок, нижний колонтитул ..)
  • нет необходимости изучать новый язык (!)

Самая простая библиотека шаблонов для CodeIgniter

Я использую 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

Как только вы получите, это здорово.

У меня есть два основных шаблона; один для сайта и один для нашей панели администратора. Вот моя настройка для нашего основного сайта (в основном статического) … Я решил на одном контроллере, называемом site Он вызывает файл шаблона и каждую страницу и получает его файл вида.

Почему никто не упоминает использование шаблонов шаблонов? Лучше / быстрее ?

  • В 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 я config/routers.php правила для обработки запросов для контроллера site которые в основном являются URL-адресами отдельных сегментов, но у нас есть один раздел, который структурирован как таковой; / 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?

Ну, вы можете использовать библиотеку codeigniter для шаблонов. Самые известные из них:

  1. Codeigniter Simplicity (активно развивается )
  2. Библиотека шаблонов Фила Стерджона (не активно развивается)
  3. Введение в Views & Templating в CodeIgniter (здесь вы фактически создаете библиотеку шаблонов с нуля)

Я склонен к этой библиотеке шаблонов, созданной Carmelo Capinpin, потому что она настолько проста в использовании: текст ссылки . Просто скопируйте файл в свою библиотеку, и вы готовы к работе. Инструкции о том, как его использовать, приведены в ссылке, которую я предоставил.

Существует библиотека, которая позволяет использовать шаблоны в CodeIgniter в родном стиле. Чтобы загрузить шаблон / тему, выполните:

 $this->load->theme('theme_name'); 

Чтобы загрузить файлы CSS и javascript из своих представлений, вы можете:

 $this->load->css('path/file.css'); $this->load->js('path/file.js'); 

Вы можете дополнительно управлять тем, как браузеры кешируют файлы CSS и JS.

Шаблон 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 Руководство пользователя: Просмотры

Позвольте мне предложить более простой способ сделать это. Рассмотрите мой ответ на аналогичный вопрос .

Плюсы:

  1. Ваш файл шаблона может быть полным HTML-файлом. Вам не нужно разбивать заголовок и нижний колонтитул.
  2. Любой файл просмотра может быть превращен в шаблон с минимальными усилиями.
  3. Данные для конкретного представления могут быть сгенерированы в шаблоне.

Минусы: 1. Вам может потребоваться добавить template (или layout если вы хотите сделать это в режиме Rails) под представлениями, чтобы правильно структурировать код. Это следует из п. [2]. 2. Данные для конкретного представления от контроллера должны быть сначала переданы в шаблон.

У Well codeignier нет такой библиотеки по умолчанию. Но если вы хотите, чтобы различные темы, представления и активы, которые нужно было контролировать, используйте это:

https://github.com/mahadazad/php-layout-manager