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

Несколько вопросов по Twig


suRoot

Recommended Posts

Доброго времени суток. 

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

 

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

 

Способ первый: вставляю код в файлы представления (home.twig, information.twig и т.д.) Но данный способ меня не устраивает тем, что там есть вещи, которые, возможно необходимо будет менять и лазить по всем файлам чтобы изменить ссылку на страницу, либо добавить пункт меню, что избыточно для любого нормально разработчика. Лучше чтоб это было одно место, либо два, потому как представления будет два. 

 

Способ второй: вытекает из первого, создать модуль или два, которые потом выбрать вместо {{ content_top }} или другого. Конечно это неплохо, но что-то я не очень понимаю как разработать такие модули для версии 3. Способ годный, но все равно есть нюансы. 

 

Способ третий: поскольку шаблонизатор twig это не совсем шаблонизатор, но и немного язык, то я бы создал условие. я бы его просто на php написал, но вот php в этом twig не пашет или я не понял как. Но наверняка можно написать условие на его шаблонизаторском языке. Но вопрос, смогу ли я получить глобальную переменную и в зависимости от ее наличия или отсутсвия выводить разный код представления? Если да, то подскажите как этот код должен выглядеть?

 

З.Ы. Приветсnвую ссылки на годную документацию по шаблонизатору Twig и OpenCart 3 на русском. И годные ссылки, если они не запрещены правилами форума, на жоступно написанную документацию. 

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


materialcart, я нашел эту документацию. Она неплохая.Но есть но... какие теги можно использовать именно в OpenCart и в каких шаблонах. Ссылки на операторы - 404. Очень годная документация, которую я бы привел в пример, у DLE (https://dle-news.ru/extras/online/). Просто шикарная. Можно ли найти что-то подобное для OpenCart с описанием всех тегов, которые дизайнер/верстальщик может использовать?

Змінено користувачем suRoot
Надіслати
Поділитися на інших сайтах


Такой документации не существует.

 

2 часа назад, suRoot сказал:

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

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

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


Еще один вопрос. Решил решить вопрос просто, подчерпнув идею из документации twig. Способ очень простой, но почему-то не срабатывает в opencart. я создал файл file.twig в паке шаблона /common и вставил такой код в header.twig  

{% include 'file.twig' %}

 но это не работает, в ответ страница не доступна :(

Пробовал менять пути, но видимо или что-то не так делаю, либо в OpenCart Twig так не работает.

Подскажите, если знаете, как правильно это делать?

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


Насколько глубже? От корня сервера, юзера, хоста?

/home/user//web/site.ru/public_html/catalog/view/theme/mytheme/template/common/file.twig

2 часа назад, lexxkrt сказал:

путь include надо глубже указывать

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


Я в принципе нашел решение, но как работает функция include очень даже интересно. Просто расширит возможности.

 

З.Ы. Кстати, написание модулей изменилось в версии 3, или мануал от версии 2 годный, с учетом twig?

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


6 hours ago, suRoot said:

Я в принципе нашел решение, но как работает функция include очень даже интересно. Просто расширит возможности.

 

З.Ы. Кстати, написание модулей изменилось в версии 3, или мануал от версии 2 годный, с учетом twig?

 я не помню насколько глубже, посмотри в ошибке отсутствия файла, там в принципе понятно. include нужен чтобы не переписывать один и тот же код 2 раза. например инклудом можно вывод товаров подключить, который одинаков в контроллерах category,special,search и т.д. что я и буду в первую очередь менять в своем шаблоне.

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


11 hours ago, suRoot said:

Насколько глубже? От корня сервера, юзера, хоста?

/home/user//web/site.ru/public_html/catalog/view/theme/mytheme/template/common/file.twig

посмотрел пути в коде на работе, от названия темы

{% include 'theme_name/template/common/warning.twig' %}

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


  • 2 weeks later...
On 04.12.2017 at 1:43 AM, suRoot said:

Насколько глубже? От корня сервера, юзера, хоста?

/home/user//web/site.ru/public_html/catalog/view/theme/mytheme/template/common/file.twig

нашел способ использовать вот так 

 

{% extends "@theme/template.twig" %}

{% include "@theme/common/file.twig" %}

 

для этого надо добавить пути в загрузчик твига

в файл library/template/twig.php в функцию render

 

$loader = new \Twig_Loader_Filesystem(DIR_TEMPLATE);
$loader->addPath(DIR_TEMPLATE.'mytheme/template','theme');

 

Вся загвоздка остается в передаче имени каталога темы (mytheme), я достаю через конфиг, но для этого надо передать registry в конструкторе, с соответствующими переделками везде где надо, 

$loader->addPath(DIR_TEMPLATE.$this->registry->get('config')->get('theme_default_directory').'/template','theme');

 

еще вариант, попробовал прямо на ходу

$loader = new \Twig_Loader_Filesystem(DIR_TEMPLATE);

if(isset($this->data['theme_default_directory'])){
    $loader->addPath(DIR_TEMPLATE.$this->data['theme_default_directory'].'/template','theme');
}

но в файл system/engine/loader.php функция view в самом начале добавил

$data['theme_default_directory'] = $this->registry->get('config')->get('theme_default_directory');

в данном случае registry передавать не надо, в лоадере он уже есть

 

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


с вышеприведенным кодом не работает админка, в лоадере поправил код, так заработало

        if(file_exists(DIR_TEMPLATE.$this->registry->get('config')->get('theme_default_directory').'/template')){
            $data['theme_default_directory'] = $this->registry->get('config')->get('theme_default_directory');
        }

но как то данный вариант не очень нравится
 

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


не знаю как работать с событиями в view

 

не трогая loader.php сделал изменения в файле catalog/controller/event/theme.php

в самый конец функции override дописал

$args['theme_default_directory'] = $this->config->get('template_directory');

и в template/twig.php добавил

$loader = new \Twig_Loader_Filesystem(DIR_TEMPLATE);

if(isset($this->data['theme_default_directory'])){
    $loader->addPath(DIR_TEMPLATE.$this->data['theme_default_directory'].'/template','theme');
}

при этом и фронтэнд и админка работают и в шаблонах фронэнда можно использовать {% include "@theme/common/file.twig" %}

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


  • 3 months later...

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

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

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

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

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

Вхід

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

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

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

Important Information

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