Благодарим Вас за регистрацию на сайте !site. Вы можете сейчас войти на !login_uri используя следующие учетные данные:
Ваш E-mail: !mail
Ваш пароль: !password
Вы так же можете войти, нажав на следующую ссылку или скопировав её в адресную строку браузера:
!login_url
Это одноразовый вход и воспользоваться им можно лишь однажды. После входа на сайт вы будете перенаправлены на страницу !edit_uri, где можете сменить свой пароль.
Не где, а откуда. В модуле ядра modules/user/user.module. Изменять не рекомендуется, но при необходимости иногда приходится. Естественно, при следующих апдейтах это место помечается, и обновление данного файла делается вручную.
Fieldset - элемент формы, а не форма, и он не может быть отправлен. Кнопки самбита для каждого fieldset-а не имеют никакого смысла, поскольку форма отправляется целиком. Т.е. вы не можете засабмитить изменения только данного филдсета, игнорируя измененные поля других филдсетов, поскольку ПОСТ-ом на сервер отправляется каждый раз содержимое всей формы.
Чтобы реализовать вашу логику (отправка/сохранение данных только данного филдсета), в вашем случае надо отправлять данные из каждого филдсета Ajax-ом и писать серверный обработчик для каждого запроса. Это решаемо, но не быстро.
Ну если я могу добавить ['#button'], и со по идеи он не отправляет форму.
Я просто делаю по ее событию валидность, обновляю строки в базе и вывожу сообщение.
НО! ['#button'] все ровно отправляет форму!
Комментарии
в /admin/user/settings должны быть соответствующие секции
Это понятно. Откуда там они берутся !username? Я хочу свое значение. например отправитель не e-mail а название сайта.
В настройках вписаны шаблоны писем. Вам уже дали ссылку, вы заглядывали?
Да я про это знаю.
!username <- ТУТ Я ХОЧУ СВОИ ПЕРЕМЕННЫЕ ИЗ БАЗЫ
Благодарим Вас за регистрацию на сайте !site. Вы можете сейчас войти на !login_uri используя следующие учетные данные:
Ваш E-mail: !mail
Ваш пароль: !password
Вы так же можете войти, нажав на следующую ссылку или скопировав её в адресную строку браузера:
!login_url
Это одноразовый вход и воспользоваться им можно лишь однажды. После входа на сайт вы будете перенаправлены на страницу !edit_uri, где можете сменить свой пароль.
Берутся они из реализации hook_mail в модуле user
<?php
function user_mail_tokens($account, $language) {
global $base_url;
$tokens = array(
'!username' => $account->name,
'!site' => variable_get('site_name', 'Drupal'),
'!login_url' => user_pass_reset_url($account),
'!uri' => $base_url,
'!uri_brief' => preg_replace('!^https?://!', '', $base_url),
'!mailto' => $account->mail,
'!date' => format_date(time(), 'medium', '', NULL, $language->language),
'!login_uri' => url('user', array('absolute' => TRUE, 'language' => $language)),
'!edit_uri' => url('user/'. $account->uid .'/edit', array('absolute' => TRUE, 'language' => $language)),
);
if (!empty($account->password)) {
$tokens['!password'] = $account->password;
}
return $tokens;
}
?>
А кстати, там же еще и при помощи Tokens можно расширять набор, не?
Неа
А вот это вот куда?
<?php
function user_mail_tokens($account, $language) {
global $base_url;
$tokens = array(
'!username' => $account->name,
'!site' => variable_get('site_name', 'Drupal'),
'!login_url' => user_pass_reset_url($account),
'!uri' => $base_url,
'!uri_brief' => preg_replace('!^https?://!', '', $base_url),
'!mailto' => $account->mail,
'!date' => format_date(time(), 'medium', '', NULL, $language->language),
'!login_uri' => url('user', array('absolute' => TRUE, 'language' => $language)),
'!edit_uri' => url('user/'. $account->uid .'/edit', array('absolute' => TRUE, 'language' => $language)),
);
if (!empty($account->password)) {
$tokens['!password'] = $account->password;
}
return $tokens;
}
?>
Не где, а откуда. В модуле ядра modules/user/user.module. Изменять не рекомендуется, но при необходимости иногда приходится. Естественно, при следующих апдейтах это место помечается, и обновление данного файла делается вручную.
Спасибо!
А вот еще вопрос.
В форму профиля добавил submit для каждого fieldset, аккаунт, Язык, и т.д.
$form['account']['submit'] = array(
'#type' => 'submit',
'#value' => t('S'),
'#executes_submit_callback' => FALSE,
'#validate' => array('profile_form_valid_send'),
'#weight' => 4,
);
function profile_form_valid_send($form, &$form_state) {
...
}
При нажатии меняются изменения во всех полях, а надо что бы только в account.
Что посоветуете?
Fieldset - элемент формы, а не форма, и он не может быть отправлен. Кнопки самбита для каждого fieldset-а не имеют никакого смысла, поскольку форма отправляется целиком. Т.е. вы не можете засабмитить изменения только данного филдсета, игнорируя измененные поля других филдсетов, поскольку ПОСТ-ом на сервер отправляется каждый раз содержимое всей формы.
Чтобы реализовать вашу логику (отправка/сохранение данных только данного филдсета), в вашем случае надо отправлять данные из каждого филдсета Ajax-ом и писать серверный обработчик для каждого запроса. Это решаемо, но не быстро.
Ну если я могу добавить ['#button'], и со по идеи он не отправляет форму.
Я просто делаю по ее событию валидность, обновляю строки в базе и вывожу сообщение.
НО! ['#button'] все ровно отправляет форму!
Клик по любому input type="submit" и button, помещенному внутри любой формы (не обязательно Drupal) отправит содержимое данной формы на сервер
Для запрета отправки пишем в теге onClick="return false;" или JQuery вариант
$("#button").click(function(){
return false;
})