Buat tipe konten baru di hook_install

11

Dapatkah seseorang menunjukkan kepada saya contoh yang tepat tentang cara membuat jenis konten baru dalam metode hook_install modul ?

Saya juga ingin tahu apakah / apa yang harus saya lakukan selama hook_uninstall untuk membersihkan kekacauan saya; Saya membaca ada beberapa perdebatan tentang hanya menghapus konten.

Saya belum dapat menemukan contoh metode yang tepat untuk menyelesaikan tugas ini, bantuan apa pun akan dihargai!

Jane Panda
sumber

Jawaban:

7

Untuk menjawab pertanyaan Anda dengan tepat:

Membuat tipe konten pada pemasangan kait : Anda menggunakan node_type_save () untuk membuat jenis konten, berikut ini adalah contoh dari 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);

Apa yang dilakukan di hook_uninstall : Pada dasarnya hanya membersihkan diri sendiri, jadi hapus variabel yang dibuat modul Anda (menggunakan variable_del () ), hapus semua file yang diunggah oleh modul (menggunakan file_unmanaged_delete_recursive () ), hapus tipe konten yang ditentukan (menggunakan node_type_delete () ), dll.

Semoga ini membantu!

Alex Weber
sumber
Terima kasih, ada baiknya mengetahui cara pengkodean untuk melakukannya juga, dan saya perlu mencari beberapa info bagus tentang cara menghapus instalasi
Jane Panda
tidak masalah, senang membantu! :)
Alex Weber
11

Salah satu cara terbaik untuk menyimpan informasi ini dalam kode adalah dengan menggunakan fitur . Feaures dapat dimasukkan ke dalam kode:

  • Jenis konten
  • Bidang CCK
  • Izin
  • Peran

Daftarnya berlanjut.

Satu fitur bagus tentang fitur adalah integrasi drush

drush featuresakan memberi Anda daftar semua fitur di situs, dan statusnya
drush features revert allakan mengembalikan semua fitur kembali ke apa yang ada dalam kode (benar-benar berguna untuk menjalankan setelah penyebaran)

Bantu ini membantu

wiifm
sumber
Setuju, meskipun itu tidak menjawab pertanyaan secara langsung ...
Alex Weber
Ya, saya tahu ini bukan solusi tepat yang diminta, tetapi pada akhirnya mereka berdua akan mencapai tujuan yang sama, hanya saja satu akan menjadi mimpi buruk untuk dipertahankan, dan yang lain akan mudah dengan titik dan klik dan integrasi drush yang mengagumkan . Bob dapat memutuskan apa yang berhasil baginya
wiifm
1
Setuju lagi! Drush + Fitur dapat mengintimidasi pada awalnya tetapi sangat berguna setelah Anda terbiasa :)
Alex Weber
Saya akan mencobanya, saya pikir ini akan menghemat waktu jika saya dapat mengekspor jenis konten khusus sehingga saya tidak harus menyerahkan semua bidang ke dalamnya. Terima kasih!
Jane Panda
3

Lihat modul Contoh D7 . node_example telah menginstal & mencopot.

Anda mungkin dapat menyempurnakan jenisnya dengan alat antarmuka lalu membuat fitur (dengan modul fitur) & mengekstrak bagian yang relevan ke dalam fungsi pemasangan modul khusus Anda.

Drew
sumber
0

Jika Anda ingin membuat tipe konten baru dengan beberapa bidang, Anda dapat menggunakan kode di bawah ini.

Kode ini berfungsi dengan baik untuk saya.

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

}
Sanjay
sumber
-1

Saya melakukan ini dalam modul MySpace Sync .
Saya ingat mengumpulkan itu bersama-sama dari berbagai sumber, tetapi saya tidak ingat apa semua sumber itu. Anda dapat menelusuri repositori git di sana untuk melihat apa yang saya lakukan, tetapi pada dasarnya ini adalah ekspor dari setiap jenis konten dengan modul Copy Konten CCK saat instalasi, dan kemudian menghapus semua node sebelum menghapus jenis konten pada uninstall.

Scott Reynen
sumber
4
Sementara pertanyaan ditandai dengan drupal-7, modul MySpace Sync hanya tersedia untuk Drupal 6. API yang digunakan untuk membuat tipe konten telah banyak berubah antara Drupal 6 dan Drupal 7.
Pierre Buyle