Перейти к содержанию

Рекомендуемые сообщения

Здравствуйте!

 

Подскажите, кто знает как подключить twig в 2.3.0.2 ?

 

Пробовал перенести решение из ветки master-pre-rollback, но явно где-то не дожимаю, уже 2-й день не могу разобраться, совсем запутался.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

если у файлов шаблонов расширение .tpl - используется PHP для рендеринга, если .twig - то шаблонный движок Twig.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

смотрю в свою сборку

 

// Template
$_['template_type']        = 'php';

 

Но!!!

if (!$output) {
            $template = new Template($this->registry->get('config')->get('template_type'));
            
            foreach ($data as $key => $value) {
                $template->set($key, $value);
            }
        
            $output = $template->render($route . '.tpl');
        }

но сборка у меня не обновлена

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

если у файлов шаблонов расширение .tpl - используется PHP для рендеринга, если .twig - то шаблонный движок Twig.

Эти энциклопедические знания никак к вопросу не относятся

 

смотрю в свою сборку

 

// Template

$_['template_type']        = 'php';

 

Но!!!

if (!$output) {
            $template = new Template($this->registry->get('config')->get('template_type'));
            
            foreach ($data as $key => $value) {
                $template->set($key, $value);
            }
        
            $output = $template->render($route . '.tpl');
        }

но сборка у меня не обновлена

Установил $_['template_type'] = 'twig' и $output = $template->render($route . '.twig');

 

Куда еще нужно смотреть?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Эти энциклопедические знания никак к вопросу не относятся

 

Тогда специально для Вас https://github.com/opencart/opencart/tree/dev/upload/admin/view/template/catalog

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А никуда, в сборке нет twig

 

Специально

 

https://github.com/opencart/opencart/tree/dev/upload/system/library/template

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если вы не смогли подключить твиг, вы его и настроить не сможете, а в сыром виде он не так вкусен.

 

Но раз так хочется..

 

----------------------

 

1. Скачайте последнюю версию твига с сайта, не берите старье из репы опенкарта.

По хорошему, устанавливать надо через composer require, но опенкарт не сможет его корректно подгрузить. Папку Twig копируете в 'upload/system/library/template/'

 

2. Содержимое файла upload/system/library/template/php.php меняете на

<?php
namespace Template;

final class PHP
{
    private $data = array();

    public function set($key, $value)
    {
        $this->data[$key] = $value;
    }

    public function render($template)
    {
        $file = DIR_TEMPLATE . $template . '.tpl';
        if (is_file($file)) {
            extract($this->data);
            ob_start();
            require($file);

            return ob_get_clean();
        }
        trigger_error('Error: Could not load template ' . $file . '!');
        exit();
    }
} 

 

3. Файл upload/system/library/template/tiwg.php переименовываете в twig.php, содержимое меняете на

<?php
namespace Template;

final class Twig
{
    private $twig;
    private $data = [];

    public function __construct()
    {
        include_once DIR_SYSTEM . 'library/template/Twig/Autoloader.php';

        \Twig_Autoloader::register();

        $loader = new \Twig_Loader_Filesystem(DIR_TEMPLATE);

        $this->twig = new \Twig_Environment($loader, [
                'autoescape'  => false,
                'cache'       => DIR_SYSTEM . 'storage/cache/twig',
                'auto_reload' => true,
                'debug'       => true
            ]
        );

        $this->twig->addExtension(new \Twig_Extension_Debug());
    }

    public function set($key, $value)
    {
        $this->data[$key] = $value;
    }

    public function render($template)
    {
        try {
            // load template
            $template = $this->twig->loadTemplate($template);

            return $template->render($this->data);
        } catch (Exception $e) {
            trigger_error('Error: Could not load template ' . $template . '!');
            exit();
        }
    }
}
 

 

4. Файл upload/catalog/controller/event/theme.php приводите к такому виду

<?php

class ControllerEventTheme extends Controller
{
    public function index(&$view, &$data, &$output)
    {
        if ( ! $this->config->get($this->config->get('config_theme') . '_status')) {
            exit('Error: A theme has not been assigned to this store!');
        }

        // This is only here for compatibility with older extensions
        if (substr($view, -3) == 'tpl') {
            $view = substr($view, 0, -3);
        }

        // If the default theme is selected we need to know which directory its pointing to
        if ($this->config->get('config_theme') == 'theme_default') {
            $theme = $this->config->get('theme_default_directory');
        } else {
            $theme = $this->config->get('config_theme');
        }

        if (is_file(DIR_TEMPLATE . $theme . '/template/' . $view . '.twig')) {
            $this->config->set('template_type', 'twig');

            $view = $theme . '/template/' . $view . '.twig';
        } elseif (is_file(DIR_TEMPLATE . 'default/template/' . $view . '.twig')) {
            $this->config->set('template_type', 'twig');

            $view = 'default/template/' . $view . '.twig';
        } elseif (is_file(DIR_TEMPLATE . $theme . '/template/' . $view . '.tpl')) {
            $this->config->set('template_type', 'php');

            $view = $theme . '/template/' . $view;
        } elseif (is_file(DIR_TEMPLATE . 'default/template/' . $view . '.tpl')) {
            $this->config->set('template_type', 'php');

            $view = 'default/template/' . $view;
        }
    }
}
 

 

5. upload/admin/controller/event/theme.php к такому

<?php

class ControllerEventTheme extends Controller
{
    public function index(&$view, &$data)
    {
        // This is only here for compatibility with old templates
        if (substr($view, -3) == 'tpl') {
            $view = substr($view, 0, -3);
        }

        if (is_file(DIR_TEMPLATE . $view . '.twig')) {
            $this->config->set('template_engine', 'twig');
        } elseif (is_file(DIR_TEMPLATE . $view . '.tpl')) {
            $this->config->set('template_engine', 'php');
        }
    }
}
 

 

6. В файле upload/system/engine/loader.php

строку 

$output = $template->render($route . '.tpl');

меняете на

$output = $template->render($route);

7. В файле upload/system/config/catalog.php

добавляете строку

$_['template_type'] = 'twig';
  • +1 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ну и к чему это? Это я и без вас видел. Если я создам файл twig, opencart его не скомпилирует. Именно в этом был вопрос

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

@pantagruel964, Спасибо, добрый человек! Это то что и было нужно. У нас магазин на 1.5.4.1 и все шаблоны в twig-формате, что и было единственным препятствием для перехода на новый движок. Еще раз огромное спасибо Вам, к сожалению, не могу даже плюсануть сообщение((

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Подскажите пожалуйста возможен ли вариант использования и twig и tpl шаблоны, например если есть .tpl, то использовать его, если нет то твиг?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

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

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×

Важная информация

На нашем сайте используются файлы cookie и происходит обработка некоторых персональных данных пользователей, чтобы улучшить пользовательский интерфейс. Чтобы узнать для чего и какие персональные данные мы обрабатываем перейдите по ссылке. Если Вы нажмете «Я даю согласие», это означает, что Вы понимаете и принимаете все условия, указанные в этом Уведомлении о Конфиденциальности.