Как передать данные из одной ноды в другую?

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

Аватар пользователя nick80 nick80 4 мая 2020 в 19:32

Добрый день.
Изучаю темизацию Drupal 8. Не получается выполнить 2-е задачи:
1. Передать значение переменных из одного блока в другой.
Создал файл myname.theme

<?php
function remont_theme(&$vars){

    return [
        

'page_title' => [
            
'variables'    => [
                
'new_title' => null
            
]
        ],
        
'node__services' => [
            
'variables'    => []
        ]
    ];
}

function 

remont_preprocess_page_title(&$vars){

$vars['new_title'] = $vars['title'];
kint($vars);

}    

function 

remont_preprocess_node__services(&$vars){
//kint($vars);
    
$myname    $vars['new_title'];
}
?>

Вопрос почему если массив, как я понял, глобальный $variables. В приведенном коде выше переменная "new_title" виден в preprocess_page_title и не виден в preprocess_node__services?
Примечание: не пишите, что в node.html.twig есть переменная {{ node.label }}, я это знаю мне надо понять сам принцип, как передать значения из одной ноды в другую?
В приведенном выше коде, мне Drupal выводит Notice: Undefined index: new_title in remont_preprocess_node__services()

2. Задача похожа на предыдущую.
Как вставить пользовательский блок или блок-view вставить в любое места шаблона с помощью созданной переменной? Ниже приведен стандартный код node.html.twig, я хочу в него вставить свой блок. Вопрос не как вставить данные в шаблон node.html.twig, а как с помощью собственной переменной {{ this_is_my_block }} вставить любой блок в любой другой шаблон? Мне надо найти сам принцип встраивания своих блоков или блоков-view в шаблоны twig.

<article{{ attributes }}>

  {{ title_prefix }}
  {% if not page %}
    <h2{{ title_attributes }}>
      <a href="{{ url }}" rel="bookmark">{{ label }}</a>
    </h2>
  {% endif %}
  {{ title_suffix }}

  {% if display_submitted %}
    <footer>
      {{ author_picture }}
      <div{{ author_attributes }}>
        {% trans %}Submitted by {{ author_name }} on {{ date }}{% endtrans %}
        {{ metadata }}
      </div>
    </footer>
  {% endif %}

  <div{{ content_attributes }}>
    {{ content }}
  </div>

{# сюда я хочу вставить созданный блок, с его шаблоном, создав переменную #}
{{ this_is_my_block  }}

</article>

Комментарии

Аватар пользователя ivnish ivnish 4 мая 2020 в 20:10

1. Зачем? Какая изначальная задача?
2. Почему бы не использовать возможности регионов и вставки в них блоков через админку?

Аватар пользователя nick80 nick80 4 мая 2020 в 20:25

Вот конкретная задача, которую я решал через одно место https://monosnap.com/file/z5udpZUwA0KjZPeKom0iyzovCFgKbE
Я вставлял кастомный блок, созданный в админке, внутрь шаблона вывода views.
Вот сайт http://amiz.v-stavropole.ru/our_car

Аватар пользователя nick80 nick80 4 мая 2020 в 21:45

ivnish wrote: Добавьте в шаблон представления в нужное место регион и выводите туда блок через админку.

Хорошо, я понял. Спасибо за ответ. Я думал, что регионы можно вставлять только на уровне шаблона page.html.twig

А кто-то может дать ответ на первый вопрос. Как из одного препрепроцесс передать переменную в другой? в hook_theme?

Аватар пользователя ivnish ivnish 5 мая 2020 в 7:41

nick80 wrote: А кто-то может дать ответ на первый вопрос. Как из одного препрепроцесс передать переменную в другой? в hook_theme?

Для чего?

Аватар пользователя nick80 nick80 5 мая 2020 в 11:41

ivnish wrote: Для чего?

Хочу понять сам принцип.
Почему в видео https://www.youtube.com/watch?v=FuGwWjNtW2Y&t=231s
Смотреть только: 1:50:35 по 1:51:22 (меньше минуты)
В этом видео подстановка $variables из другого preprocess проходит без ошибки, а в моем случае пишет Notice: Undefined index: new_title in remont_preprocess_node__services()

Я понимаю, что чтобы разобраться надо смотреть больше видео, ни кто это делать не будет, но на видео видно, что это возможно.