Проблема с созданием сложного действия [РЕШЕНО]

Главные вкладки

Аватар пользователя Assayer Assayer 16 марта 2012 в 16:59

Добрый день. Я в учебных целях пробовал написать модуль, добавляющий сложное действие. Модуль этот - обрезанная копия модуля 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)));
    }
}
?>

Комментарии

Аватар пользователя Assayer Assayer 16 марта 2012 в 18:59

Разобрался сам. Причина: обычная ошибка в коде. Функция sticky_action_info() должна возвращать массив с именем функции действия - 'sticky_action', а не 'sticky_action_info', как было у меня в приведенном выше примере.