Как я могу передать параметры в блок?

8

Можно ли программно передавать параметры в блок?

underq
источник

Ответы:

7

Согласно другому ответу , блоки «тупые» и не имеют возможности «передавать аргументы». Однако они могут получать аргументы из контекста страницы, такие как идентификаторы узлов, текущий пользователь и т. Д.

У вас есть два «простых» выбора:

  • Напишите свой собственный блок: это довольно легко, если вы можете сделать немного PHP. Создайте модуль и реализуйте hook_block () . На Drupal.org есть много примеров .
  • Используйте модуль «Панели» и / или «Представления»: « Панели» позволяют создавать панели, в которые можно передавать всевозможные переменные и контексты, НО без специальной темы блок должен будет находиться в области содержимого, а не в области Drupal; так что это зависит от вашего сайта, и где вы хотите заблокировать. Представления также могут создавать блоки и получать аргументы от URL-адреса страницы, текущего пользователя, а также пользовательского кода через PHP-модуль Views . Представления и панели работают вместе очень хорошо.
Джим Киркпатрик
источник
1
Как правило, с панелями, если ваша тема поддерживает это, вы можете отключить все другие блоки и отобразить другой контент, который будет учитывать контекст, как «псевдо» блоки.
Малкс
2

Вы не можете передать что-либо программно в блок AFAIK. Вы можете разрешить настройку блока (используя hook_block_configure в D7). В качестве альтернативы вы можете создать свою собственную функцию темы и передать ей аргументы. Что ты пытаешься сделать?

Энди
источник
2

Настройте контекстный фильтр, выберите «Указать значение по умолчанию» type => «php code» и используйте нужный аргумент. напр .: возврат arg (1);

Hasan
источник
2

В специализированном (но широко распространенном) случае, когда ваш блок является отображением представления, вы можете использовать его views_embed_viewдля визуализации блока с параметрами, которые он получает через контекстные фильтры представления (то есть обычно из URL).

Например:

print views_embed_view('news', 'panel_pane_1', 'world');

Любые параметры после второго будут переданы в качестве значений контекстного фильтра в блок.

Источник: переписанный от этого ответа от Дэвида Томаса , лицензирована CC-BY-SA 3.0

tanius
источник