Вы здесь

Как передать параметр полю Webform при выводе в Colorbox

0

Имеется тип материала Мероприятие и вебформа "Запись на мероприятие" (поля Имя, Email, Мероприятие-ссылка на ноду). Поле Мероприятие в виде списка. К каждому мероприятию (в ноде, блоке или странице-списке) привязана вебформа, при ее вызове пользователь не должен выбирать мероприятие, привязка должна происходить автоматически. В блоке или странице может быть несколько кнопок "Запись на мероприятие".

Форма вызывается при помощи Colorbox:

print '<a class="colorbox-inline" href="width=630&amp;height=420&amp;inline=true#webformblock">Запись на мероприятие</a>';

 print "<div style='display: none;'>";
 print "<div id='webformblock'><h1>Запись на мероприятие</h1>";
 $block = module_invoke('webform', 'block_view', 'client-block-170');
 $out = render($block['content']);
 print $out;
 print "</div>";
 print "</div>";

Вопрос: как передать id мероприятия в поле вебформы Мероприятие? Если для ноды можно привязаться к arg(1), то для блока и страницы не понимаю как. Разве что править переменную $out до вывода при помощи str_replace().
Подскажите, пожалуйста, как лучше поступить.

Версия Drupal: 
7.x
Связанные проекты: 
WebformColorbox
Вопрос задан 06.12.2015 - 23:51

Ответы

0

Я переделал функцию вывода блока:

        $webform_node = node_load(170);
         webform_node_view($webform_node, 'form');
         $content = $webform_node->content['webform'];
         $content['#form']['submitted']['event']['#value'] = $MY_ID;
         $content['#form']['submitted']['event']['#default_value'] = $MY_ID;
         $content['#form']['submitted']['event']['#webform_component']['value'] = $MY_ID;
         $out = drupal_render($content);

Спасибо за подсказки!

Ответ дан 07.12.2015 - 16:23
0

К сссылке-активатору webform подставляйте id сущности. Вот пример (мы правда через https://www.drupal.org/project/autodialog выводим, но не важно)

<a class="button order autodialog autodialog-processed" data-dialog-width="600" data-dialog-ajax="true" data-dialog-ajax-disable-redirect="true" href="/node/63/?id=73" id="autodialog-5"><span>Купить в 1 клик</span></a>

?id=73 - соотв. сюда ставьте нужное вам значение, пусть то nid или id блока или еще что.

Через токен [current-page:query:?] в webform ловите значение (или просто через $_GET['id'] или drupal_get_query_parameters()).

p.s. хотя по идее вы аналогично можете на этапе ' $block = module_invoke('webform', 'block_view', 'client-block-170');', если id нужной сущности есть, передавать значение в поле. нет под рукой сейчас примера чтобы проверить.

Ответ дан 07.12.2015 - 00:30

Я добавлял в ссылку вызова ?event=73 и в вебформе ставил токен [current-page:query:event] - не срабатывает, потому что URL не меняется, по клику на ссылку вызывается Colorbox (содержимое скрытого дива с кодом блока помещается в модальное окно). К сожалению, другие варианты вывода формы (через autodialog, modal forms и т.д.) не рассматриваются - только Colorbox.

Вы имеете в виду вызывать блок в виде $block = module_invoke('webform', 'block_view', 'client-block-170', 73); и потом ловить параметр "73" в каком-то хуке? Я смотрю функцию webform_block_view($delta) модуля webform, в нем принимается только 1 параметр, можно было бы написать 'client-block-170-73' , но обработки id не будет все равно.

Комментарий оставлен 07.12.2015 - 15:10
0

Пример...

            $linck = l($discount.$textlinck, 'report-myquest',
                array(
                    'attributes' => array(
                        'id' => 'my-id',
                        'class' => 'colorbox-load'
                    ),
                    'query' => array(
                        'width' => '500',
                        'height' => '500',
                        'iframe'=> 'true',
                        'uid'=> $user->uid,
                        'nid'=> $row['node'],
                        'start'=> $row['start'],
                        'fc_id'=> $row['fc_id'],
                        'price'=> $row['price'],
                    ),
                    'html'=>TRUE
                )
            );
Ответ дан 07.12.2015 - 03:59

Сформировать URL с параметром я умею, вручную или при помощи l(), спасибо за пример. Успешный опыт передачи параметров в поля Webform у меня есть, но не в случае Colorbox.

Комментарий оставлен 07.12.2015 - 14:49