Я використовую Webform 4. Він використовує маркери Drupal, але це не власні% жетони, як раніше у версії 3, і майже все, що я знайшов, стосувалося веб-форми 3.
Скажіть, я хочу зробити багатосторінкову форму підписки. На першій сторінці є лише поле електронної пошти. По-друге, я хочу розмітку, яка буде говорити щось на зразок:
Детальна конфігурація підписки для molot@example.com
Так само я хотів би мати можливість використовувати їх як значення за замовчуванням для майбутніх полів, як-от запит у користувача для адреси рахунків, а потім для адреси доставки.
Чи є лексеми для цього? Що я зараз зробив:
function mymodule_token_info() {
$type = array(
'name' => t('Webform submitted values'),
'description' => t('Tokens related to $_POST[\'submitted\'].'),
);
$tokens = array();
if(isset($_POST['submitted'])) {
foreach($_POST['submitted'] as $key => $val) { //discard $val now
$tokens[$key] = array(
'name' => $key,
'description' => "\$_POST['submitted']['$key']",
);
}
}
return array(
'types' => array('webform_submitted' => $type),
'tokens' => array('webform_submitted' => $tokens),
);
}
function mymodule_tokens($type, $tokens, $data, $options) {
if($type == 'webform_submitted') {
$replacements = array();
foreach ($tokens as $name => $original) {
//Hide errors below. We don't care if it really exists yet. If empty, so be it.
@$replacements[$original] = (string)$_POST['submitted'][$name];
}
return $replacements;
}
}
Це працює, але показує значення лише на крок раніше, тому потрібні деякі брудні хитрощі з прихованими полями, щоб перенести значення електронної пошти через кілька кроків. Зізнаюся - це було просто швидко і брудно. Чи є якийсь вбудований спосіб це зробити, або належним чином підтримується внесений модуль для цього? Або спосіб зробити так, щоб цей код працював незалежно від того $_POST['submitted']
, щоб він міг переносити значення через багато кроків і зробити його лексеми (з доступних елементів веб-форми) видимими в списку токенів у вікнах редагування?