Jump to content
Search In
  • More options...
Find results that contain...
Find results in...

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


suRoot
 Share

Recommended Posts

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

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

 

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

 

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

 

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

 

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

 

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

Link to comment
Share on other sites


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

Edited by suRoot
Link to comment
Share on other sites


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

 

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

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

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

Link to comment
Share on other sites


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

{% include 'file.twig' %}

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

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

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

Link to comment
Share on other sites


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

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

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

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

Link to comment
Share on other sites


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

 

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

Link to comment
Share on other sites


6 hours ago, suRoot said:

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

 

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

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

Link to comment
Share on other sites


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' %}

Link to comment
Share on other sites


  • 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 передавать не надо, в лоадере он уже есть

 

Link to comment
Share on other sites


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

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

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

Link to comment
Share on other sites


не знаю как работать с событиями в 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" %}

Link to comment
Share on other sites


  • 3 months later...

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

On our site, cookies are used and personal data is processed to improve the user interface. To find out what and what personal data we are processing, please go to the link. If you click "I agree," it means that you understand and accept all the conditions specified in this Privacy Notice.