Как справиться с шаблонами Codeigniter? - PullRequest
27 голосов
/ 23 июня 2009

Я довольно новичок в MVC и недавно нашел CodeIgniter. Я все еще учусь каждый день, но одной из проблем является его шаблонизатор. Каков наилучший способ создания шаблонов в CodeIgniter?

CakePHP поставляется с собственной библиотекой шаблонов, есть ли похожая функция в CodeIgniter?

Ответы [ 12 ]

25 голосов
/ 23 июня 2009

В отличие от других фреймворков 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);
    }
}

Существуют и другие комбинации, но лучшие решения существуют через пользовательские библиотеки, такие как:

См. Комментарии ниже

14 голосов
/ 14 сентября 2011

Я пробовал несколько способов создания шаблонов 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 - это просмотр контакта.

13 голосов
/ 28 марта 2011

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

<?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');        
    }
}
5 голосов
/ 29 июля 2009

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

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

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

4 голосов
/ 23 июня 2009

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

Приятно то, что контроллеру не нужно знать о верхних и нижних колонтитулах. Он просто знает, что группа статей должна отображаться в виде списка. Оттуда, это просто шаблоны, которые отвечают за определение того, как список вещей отображается, в данном случае, в улье между верхним и нижним колонтитулами.

Еще одна крутая вещь, которую вы можете сделать, это использовать этот шаблон списка для вещей, которые не являются статьями. Вы можете иметь список пользователей или страниц или что-то еще. В некоторых случаях повторное использование такого шаблона может быть полезным. Не всегда, но иногда.

Настройка CodeIgniter для smarty довольно проста. Это вопрос копирования файлов Smarty в папку вашей библиотеки и создания простой оболочки для нее. Вы можете найти инструкции здесь:

http://devcha.blogspot.com/2007/12/smarty-as-template-engine-in-code.html

Как только вы настроены, это здорово.

2 голосов
/ 20 июля 2013

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

  1. Простота Codeigniter (активно разрабатывается)
  2. Библиотека шаблонов Фила Стерджена (Не активно разрабатывается)
  3. Введение в представления и шаблоны в CodeIgniter (Здесь вы фактически создаете библиотеку шаблонов с нуля)
2 голосов
/ 05 января 2012

У меня есть два основных шаблона; один для сайта и один для нашей админ-панели. Вот мои настройки для нашего основного сайта (в основном статические) ... Я выбрал один контроллер с именем 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 я устанавливаю правила для обработки запросов на site контроллер, который в основном состоит из отдельных сегментов, но мы делаем иметь одну секцию , которая структурирована как таковая; / кто-мы-есть , а затем для выбранных людей / кто мы есть / Роберт Уэйн и так:

    $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://the site.com/who-we-are

мысли? кто-нибудь? Bueller

1 голос
/ 29 сентября 2011

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

$this->load->theme(‘theme_name’);

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

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

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

1 голос
/ 17 июля 2009

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

0 голосов
/ 04 марта 2014

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

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

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