Добрый день. Я в учебных целях пробовал написать модуль, добавляющий сложное действие. Модуль этот - обрезанная копия модуля action_example с api.drupal.org. Он должен по триггеру делать ноду помещенной на главную и закрепленной вверху списка; я обозвал его sticky и определил четыре функции для создания сложного действия:
sticky_action_info
sticky_action_form
sticky_action_validate
sticky_action_submit
sticky_action
Проблема в том, что когда я пытаюсь создать действие на странице admin/config/system/actions при нажатии на кнопку "Создать" открывается пустая страница с адресом вида admin/config/system/actions/configure/gEDz0UsY3pnzlvjJULSyEySLCNQi2XB1fbNG14lvko4 и больше ничего не происходит (я пробовал сделать еще одно действие попроще по тому же образцу, результат тот же). Подскажите, пожалуйста, куда копать.
Drupal 7.12
Модули:
Administration menu
Localization update
Chaos tools
Views
Token
Devel
Содержимое файла sticky.module:
<?php
function sticky_action_info() {
return array(
'sticky_action_info' => array(
'label' => 'Promote and sticky any content created by:',
'type' => 'node',
'configurable' => TRUE,
'triggers' => array('node_presave', 'node_insert', 'node_update')
)
);
}
function sticky_action_form($context) {
$form['author'] = array(
'#title' => t('Author name'),
'#type' => 'textfield',
'#description' => t('Any content created, presaved or updated by this user will be promoted to front page and set sticky.'),
'#default_value' => isset($context['author']) ? $context['author'] : '',
'#required' => TRUE
);
return $form;
}
function sticky_action_validate($form, $form_state) {
if (! $account = user_load_by_name($form_state['values']['author']) )
form_set_error('author', t('Please, provide a valid username'));
}
function sticky_action_submit($form, $form_state) {
return array('author' => $form_state['values']['author']);
}
function sticky_action($node, $context) {
$account = user_load_by_name($context['author']);
if ($account->uid == $node->uid) {
$node->promote = NODE_PROMOTED;
$node->sticky = NODE_STICKY;
watchdog('action', 'Set type %title to sticky and promoted by special action for user %username.', array('type' => node_type_get_name($node), '%title' => $node->title, '%username' => $account->name));
drupal_set_message(t('Set type %title to sticky and promoted by special action for user %username.', array('type' => node_type_get_name($node), '%title' => $node->title, '%username' => $account->name)));
}
}
?>
Комментарии
На ссесси в урлах похоже xD мб путаю. На другие действия переходит
Разобрался сам. Причина: обычная ошибка в коде. Функция sticky_action_info() должна возвращать массив с именем функции действия - 'sticky_action', а не 'sticky_action_info', как было у меня в приведенном выше примере.