Створіть новий тип вмісту на гачок_install


11

Чи може хтось показати мені належний приклад того, як створити новий тип вмісту в методі mock_install модуля ?

Я також хотів би знати, чи / що я повинен робити під час встановлення гачок, щоб очистити мій безлад; Я читав, що є дебати про просто видалення вмісту.

Мені не вдалося знайти приклад правильного способу виконання цього завдання, будь-яка допомога буде вдячна!

Відповіді:


7

Щоб точно відповісти на ваші запитання:

Створення типу вмісту при встановленні гака : Ви використовуєте node_type_save () для створення типу вмісту, ось приклад з webform.install:

  // Create the default webform type.
  $webform_type = array(
    'type' => 'webform',
    'name' => st('Webform'),
    'base' => 'node_content',
    'description' => st('Create a new form or questionnaire accessible to users. Submission results and statistics are recorded and accessible to privileged users.'),
    'custom' => TRUE,
    'modified' => TRUE,
    'locked' => FALSE,
  );

  $webform_type = node_type_set_defaults($webform_type);
  node_type_save($webform_type);
  node_add_body_field($webform_type);

Що робити в hook_uninstall : в основному тільки очищення після себе, тому видаляти змінні , створені ваш модуль ( з допомогою variable_del () ), видалити всі файли , завантажені з допомогою модуля ( з допомогою file_unmanaged_delete_recursive () ), видалити певні типи контенту ( з використанням node_type_delete () ), тощо.

Сподіваюся, це допомагає!


Дякую, добре знати спосіб кодування, як це зробити, і мені потрібно було знайти хорошу інформацію про використання видалення
Jane Panda

немає проблем, рада допомогти! :)
Алекс Вебер

11

Один з найкращих способів збереження цієї інформації в коді - це використання функцій . Застосування можна ввести в код:

  • Типи вмісту
  • Поля CCK
  • Дозволи
  • Ролі

Список продовжується.

Однією приємною особливістю функцій є інтеграція барабанів

drush featuresнадасть вам список усіх функцій на сайті, і їх статус
drush features revert allповерне всі функції до того, що є в коді (дійсно зручно для запуску після розгортання)

Допомога це допомагає


Домовились, хоча він прямо не відповідає на питання ...
Alex Weber

Так, я знаю, що це не точне запитуване рішення, але в кінцевому підсумку вони будуть досягати однієї і тієї самої мети. Це просто один кошмар для підтримання, а інший буде легко з точковою клацанням та приголомшливою інтеграцією удар . Боб може вирішити, що для нього працює
wiifm

1
Знов домовились! Функції Drush + спочатку можуть залякати, але це так корисно, як тільки ви повісите це :)
Alex Weber

Я зроблю це, я думаю, що це заощадить час, якщо я можу експортувати спеціальний тип вмісту, тому мені не доведеться подавати варення у всі поля. Дякую!
Джейн Панда

3

Ознайомтеся з модулем прикладів D7 . node_example має встановити та видалити.

Можливо, ви зможете чітко визначити тип за допомогою інструментів інтерфейсу, а потім зробити функцію (з модулем функцій) та витягнути відповідні частини у функцію встановлення вашого спеціального модуля.


0

Якщо ви хочете створити новий тип вмісту з деякими полями, можете скористатися наведеним нижче кодом.

Цей код працює для мене чудово.

function HOOK_install() {

 /* CREATE THE CONTENT TYPE */
 $t = get_t();
 $node_example = array(
    'type' => 'slider',
    'name' => $t('Slider Content'),
    'base' => 'node_content',
    'description' => $t('Add slider content.'),
    'body_label' => $t('Slider Description')
 );
 $content_type = node_type_set_defaults($node_example);

// Create a custom Field with our required field-type.
$field = array(
  'field_slider_images' => array (
    'field_name' => 'field_slider_images',
    'type' => 'image',
  ),
 'field_slider_links' => array (
   'field_name' => 'field_slider_links',
   'type' => 'text',
   'entity_types' => array('node'),
  ),

);
foreach ($field as $fields) {
  field_create_field($fields);
}

// Create a instances of that Field.
$instance = array(
'field_slider_images' => array (
  'field_name' => 'field_slider_images',
  'entity_type' => 'node',
  'bundle' => 'slider',
  'label' => t('Slider Image'),
  'description' => 'Add Slider Image.',
  'settings' => array(
    'file_directory' => 'field/document',
    'file_extensions' => 'png PNG jpg jpeg JPG JPEG',
    'max_filesize' => '10MB',
    'title_field' => '',
  ),
  'widget' => array(
     'type' => 'image_image',
     'weight'=> 10,
  ),
  'formatter' => array(
    'label' => t('label'),
    'format' => 'image'
  ),
  'settings' => array(
    'file_directory' => 'slider-image', // save inside "public://photos"
    'max_filesize' => '4M',
    'preview_image_style' => 'thumbnail',
    'title_field' => TRUE,
    'alt_field' => FALSE,
  )
),
'field_slider_links' => array (
  'field_name' => 'field_slider_links',
  'entity_type' => 'node',
  'bundle' => 'slider',
  'label' => t('Slider Link'),
  'widget' => array('type' => 'text_textfield'),
 ),
);

foreach ($instance as $fieldinstance) {
 field_create_instance($fieldinstance);
}

$status = node_type_save($content_type);
node_add_body_field($content_type);

// Replacement rule for the messages.
$t_args = array('%name' => $content_type->name);
if ($status == SAVED_UPDATED) { // update case
 drupal_set_message($t('The content type %name has been updated.', $t_args));
} 
 elseif ($status == SAVED_NEW) { // create case
   drupal_set_message($t('The content type %name has been added.', $t_args));
   watchdog('node', 'Added content type %name.', $t_args, WATCHDOG_NOTICE, l($t('view'), 'admin/structure/types')); 
}

}

-1

Я зробив це в модулі MySpace Sync .
Я пам’ятаю, як це було зроблено з різних джерел, але я не пам’ятаю, які були всі джерела. Ви можете переглядати там сховище git, щоб побачити, що я зробив, але це, в основному, експорт кожного типу вмісту за допомогою модуля вмісту копії CCK при встановленні, а потім видалення всіх вузлів перед видаленням типу вмісту під час видалення.


4
Хоча питання позначено drupal-7, модуль MySpace Sync доступний лише для Drupal 6. API, який використовується для створення типу вмісту, сильно змінився між Drupal 6 та Drupal 7.
Pierre Buyle

-1

Я пропоную вам розширити свою відповідь, щоб додати більше детальних відомостей про те, про яке посилання йдеться (резюме або близько того). Можливо, це допоможе вам зняти вашу дорогу (яка не моя ...)
Pierre.Vriens
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.