hook_install에서 새 컨텐츠 유형 작성


11

누군가 모듈의 hook_install 메소드 에서 새 컨텐츠 유형을 작성하는 방법에 대한 적절한 예를 보여줄 수 있습니까 ?

또한 엉망을 정리하기 위해 hook_uninstall 중에 수행해야 할 작업 / 작업을 알고 싶습니다 . 내용을 단순히 제거하는 것에 대한 토론이 있다는 것을 읽었습니다.

이 작업을 수행하는 적절한 방법의 예를 찾을 수 없었으므로 도움을 주시면 감사하겠습니다!

답변:


7

질문에 정확하게 대답하려면 :

hook install에서 컨텐츠 유형 작성 : 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

문제 없습니다, 기꺼이 도와주세요! :)
Alex Weber

11

이 정보를 코드로 유지하는 가장 좋은 방법 중 하나는 기능 을 사용하는 것 입니다 . Feaures는 코드를 넣을 수 있습니다.

  • 컨텐츠 유형
  • CCK 필드
  • 권한
  • 역할

목록은 계속됩니다.

기능에 대한 좋은 기능 중 하나는 돌진 통합입니다

drush features사이트의 모든 기능 목록을 제공하고 상태
drush features revert all는 모든 기능을 코드 의 상태 로 되돌립니다 (배포 후 실행에 매우 편리함)

도움이됩니다


그것은 질문에 직접 대답하지 않지만 동의합니다 ...
Alex Weber

예, 이것이 정확한 해결책이 아니라는 것을 알고 있습니다. 그러나 궁극적으로 그들은 동일한 목표를 달성 할 것입니다. 하나는 유지하기가 악몽 일 것이고 다른 하나는 포인트 앤 클릭 및 멋진 drush 통합으로 쉬울 것입니다 . Bob은 자신에게 적합한 것을 결정할 수 있습니다.
wiifm

1
다시 합의! Drush + Features는 처음에는 위협적 일 수 있지만 일단 중단되면 유용합니다 :)
Alex Weber

나는 그 장면을 줄 것이다. 나는 커스텀 컨텐츠 타입을 내보낼 수 있다면 시간을 절약 할 수 있다고 생각한다.
Jane Panda

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의 Content Copy 모듈을 설치하여 각 컨텐츠 유형을 내 보낸 다음 제거 할 때 컨텐츠 유형을 삭제하기 전에 모든 노드를 삭제합니다.


4
질문에 drupal-7 태그가 지정되어 있지만 MySpace Sync 모듈은 Drupal 6에서만 사용할 수 있습니다. 컨텐츠 유형을 작성하는 데 사용되는 API는 Drupal 6과 Drupal 7 사이에서 많이 변경되었습니다.
Pierre Buyle

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.