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


11

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 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!

Câu trả lời:


7

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

Tạo một 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à một ví dụ từ 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);

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ân vân.

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


Cảm ơn bạn, thật tốt khi biết cách mã hóa để làm điều đó và tôi cần tìm một số thông tin tốt về việc sử dụng gỡ cài đặt
Jane Panda

Không vấn đề, tôi săn long giup! :)
Alex Weber

11

Một trong những cách tốt nhất để giữ thông tin này trong mã là sử dụng các 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 featuressẽ 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 allsẽ hoàn nguyên tất cả các tính năng trở lại mã (thực sự tiện dụng để chạy sau khi triển khai)

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


Đồng ý, mặc dù nó không trả lời trực tiếp câu hỏi ...
Alex Weber

Vâng, tôi biết đây không phải là giải pháp chính xác được yêu cầu, nhưng cuối cùng cả hai sẽ đạt được cùng một mục tiêu, chỉ là một trong số đó sẽ là một cơn ác mộng để duy trì, và cách khác sẽ dễ dàng với việc tích hợp điểm nhấn và nhấp chuột tuyệt vời . Bob có thể quyết định những gì làm việc cho anh ta
wiifm

1
Đồng ý lại! Các tính năng của Drush + ban đầu có thể đáng sợ nhưng nó rất hữu ích khi bạn hiểu rõ về nó :)
Alex Weber

Tôi sẽ cho nó một shot, tôi nghĩ sẽ tiết kiệm thời gian nếu tôi có thể xuất một loại nội dung tùy chỉnh để tôi không phải kẹt tất cả các trường trong. Cảm ơn!
Jane Panda

3

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.


0

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

}

-1

Tôi đã làm điều này trong mô-đun MySpace Sync .
Tôi nhớ việc ghép nó từ nhiều nguồn khác nhau, nhưng tôi không nhớ tất cả các nguồn đó là gì. Bạn có thể duyệt kho git ở đó để xem những gì tôi đã làm, nhưng về cơ bản, đó là xuất từng loại nội dung với mô-đun Sao chép Nội dung của CCK khi cài đặt, sau đó xóa tất cả các nút trước khi xóa loại nội dung khi gỡ cài đặt.


4
Trong khi câu hỏi được gắn thẻ drupal-7, mô-đun MySpace Sync chỉ có sẵn cho Drupal 6. API được sử dụng để tạo loại nội dung đã thay đổi rất nhiều giữa Drupal 6 và Drupal 7.
Pierre Buyle

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.