Подтвердить что ты не робот

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

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

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

4b9b3361

Ответ 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');        
    }
}

Ответ 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