Есть Нода. Есть свой модуль.
Хочу чтоб в зависимости от Гет-запроса выдавалась различная запись внутри вывода Ноды.
Вопрос:
Как добавлять при выводе в Ноду различный контент. Именно просто добавлять. Записывать в БД ничего не нужно.
Хук какой или ещё как?
Спасибо.
Комментарии
Например: ?nik=1
Выдаст: Привет чувак!
А ?nik=2
Выдаст: Ти кто такой? Мимо ходи.
hook_entity_view
Добавить программное (виртульное) поле, а-ля:
<?php
...
function my_module_node_view(array &$build, \Drupal\Core\Entity\EntityInterface $node, \Drupal\Core\Entity\Display\EntityViewDisplayInterface $display, $view_mode) {
// Например, если тип ноды = MY_NODE_TYPE (если нужно).
if ($node->bundle() == 'MY_NODE_TYPE') {
// Например, только при режиме дисплея 'full' (если нужно).
if ($view_mode == 'full') {
$request = \Drupal::request();
if ($request->query->has('nik')) {
$nik = $request->query->get('nik');
$build['my_data'] = [
'#type' => 'markup',
'#markup' => $nik == 1 ? 'Привет чувак!' : 'Ти кто такой? Мимо ходи.'
];
}
}
// Можно ещё при необходимости поэкспериментировать с кешем.
$build['#cache'] = ['max-age'=> 0];
}
}
...
?>
Далее это виртуальное поле 'my_data' можно ещё темизировать в twig'е (если нужно).
Спасибо. Но это слишком...
Блин. - В 7-ке - 2 строки.
В семерке это делается абсолютно также как описано выше
А также в семёрке нет быстрых/удобных методов обращения к параметрам GET-запроса, а также удобного контроля за кешем build-массива и ещё 100500 вещей, которые облегчают жизнь. Если же из этого кода убрать комментарии и ненужные проверки (которые здесь приведены как опциональные конструкции), то получите ну может чуть более, чем заветные 2 строчки. Да и в кол-ве ли строчек суть? Или же боитесь переработать?
И вообще: может, хватит уже тосковать и ныть о "простоте" D7?
Это не слишком. Это правильно.
Я вот не поленился, и кино для вас заснял,хотя я тот еще стример и с первого раза не получилось..
И на самом деле надо изучать и развиваться.
Ничего сложного в этом нет. Если вы назвали себя разработчикам, то и делайте всё как разработчик.
ЗЫ. С вас 1 euro если воспользуетесь модулем. На развитие drupal!
">https://www.youtube.com/watch?v=4YFGfFZNTyw[/youtube]
extra_field_oneeuro
Работает это. Спасибо.
http://russkiyslovar.ru/new/krossvord3x3?nik=2
всё круто, кроме кэша.
Вместо max-age лучше добавить:
<?php $build['#cache']['contexts'][] = 'url.query_args';?>
Там специально поставил комментарий, что с кешем можно поэкспериментировать при необходимости. Кеширование по времени со значением 0 (т.е. кеш отключен) взято за дефолтную опцию. А так - да, можно кешировать хоть по контексту URL, хоть по тегам, хоть по сессии или ещё как угодно. Тут уже на усмотрение ТС, хотя он, как мне кажется, даже не будет заморачиваться с такими "несущественными" моментами. )
Прям в Боди Ноды:
<?php
if($_GET['nik']==1) print 'привет чувак';
else print 'Ти кто такой? Ходи отсюда';
?>
"...Годы страданий начались с тех пор, когда в город приехал новый художник Феофан Копытто.
Первая его работа вызвала в городе большой шум. Это был портрет заведующего гостиничным трестом. Феофан Копытто оставил станковистов далеко позади. Заведующий гостиничным трестом был изображен не масляными красками, не акварелью, не углем, не темперой, не пастелью, не гуашью и не свинцовым карандашом. Он был сработан из овса. И когда художник Копытто перевозил на извозчике картину в музей, лошадь беспокойно оглядывалась и ржала.
С течением времени Копытто стал употреблять также и другие злаки. Имели громкий успех портреты из проса, пшеницы и мака, смелые наброски кукурузой и ядрицей, пейзажи из риса и натюрморты из пшена.
Сейчас он работал над групповым портретом. Большое полотно изображало заседание окрплана. Эту картину Феофан готовил из фасоли и гороха. Но в глубине души он остался верен овсу, который сделал ему карьеру и сбил с позиций диалектических станковистов.
– Овсом оно, конечно, способнее! – воскликнул Остап. – А Рубенс-то с Рафаэлем дураки – маслом старались! Мы тоже дураки, вроде Леонардо да Винчи..."
Это называется говнокод
Смешно. $_GET['nik'] - может быть что-то проще?
Гениально, маэстро.
'#type' => 'markup', - это не поле.
'markup'
здесь - это просто частный пример. Это такой же элемент, как и другие элементы рендер-массивов или FAPI. Можете вместо него вывести'table'
или'link'
или'textfield'
. Да, это не поле в общем смысле, но и в build-массиве и, соответственно, в Twig'е оно доступно так же, как и типичные поля Друпала. Потому и написано "виртуальное".