Управление несколькими пользовательскими типами контента из одного модуля (drupal) - PullRequest
2 голосов
/ 06 июня 2010

Можно ли объявлять и управлять несколькими пользовательскими типами контента в одном модуле? Я создаю сайт, которому нужны четыре пользовательских типа контента, и я бы хотел управлять ими из одного модуля, а не создавать модуль для каждого типа контента. После некоторого тестирования я обнаружил, что это кажется невозможным. Поскольку, если hook_form и тип содержимого не имеют одно и то же имя модуля, drupal не вызывает hook_form.

Вот как бы я хотел это сделать -

function mycontent_node_info(){
return array(
    'mycontent1' => array(
        'name' => t('....'),
        'module' => 'mycontent',
        'description' => t('...),
        'has_title' => TRUE,
        'title_label' => t('Title'),
        'has_body' => TRUE,
        'body_label' => t('content body'),
    ),
    'mycontent2' => array(
        .......
    ),
    'mycontent3' => array(
        ......
    ),
    'mycontent4' => array(
        ......
    ),
);
}

function mycontent1_form(&$node){
$form['control1'] = array(
    '#type' => 'select',
    '#options' => array(
        '0' => t('selection 1'),
        '1' => t('selection 2'),
    ),
    '#attributes' => array('id'=>'control1'),
);

$form['control2'] = array(
    '#type' => 'select',
    '#options' => array(
        '0' => t('1'),
        '1' => t('2'),
        '2' => t('3'),
        '3' => t('4'),
    ),
    '#attributes' => array('id'=>'control2'),
);   
return $form;
}

function mycontent2_form(&$node){
....
} 

function mycontent3_form(&$node){
    ....
} 


function mycontent4_form(&$node){
    ....
}  

Я что-то не так делаю здесь или это невозможно, и нет другой альтернативы, кроме создания модуля для каждого типа контента. Я очень ценю вашу помощь.

Ответы [ 2 ]

1 голос
/ 07 июня 2010

Префиксом для всех ваших хуков должно быть имя вашего модуля, то есть mycontent_node_info () и mycontent_form (& $ node). Я думаю, что сам тип контента может называться как угодно, но по соглашению все глобальные объекты, которые вы определяете в модуле, должны иметь префикс с именем модуля, чтобы избежать проблем с пространством имен. Таким образом, ваш контент становится mycontent_type1, mycontent_type2 и т. Д. Что касается работы с hook_form, я думаю, что способ сделать это - проверить тип переданного узла и действовать соответственно.

1 голос
/ 07 июня 2010

Вы можете попробовать использовать модуль «Возможности» (http://drupal.org/project/features)) для экспорта типов контента. Он автоматически генерирует код для этой работы, и вы можете посмотреть, что происходит с вашим кодом. *

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...