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

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

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

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

Не моя тема и давненько не занимался разработкой вообще. Появилась возможность познакомится с 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 так не работает.

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

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


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

отлично твиг работает

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

для dump() расширение надо подключать

Изменено пользователем lexxkrt

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


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

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

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

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


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

Как в twig сделать <?php foreach($array as $key=>$value) { ?>

Знаю про {% for value in array %}

А где искать key?

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


Ссылка на сообщение
Поделиться на другие сайты
{% for key,value in array %}
    Key : {{ key }}
    Value : {{ value }}
{% endfor %}

 

  • +1 1

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


Ссылка на сообщение
Поделиться на другие сайты
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" %}

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


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

А подскажите и мне пожалуйста, как это 

<?php echo ('1' == $product_option_value['is_default'] ? 'checked="checked' : ''); ?>

Сделать в twig ?

Спасибо :)

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


Ссылка на сообщение
Поделиться на другие сайты
2 часа назад, staniki сказал:

А подскажите и мне пожалуйста, как это 

<?php echo ('1' == $product_option_value['is_default'] ? 'checked="checked"' : ''); ?>

Сделать в twig ?

Спасибо :)

{{product_option_value['is_default'] == 1 ? 'checked="checked"'}}

 

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


Ссылка на сообщение
Поделиться на другие сайты
16 минут назад, spectrum сказал:

{{product_option_value['is_default'] == 1 ? 'checked="checked"'}}

 

Спасибо большое :) Не понимаю как + в карму занести :)))

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


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

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

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

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

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

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

Войти

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

Войти

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

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

×

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

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