Как добавить шаблонизатор Smarty в каркас CodeIgniters 3? - PullRequest
0 голосов
/ 03 ноября 2018

Как добавить и использовать шаблонизатор Smarty в CodeIgniters 3?

Обратите внимание, что CodeIgniters 3 не имеет шаблонизатора, и вы должны смешивать HTML-код с PHP-кодом и тегами. Не говоря уже о том, что вы не можете расширять другие представления (как в Laravel или Smarty).

В конце концов, это основа, а не дополнительные хлопоты.

1 Ответ

0 голосов
/ 03 ноября 2018

Установка и настройка

  1. Запустите и запустите вашу папку CodeIgniter, чтобы ваша страница приветствия работала.

  2. Перейдите на страницу загрузки Smarty и загрузите последнюю версию * Исходный код (Почтовый) ».

  3. Извлеките эту Smarty ZIP-папку и переименуйте ее в smarty .

  4. Переместите папку smarty из шага # 3 в папку CodeIgniters application / third_party . Вот так - your_project/application/third_party/smarty.

  5. Создайте новый файл PHP SmartyLibrary.php в папке вашего проекта application / library / . Вот так - your_project/application/libraries/SmartyLibrary.php.

  6. В созданный вами файл SmartyLibrary.php поместите следующее содержимое и перейдите прямо к шагу # 7 .

    <?php defined('BASEPATH') OR exit('No direct script access allowed');
    
    require_once(APPPATH . 'third_party/smarty/libs/Smarty.class.php');
    
    class SmartyLibrary extends Smarty {
    
    <pre><code>function __construct() {
        parent::__construct();
    
        // Define directories, used by Smarty:
        $this->setTemplateDir(APPPATH . 'views');
        $this->setCompileDir(APPPATH . 'cache/smarty_templates_cache');
        $this->setCacheDir(APPPATH . 'cache/smarty_cache');
    }
    </code>
    }
  7. Анализ __construct() функции, особенно эта часть:

    // Define directories, used by Smarty:
    $this->setTemplateDir(APPPATH . 'views');
    $this->setCompileDir(APPPATH . 'cache/smarty_templates_cache');
    $this->setCacheDir(APPPATH . 'cache/smarty_cache');</p></li>
    </ol>
    
    <p>These 3 lines are required for Smarty itself (it's part of <a href="https://www.smarty.net/docs/en/installing.smarty.basic.tpl" rel="nofollow noreferrer">Smarty basic installation</a>). Ensure that these defined directories exist in your project (create them) and ensure they have correct permissions (smarty needs to create cache files).</p>
    
    <ol start="8">
    <li><p>Go to your project's <code>application/config/autoload.php</code> and edit like this:</p>
    
    <pre>$autoload['libraries'] = array('SmartyLibrary' => 'smarty');

    Или, если вы не хотите загружать Smarty автоматически - используйте это в своих контроллерах:

    $this->load->library('SmartyLibrary', 'smarty');
  8. Вот и все! Используйте объект smarty как любую другую библиотеку CodeIgniter. Как это:

    $this->smarty->xxxxxxxxx('xxxxxxxxx', xxxxxxxx);

Тестирование

  1. Предположим, что вы используете те же каталоги Smarty, как указано выше (файл SmartyLibrary.php ) - создайте новый файл welcome.tpl в application/views/ вашего проекта (например, application/views/welcome.tpl) с следующее содержание:

    <html>
    <header><title>This is title</title></header>
    <body>
    {$message}
    </body>
    </html>
  2. Отредактируйте ваш Welcome.php контроллер по умолчанию следующим образом (при условии, что вы автоматически загружаете библиотеку smarty):

    <?php
    defined('BASEPATH') OR exit('No direct script access allowed');
    
    class Welcome extends CI_Controller {
    
    <code>    public function index(){
            // Assign session data to Smarty:
            $this->smarty->assign('message', "This is Smarty test!");
    
            // Compile smarty template and load it to user:
            $this->smarty->display('welcome.tpl');
        }
    </code>
    }
  3. Попробуйте загрузить базовый URL вашего проекта. Вы должны увидеть «Это тест Smarty!» сообщение на экране!.

Заключительные мысли

  • При определении местоположения файлов CSS или JS в представлениях Smarty - используйте что-то вроде этого - {base_url()}css/bootstrap.min.css.
  • Подобные вещи в представлениях CodeIgniter <?php echo form_open('books/input'); ?> теперь можно заменить в шаблонах Smarty как {form_open('books/input')}.
...