Привет всем! Дошел до hook_user, вроде бы понятно в тоже время ничего непонятно
Есть $op реагирующий на какие то действия с юзером. Это понятно.
Вот кусочек из модуля user
<?php
if ($type == 'form' && $category == 'account') {
$form_state = array();
return user_edit_form($form_state, (isset($account->uid) ? $account->uid : FALSE), $edit);
}
?>
Это hook_user
Я так понимаю тут идет вызов формы user_edit_form и в нее передаются параметры &$form_state $uid $edit
А если я например создаю свою форму скажем profile_form, как я могу туда отправить например $edit?
Как вообще hook_user узнает что происходит?
Как сообщить hook_user что я в своей форме делаю например $op = 'update'.
Комментарии
* Implementation of hook_user().
*/
function <мой_модуль>_user($type, &$edit, &$account, $category = NULL) {
...
}
Он ничего не узнает он например user_module_invoke('validate', $form_state['values'], $account, 'account');
а делает
* Invokes hook_user() in every module.
*
* We cannot use module_invoke() for this, because the arguments need to
* be passed by reference.
*
* @param $op
* The operation to be passed as the first parameter of the hook function.
* @param $edit
* An associative array variable containing form values to be passed
* as the second parameter of the hook function.
* @param $account
* The user account object to be passed as the third parameter of the hook
* function.
* @param $category
* The category of user information being acted upon.
*/
function user_module_invoke($op, &$edit, &$account, $category = NULL) {
foreach (module_list() as $module) {
$function = $module .'_user';
if (function_exists($function)) {
$function($op, $edit, $account, $category);
}
}
}
Получается он находит в каждом модуле модуль_user и засовывает туда переменные?
Могу я например в своем модуле вызвать хук юзер $type == 'form'
свою форму my_form и в ней прописать поле name и default_value = $edit['name'];
Есть
user_module_invoke('load'
user_module_invoke('update'
user_module_invoke('after_update'
user_module_invoke('insert'
user_module_invoke('login'
user_module_invoke('delete'
user_module_invoke('view'
user_module_invoke('validate'
user_module_invoke('logout'
'form' - нет, но Вам надо просто hook_form_alter(&$form, $form_state, $form_id) использовать и будет Вам счастье.
hook_user используется для переопределения действий над пользователями: их создание, удаление, редактирование, регистрация и прочее.
Что бы хакнуть форму создания пользователя, как уже сказали выше, используется hook_form_alter с ИД формы регистрации.
Я не хочу хакать форму. Я хочу сделать свою форму user_my_profile и в ней надобавлять полей которые бы видили $edit['нужное поле']
Тоесть я отправляю форму и в default_value вписывались отправленые значения.
Понятно что можно надобавлять полей в user_profile_form а ненужные поля скрыть. Но мне кажется это не очень разумно.
это как раз таки самый наиразумнейший вариант )
ну есть у меня форма по адресу user/1/edit там поле имя , почта, пароль (например)
по адресу setttings/account я вызваю туже форму, добавляю нужные поля а ненужные скрываю.
Понятно...
А вот потом я добавил в этожу форму поле выбор часового пояса а на своей странице забыл скрыть - косяк.
Иди наоборот.
Никаких косяков или наоборот - так как _form_alter работает уже после того, как форма собрана модулем user. То что Вы спрашивали вначале совершенно такой же технологии - не Вы создаете форму, поэтому Вы можее только ее переделывать, если Вы хотите сделать форму с нуля и Вам надо эксклюзивно ей управлять, то можете использовать например profile ( core ) или http://drupal.org/project/content_profile.