Собственные переменные в полях views (перезапись, twig)

Главные вкладки

Аватар пользователя Danunafik Danunafik 3 января 2021 в 22:15

Здравствуйте. Я мало соображаю в апи друпал. По инструкции сделал модуль, который в админке показывает форму, куда можно ввести значения переменных. Потом эти значения я могу использовать к примеру в модуле tamper и т.д.. А вот как эти переменные можно использовать в полях views (там где перезаписать поле, twig) ? Хочу их для всяких настроек использовать в товаре который вьюсом показывается. Типа наценки, показа/скрытия всяких пунктов. Drupal 9.

Модуль вот так пишет переменные:

public function buildForm(array $form, FormStateInterface $form_state) {
$config = $this->config('myvariables.adminsettings');

$form['myvariables_nacenka_minporog_1'] = [
'#type' => 'number',
'#title' => $this->t('min порог 1'),
'#default_value' => $config->get('myvariables_nacenka_minporog_1'),
'#min' => '0',
'#step' => '1',
'#size' => 4,
];
.....
.....
.....
return parent::buildForm($form, $form_state);
}

public function submitForm(array &$form, FormStateInterface $form_state) {
parent::submitForm($form, $form_state);

$this->config('myvariables.adminsettings')
->set('myvariables_nacenka_minporog_1', $form_state->getValue('myvariables_nacenka_minporog_1'))
->set('myvariables_nacenka_maxporog_1', $form_state->getValue('myvariables_nacenka_maxporog_1'))
->set('myvariables_nacenka_procent_1', $form_state->getValue('myvariables_nacenka_procent_1'))
->set('myvariables_nacenka_addition_1', $form_state->getValue('myvariables_nacenka_addition_1'))
.....
.....
.....
->save();
}
}

Комментарии

Аватар пользователя voviko voviko 4 января 2021 в 10:12

Правильно будет создать для товара своё отображение, и показывать готовую сущность в views. Также используйте template_preprocess_node

Аватар пользователя Danunafik Danunafik 4 января 2021 в 19:15

Показывать готовую сущность в views ? Имеется в виду не полями, а готовый вывод того, что настроено в типе материалов ? Я не знаю как в данном случае всё настраивать. У меня во вьюс слишком много взаимосвязей. Например иконка с процентом скидки рассчитывается сама, наценка накидывается от поставщиков, от брендов. Кнопка корзины или весь товар скрывается если товара нет в продаже или в бренде указано "не отображать товары данного бренда". Если в результате наценки получилось так, что старая перечеркнутая цена ниже настоящей, то скрыть иконку акции и перечеркнутую цену, сроки доставки из поставщиков с учетом выходных и т.д..
Сейчас глобальную коррекцию цен я организовал методом создания термина, к которому привязаны все товары. В данном термине и указываются коэффициент коррекции цен, указывается текст, который при желании отобразится у всех товаров. Настраивается внешний вид блока товара, типа скрыть бренд, скрыть размеры, отображать количество для добавления в корзину.
Проблема в том, что чем больше taxonomy index, тем медленнее выводится список товаров вьюсом. Вот хочу избавиться от глобального термина и сделать через переменные, доступные менеджеру.
Нет попроще пути, чтобы те переменные из модуля как то во вьюсе читались ?

Аватар пользователя voviko voviko 4 января 2021 в 20:49

Danunafik wrote: Нет попроще пути, чтобы те переменные из модуля как то во вьюсе читались ?

Я не знаю. Со своей стороны могу сказать что перезаписывать вьюс можно только когда немного кода. И он не сложный. Вот вы понаписали столько условий, что даже в теории у меня нет решений. Слишком сложно накликать и перезаписывать. Жуть.
Намного проще в twig все вывести. Один файл, все на виду, ничего искать не надо и можно быстро вспомнить.
Но если вы решили добавить переменную в поля, то поищите "view custom field"
Этим методом вы сможете передать значение из конфига в поле views

Аватар пользователя voviko voviko 4 января 2021 в 23:49

1. получаем конфиг в препроцессосе ноды

<?php
$config 
= \Drupal::config('example.settings');
print 
$config->get('message');
print 
$config->get('langcode');
?>

2. ставим переменную, там же в template_preprocess_node
<?php $vars['admin_config'] = $config ;?>
3. тратим кучу времени чтобы узнать как называется шаблон дисплея, ищем исходники
4. пытаемся вывести переменную в шаблоне.
PS. Это не стеб... это так работает
PSS. возможно есть модуль который сможет подгрузить конфиг в views (должен быть, но это не точно)

Аватар пользователя Danunafik Danunafik 5 января 2021 в 2:40

Вот про последнее не понял. Зато вроде понял про "Намного проще в twig все вывести".
Получается я создаю файл node--tovar--full.html.twig и там вывожу поля со всеми этими условиями, взаимосвязями (как сейчас во views сделано). А во views вывожу уже готовую сущность. Да ? Это сэкономит времени много, да, потому что товар выводится не только в категориях, а еще на главной в блоке, в акциях, в поиске и т.д.. Сейчас при переделке приходится все вьюсы редактировать, а так нужно только этот node--tovar--full.html.twig редактировать будет, если я всё правильно понял.