web-gelistirme-sc.com

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

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/ne yapmalıyım hook_uninstall olmadığını 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!

11
Jane Panda

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

Kanca kurulumunda bir içerik türü oluşturma : İçerik türünü oluşturmak için node_type_save () kullanıyorsunuz, işte web formundan bir örnek. Yüklemek:

  // 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 : Temelde sadece kendinizden sonra temizleyin, bu yüzden modülünüzün yarattığı değişkenleri silin ( variable_del () ), modül tarafından yüklenen dosyaları silin ( file_unmanaged_delete_recursive () ) kullanarak, tanımlanmış içerik türlerini silin ( node_type_delete () ) vb. kullanarak.

Bu yardımcı olur umarım!

7
Alex Weber

Bu bilgileri kodda tutmanın en iyi yollarından biri özellikler kullanmaktır. Özellikler kod koyabilirsiniz:

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

Liste devam ediyor.

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

drush features size sitedeki tüm özelliklerin ve durumlarının bir listesini verecektir
drush features revert all tüm özellikleri koddakilere geri döndürecektir (dağıtımlardan sonra çalıştırmak için gerçekten kullanışlı)

Yardım edin bu yardımcı olur

11
wiifm

D7 Örnekler 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.

3
Drew

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

}
0
Sanjay