Програмное создание нового content type

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

Аватар пользователя vinny_pooh vinny_pooh 17 мая 2012 в 16:27

Люди, помогите решить проблему. Пишу модуль под свои нужды. В хуке hook_install прописую создание нового контент тайпа. Он создаеться, вот только из полей кроме заголовка больше ничего нет... Помогите пожалуйста найти проблему.

Вот код:

<?php
function periodic_reminder_install(){
    if(!
node_type_load('periodic_reminder')){
        
$node_type = array(
            
'type' => 'periodic_reminder',
            
'name' => 'Remind',
            
'base' => 'node_content',
            
'description' => 'Creating a new memo',
            
'custom' => true,
            
'locked' => false,
        ); 
// New content type settings
        
$content_type node_type_set_defaults($node_type); // Set defaults values
        
node_add_body_field($content_typet('Description')); // Add body field with label 'Description'
        
node_type_save($content_type); // Saving new content type

        // Load the instance definition for our content type's body
        

$body_instance field_info_instance('node''body''periodic_reminder');
        
$body_instance['display']['periodic_reminder_list'] = array(
            
'label' => 'hidden',
            
'type' => 'text_summary_or_trimmed',
        );
        
field_update_instance($body_instance);

        

// Create fields       
        
field_create_field(array(
            
'field_name' => 'periodic_reminder_image',
            
'type' => 'image'
        
));

        

// Create instance
        
field_create_instance(array(         
            
'periodic_reminder_image' => array(
                
'field_name' => 'periodic_reminder_image',
                
'entity_type' => 'node',
                
'bundle' => 'periodic_reminder',
                
'label' => t('Attached image'),
                
'cardinality' => 1,
                
'type' => 'text',
                
'widget' => array(
                    
'type'    => 'image_image',
                ),
            ),
        ));

    }
}

?>

Комментарии

Аватар пользователя vinny_pooh vinny_pooh 17 мая 2012 в 17:37

где мне почитать о этих самых "фичах"?

И все же вопрос остается насущным... мне надо понять в чем ошибка, а сам я её найти не могу...

Аватар пользователя vinny_pooh vinny_pooh 17 мая 2012 в 22:43

Фичи - это конечно очень хорошо. Вот несколько полезных ссылок по данной теме, которые помогли мне разобраться с ними:
Создание и использование Features
Drupal Features Новости
Небольшое слайд шоу, которое можно использовать как подсказку)

Но все же для кастомных решений не подойдет. Я порылся в ядре друпала (а именно в модуле установки) и нашел как создаются типы Article и Basic Page. Провел паралель с свои кодом и нашел ошибочки)

Вот правильное создание нового content type:

<?php
function reminder_install(){
    if(!
node_type_load('periodic_reminder')){
        
$node_type = array(
            
'type' => 'reminder',
            
'name' => 'Remind',
            
'base' => 'node_content',
            
'description' => 'Creating a new memo',
            
'custom' => true,
            
'locked' => false,
        ); 
// New content type settings
        
$content_type node_type_set_defaults((object)$node_type); // Set defaults values
        
node_type_save($content_type); // Saving new content type
        
node_types_rebuild();
        
menu_rebuild();
        
// Add body field with label 'Remind description'
        
node_add_body_field((object)$node_typet('Remind description')); 
        
    }
}
?>

При включении модуля создастся новый content type с двумя полями: Title и Remind description
Как прикручивать дополнительные поля сейчас буду искать) может кто знает и поделиться ссылкой???

Аватар пользователя vinny_pooh vinny_pooh 18 мая 2012 в 0:35

"RxB" wrote:
Фичи же, и для первого, и для второго подходят на 100%

В принцыпе я с Вами согласен. Для экономии времени можно создать основной функционал во фронтэнде и сохранить его как модуль-фичу, а потом редактировать и дописывать кастомный функционал. Спасибо за напутствие)