Hook_install'da yeni içerik türü oluştur


11

Birisi bana bir modülün hook_install yönteminde yeni bir içerik türünün nasıl oluşturulacağına dair uygun bir örnek gösterebilir mi?

Ayrıca karışıklık temizlemek için hook_uninstall sırasında / ne yapmam gerektiğini bilmek istiyorum ; İçeriğin kaldırılmasıyla ilgili bazı tartışmalar olduğunu okudum.

Bu görevi yerine getirmek için uygun yöntemin bir örneğini bulamadım, herhangi bir yardım takdir edilecektir!

Yanıtlar:


7

Sorularınızı tam olarak cevaplamak için:

Kancalı yüklemede bir içerik türü oluşturma : İçerik türünü oluşturmak için node_type_save () yöntemini kullanırsınız , işte webform.install'dan bir örnek:

  // 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'da ne yapılır : Temel olarak sadece kendinizden sonra temizleyin , bu nedenle modülünüzün oluşturduğu değişkenleri silin ( variable_del () kullanarak ), modül tarafından yüklenen dosyaları silin ( file_unmanaged_delete_recursive () ), tanımlanmış içerik türlerini silin ( node_type_delete () kullanarak ), vb.

Bu yardımcı olur umarım!


Teşekkür ederim, bunu yapmanın kodlama yolunu bilmek güzel ve kaldırmayı kullanmayla ilgili bazı iyi bilgiler bulmam gerekiyordu
Jane Panda

Sorun değil, yardımcı olduğuma sevindim! :)
Alex Weber

11

Bu bilgileri kod içinde tutmanın en iyi yollarından biri özellikleri kullanmaktır . Özellikler kod koyabilirsiniz:

  • İçerik türleri
  • CCK alanları
  • İzinler
  • Roller

Liste devam ediyor.

Özelliklerle ilgili güzel bir özellik, drush entegrasyonudur

drush featuressitedeki tüm özelliklerin bir listesini verir ve durumları
drush features revert alltüm özellikleri kodda bulunanlara geri döndürür (dağıtımlardan sonra çalıştırmak için gerçekten kullanışlı)

Yardım edin bu yardımcı olur


Anlaşılan, doğrudan soruyu cevaplamasa da ...
Alex Weber

Evet, bunun tam olarak istenen çözüm olmadığını biliyorum, ama sonuçta ikisi de aynı hedefe ulaşacak, sadece bir kabus olacak ve diğeri nokta ve tıklama ve müthiş drush entegrasyonu ile kolay olacak . Bob onun için neyin işe
yarayacağına

1
Yine kabul etti! Drush + Özellikleri ilk başta korkutucu olabilir ama asıldıktan sonra çok kullanışlı :)
Alex Weber

Ben bir şans vereceğim, özel bir içerik türünü dışa aktarabilirsem zaman kazanacağını düşünüyorum, bu yüzden tüm alanları el sıkışmak zorunda kalmayacağım.
Jane Panda

3

D7 Örnekleri modülüne bakın. node_example kurulum ve kaldırma özelliğine sahip.

Arabirim araçlarıyla türü temizleyebilir ve ardından bir özellik (özellik modülü ile) yapabilir ve ilgili parçaları özel modülünüzün yükleme işlevine çıkarabilirsiniz.


0

Bazı alanlarla yeni bir içerik türü oluşturmak istiyorsanız aşağıdaki kodu kullanabilirsiniz.

Bu kod benim için mükemmel çalışıyor.

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

Bunu MySpace Sync modülünde yaptım .
Bunu çeşitli kaynaklardan bir araya getirdiğimi hatırlıyorum, ancak tüm kaynakların ne olduğunu hatırlamıyorum. Ne yaptığımı görmek için git deposuna göz atabilirsiniz, ancak temel olarak her içerik türünün yükleme sırasında CCK'nın İçerik Kopyalama modülü ile dışa aktarılması ve ardından kaldırma sırasında içerik türünü silmeden önce tüm düğümlerin silinmesi.


4
Soru drupal-7 olarak etiketlenirken, MySpace Sync modülü yalnızca Drupal 6 için kullanılabilir. İçerik türü oluşturmak için kullanılan API, Drupal 6 ile Drupal 7 arasında çok değişti.
Pierre Buyle

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.