it-swarm-vi.com

Tạo loại nội dung mới trên hook_install

Ai đó có thể chỉ cho tôi một ví dụ thích hợp về cách tạo loại nội dung mới trong phương thức hook_install của mô-đun không?

Tôi cũng muốn biết nếu/tôi nên làm gì trong thời gian hook_uninstall để dọn dẹp mớ hỗn độn của mình; Tôi đọc có một số tranh luận về việc đơn giản là loại bỏ nội dung.

Tôi chưa thể tìm thấy một ví dụ về phương pháp phù hợp để hoàn thành nhiệm vụ này, bất kỳ trợ giúp nào cũng sẽ được đánh giá cao!

11
Jane Panda

Để trả lời chính xác câu hỏi của bạn:

Tạo loại nội dung trong hook install : Bạn sử dụng node_type_save () để tạo loại nội dung, đây là ví dụ từ biểu mẫu web. Tải về:

  // 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);

Làm gì trong hook_uninstall : Về cơ bản chỉ cần tự dọn dẹp, vì vậy hãy xóa các biến mà mô-đun của bạn đã tạo (sử dụng biến_del () ), xóa bất kỳ tệp nào được tải lên bởi mô-đun (sử dụng file_unmanaged_delete_recursive () ), xóa các loại nội dung được xác định (sử dụng node_type_delete () ), v.v.

Hi vọng điêu nay co ich!

7
Alex Weber

Một trong những cách tốt nhất để giữ thông tin này trong mã là sử dụng tính năng . Feaures có thể đưa vào mã:

  • Loại nội dung
  • Lĩnh vực CCK
  • Quyền
  • Vai trò

Danh sách cứ kéo dài.

Một tính năng hay về các tính năng là tích hợp drush

drush features sẽ cung cấp cho bạn danh sách tất cả các tính năng trên trang web và trạng thái của chúng
[.__.] drush features revert all sẽ hoàn nguyên tất cả các tính năng trở lại những gì trong mã (thực sự tiện dụng để chạy sau khi triển khai)

Giúp điều này giúp

11
wiifm

Kiểm tra mô-đun D7 Ví dụ . node_example đã cài đặt và gỡ cài đặt.

Bạn có thể bổ sung loại bằng các công cụ giao diện và sau đó tạo một tính năng (với mô-đun tính năng) & trích xuất các phần có liên quan vào chức năng cài đặt của mô-đun tùy chỉnh của bạn.

3
Drew

Nếu bạn muốn tạo một loại nội dung mới với một số trường, bạn có thể sử dụng mã dưới đây.

Mã này hoạt động hoàn hảo cho tôi.

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')); 
}

}
0
Sanjay