На сайте через модуль WebForm в поля формы по умолчанию подставляются различные данные о пользователе, например e-mail через токен %useremail. И это работает. Работают также токены вида %get[ex], переменная из адресной строки легко подставляется.
При попытке же подставить любое поле из профиля — в форму подставляется сам токен.
В webform написано понятным по белому:
If you are using the profiles module, you can also access all profile data using the syntax %profile[form_name]. If you for example have a profile value named profile_city, add the variable %profile[profile_city].
Но все токены типа %profile[profile_surname], %profile[profile_name] и прочие выводятся в форме без подстановки значения. Просто, например, "%profile[profile_surname]".
Названия полей в профилях проверял, изменял, не помогает.
Никто не сталкивался?
Помогите, пожалуйста. Спасибо.
[решение]
Так как мне было очень нужно, на второй день нашел, как это правится ручными изменениями в модуле.
Информация [##604958]отсюда[/##]. Проблема, как выяснилось, нередкая.
Решается методом замены в файле webform.module вот этого:
if (!array_key_exists('%username', $replacements['unsafe'])) {
$replacements['unsafe']['%username'] = isset($user->name) ? $user->name : '';
$replacements['unsafe']['%useremail'] = isset($user->mail) ? $user->mail : '';
$replacements['unsafe']['%ip_address'] = ip_address();
if ($user->uid && module_exists('profile')) {
profile_load_profile($user);
}
$special_tokens['unsafe']['%profile'] = $user;
// Doesn't really belong here with user things, but works.
$special_tokens['unsafe']['%server'] = $_SERVER;
}
На вот это:
if (!array_key_exists('%username', $replacements['unsafe'])) { $replacements['unsafe']['%username'] = isset($user->name) ? $user->name : '';
$replacements['unsafe']['%useremail'] = isset($user->mail) ? $user->mail : '';
$replacements['unsafe']['%ip_address'] = isset($_SERVER['HTTP_X_FORWARDED_FOR']) ? $_SERVER['HTTP_X_FORWARDED_FOR'] : $_SERVER['REMOTE_ADDR'];
// Doesn't really belong here with user things, but works.
$special_tokens['unsafe']['%server'] = $_SERVER;
}
// if we have a user and module profile and the %profile key doesn't exist
if ( $user->uid && module_exists('profile') && !array_key_exists('%profile', $replacements['unsafe']) ) {
profile_load_profile($user);
$special_tokens['safe']['%profile'] = $user;
}
И все работает. Ждем обновлений.
Комментарии
А разве что-то поменялось?
Я вижу по существу только unsafe->safe. А это, вообще-то, для безопасности нехорошо, наверное...
ансейф - небезопасный, сейф - безопасный, ансейф поменялся на сейф. это ужасно.
Да. Что-то поменялось. Теперь все работает в глючном модуле.
Не думаю, что это влияет на безопасность.
В любом случае я нифига не шарю в создании модулей для друпал, в апи друпала и прочем. Пока что разбираюсь на уровне использования модулей. И на уровне решения проблем, которые так и прут.
Вопрос в другом. Что изменилось? Почему вдруг заработало? Ибо на Drupal.org в патче используется ключ unsafe. Если safe поменять на unsafe, то перестаёт работать?
yorm
Как раз столкнулся с такой проблемой а тут решение спасибо!
Вроде бы в последей версии баг исправлен.
Возможно. К сожалению с Content profile он все равно не работает.
Решение для 7-ки