誰かがモジュールのhook_installメソッドで新しいコンテンツタイプを作成する方法の適切な例を私に示すことができますか?
また、hook_uninstallの実行中に混乱を解消するために何をすべきかを知りたいです。単にコンテンツを削除することについての議論があると私は読んだ。
このタスクを実行する適切な方法の例を見つけることができませんでした。助けていただければ幸いです。
誰かがモジュールのhook_installメソッドで新しいコンテンツタイプを作成する方法の適切な例を私に示すことができますか?
また、hook_uninstallの実行中に混乱を解消するために何をすべきかを知りたいです。単にコンテンツを削除することについての議論があると私は読んだ。
このタスクを実行する適切な方法の例を見つけることができませんでした。助けていただければ幸いです。
回答:
質問に正確に答えるには:
フックインストールでのコンテンツタイプの作成: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()を使用)、等
お役に立てれば!
この情報をコードに保持する最良の方法の1つは、機能を使用することです。Feauresはコードに入れることができます:
リストは続きます。
機能に関する素晴らしい機能の1つは、Drushの統合です。
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のコンテンツコピーモジュールを使用した各コンテンツタイプのエクスポートで、アンインストール時にコンテンツタイプを削除する前にすべてのノードを削除します。
以下のリンクをお試しください。役立つでしょう。