Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

Opencart 2.3.0.2. Как подключить Twig?


Recommended Posts

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

 

Подскажите, кто знает как подключить 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

Надіслати
Поділитися на інших сайтах

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

 

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

 

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

 

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 2
Надіслати
Поділитися на інших сайтах

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

Надіслати
Поділитися на інших сайтах


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

Надіслати
Поділитися на інших сайтах


  • 9 months later...
  • 3 years later...
В 07.10.2016 в 15:26, pantagruel964 сказал:

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

 

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

 

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

 

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';

Подскажите как в админке завести twig, opencart из админке формат twig пытается как tpl загрузить 

Надіслати
Поділитися на інших сайтах


Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз
  • Зараз на сторінці   0 користувачів

    • Ні користувачів, які переглядиють цю сторінку
×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.