Рейтинг:0

Есть ли способ передать значение скрытому полю в несколько блоков, напечатанных из файла шаблона?

флаг ng

Сценарий представляет собой файл шаблона (tpl), выводящий список контактных форм, где каждая из них уникальна для идентификатора термина в своем разделе на странице. Мне нужно создать список настраиваемых параметров для каждого печатного блока веб-формы, используя tid, переданный из раздела, в котором он находится в шаблоне. Пока я не вижу никакого способа сделать это.

образец.tpl.php

<?php
   $block = module_invoke('webform', 'block_view', 'my-block-3581');
   print render($block['content']);
?>

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

Рейтинг:1
флаг cn

вы всегда можете использовать drupal_get_form функция для получения формы в drupal. эта функция позволяет вам отправлять любые необходимые аргументы, например, вы можете вызвать ее так:

$form = drupal_get_form('SOME_FORM_ID', $argument1);

в таком случае $аргумент1 значение передается и может быть доступно в hook_form_SOME_FORM_ID_alter следующим образом:

if(isset($form_state['build_info']['args'][0]) {
  $form['SOME_ELEMENT']['#default_value'] = $form_state['build_info']['args'][0]; //поскольку $arguments1 передается в качестве первого параметра
}

теперь, имея это в виду, чтобы получить веб-форму, используя drupal_get_form вам нужен этот фрагмент кода (лучше использовать hook_preprocess_HOOK, чтобы добавить веб-форму в ваш массив рендеринга):

$нид = ; //ИДЕНТИФИКАТОР УЗЛА ВАШЕЙ ВЕБ-ФОРМЫ
$ узел = node_load ($ nid);
$submission = (объект) массив();
$включено = ИСТИНА;
$предварительный просмотр = ЛОЖЬ;
$webform = drupal_get_form('webform_client_form_' . $nid, $node, $submission, $enabled, $preview, $YOUR_ADDITIONAL_ARGUMENT);

а затем в файле шаблона вы можете просто распечатать свою веб-форму $:

распечатать drupal_render($webform);

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

Juraj Nemec avatar
флаг in
Я думаю, будет полезно сказать, что не стоит вызывать `drupal_get_form` в файлах шаблонов. В идеале OP нужно будет использовать одну из функций предварительной обработки в template.php или передать $webform в качестве параметра этому файлу шаблона (если функция `theme()` вызывается напрямую, например, из пользовательского модуля).
Alireza Tabatabaeian avatar
флаг cn
@JurajNemec, и я думаю, что было бы неплохо сказать, что это уже упоминалось в ответе.
quantumized avatar
флаг ng
Спасибо! Еще один вопрос.Как я могу получить доступ к аргументу в веб-форме после его отправки через drupal_get_form()? Я хотел бы заполнить скрытое поле, если это возможно.
Alireza Tabatabaeian avatar
флаг cn
Вы можете использовать hook_form_alter, а затем получить доступ к своему аргументу $form_state['build_info']['args'][4]
Juraj Nemec avatar
флаг in
@AlirezaTabatabaeian Ну, я написал свой комментарий, потому что для меня это неясно указано в вашем ответе. Вы написали это как примечание только в скобках, поэтому кажется, что это выражение имеет лишь небольшой вес. Но неважно, я просто хотел помочь ОП с лучшими практиками...

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.