it-swarm.com.de

Erstellen Sie einen neuen Inhaltstyp bei hook_install

Kann mir jemand ein geeignetes Beispiel zeigen, wie ein neuer Inhaltstyp in der hook_install -Methode eines Moduls erstellt wird?

Ich würde auch gerne wissen, ob/was ich während hook_uninstall tun soll, um mein Chaos zu beseitigen; Ich habe gelesen, dass es eine Debatte darüber gibt, einfach den Inhalt zu entfernen.

Ich konnte kein Beispiel für die richtige Methode finden, um diese Aufgabe zu erfüllen. Jede Hilfe wäre willkommen!

11
Jane Panda

Um Ihre Fragen genau zu beantworten:

Erstellen eines Inhaltstyps in der Hook-Installation : Sie verwenden node_type_save () , um den Inhaltstyp zu erstellen. Hier ist ein Beispiel aus dem Webformular. Installieren:

  // 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);

Was tun in hook_uninstall : Bereinigen Sie einfach nach sich selbst, also löschen Sie die von Ihrem Modul erstellten Variablen (mit variable_del () ), Löschen Sie alle vom Modul hochgeladenen Dateien (mit file_unmanaged_delete_recursive () ), löschen Sie definierte Inhaltstypen (mit node_type_delete () ) usw.

Hoffe das hilft!

7
Alex Weber

Eine der besten Möglichkeiten, diese Informationen im Code zu speichern, ist die Verwendung von features . Funktionen können in Code eingefügt werden:

  • Inhaltstypen
  • CCK-Felder
  • Berechtigungen
  • Rollen

Die Liste geht weiter.

Ein nettes Feature über Features ist die Drush-Integration

drush features gibt Ihnen eine Liste aller Funktionen auf der Site und deren Status
drush features revert all setzt alle Funktionen auf den Code zurück (sehr praktisch für die Ausführung nach Bereitstellungen).

Hilfe das hilft

11
wiifm

Schauen Sie sich das Modul D7 Beispiele an. node_example hat installiert und deinstalliert.

Möglicherweise können Sie den Typ mit den Schnittstellentools ausarbeiten und dann eine Funktion (mit Funktionsmodul) erstellen und relevante Teile in die Installationsfunktion Ihres benutzerdefinierten Moduls extrahieren.

3
Drew

Wenn Sie einen neuen Inhaltstyp mit einigen Feldern erstellen möchten, können Sie den folgenden Code verwenden.

Dieser Code funktioniert perfekt für mich.

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