누군가 모듈의 hook_install 메소드 에서 새 컨텐츠 유형을 작성하는 방법에 대한 적절한 예를 보여줄 수 있습니까 ?
또한 엉망을 정리하기 위해 hook_uninstall 중에 수행해야 할 작업 / 작업을 알고 싶습니다 . 내용을 단순히 제거하는 것에 대한 토론이 있다는 것을 읽었습니다.
이 작업을 수행하는 적절한 방법의 예를 찾을 수 없었으므로 도움을 주시면 감사하겠습니다!
누군가 모듈의 hook_install 메소드 에서 새 컨텐츠 유형을 작성하는 방법에 대한 적절한 예를 보여줄 수 있습니까 ?
또한 엉망을 정리하기 위해 hook_uninstall 중에 수행해야 할 작업 / 작업을 알고 싶습니다 . 내용을 단순히 제거하는 것에 대한 토론이 있다는 것을 읽었습니다.
이 작업을 수행하는 적절한 방법의 예를 찾을 수 없었으므로 도움을 주시면 감사하겠습니다!
답변:
질문에 정확하게 대답하려면 :
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 () 사용 ), 기타
도움이 되었기를 바랍니다!
이 정보를 코드로 유지하는 가장 좋은 방법 중 하나는 기능 을 사용하는 것 입니다 . Feaures는 코드를 넣을 수 있습니다.
목록은 계속됩니다.
기능에 대한 좋은 기능 중 하나는 돌진 통합입니다
drush features
사이트의 모든 기능 목록을 제공하고 상태
drush features revert all
는 모든 기능을 코드 의 상태 로 되돌립니다 (배포 후 실행에 매우 편리함)
도움이됩니다
일부 필드를 사용하여 새 컨텐츠 유형을 작성하려는 경우 아래 코드를 사용할 수 있습니다.
이 코드는 완벽하게 작동합니다.
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'));
}
}
MySpace Sync 모듈 에서이 작업을 수행했습니다 .
나는 다양한 출처에서 함께 그것을 찌르는 것을 기억하지만 모든 출처가 무엇인지 기억하지 못합니다. git 저장소를 탐색하여 내가 한 일을 확인할 수 있지만 기본적으로 CCK의 Content Copy 모듈을 설치하여 각 컨텐츠 유형을 내 보낸 다음 제거 할 때 컨텐츠 유형을 삭제하기 전에 모든 노드를 삭제합니다.
아래 링크를 시도하면 도움이 될 것입니다.