it-swarm-es.com

Crear nuevo tipo de contenido en hook_install

¿Alguien puede mostrarme un ejemplo adecuado de cómo crear un nuevo tipo de contenido en el método hook_install de un módulo?

También me gustaría saber si/qué debo hacer durante hook_uninstall para limpiar mi desorden; Leí que hay un debate sobre simplemente eliminar el contenido.

No he podido encontrar un ejemplo del método adecuado para realizar esta tarea, ¡se agradecería cualquier ayuda!

11
Jane Panda

Para responder a sus preguntas exactamente:

Crear un tipo de contenido en la instalación de enlace : Usted usa node_type_save () para crear el tipo de contenido, aquí hay un ejemplo de formulario web. Instalar en pc:

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

¿Qué hacer en hook_uninstall : Básicamente, simplemente limpie después de usted, así que elimine las variables que creó su módulo (usando variable_del () ), eliminar los archivos cargados por el módulo (usando file_unmanaged_delete_recursive () ), eliminar los tipos de contenido definidos (usando node_type_delete () ), etc.

¡Espero que esto ayude!

7
Alex Weber

Una de las mejores maneras de mantener esta información en el código es usar características . Las características se pueden poner en código:

  • Tipos de contenido
  • Campos CCK
  • Permisos
  • Roles

La lista continua.

Una característica interesante de las características es la integración drush

drush features le dará una lista de todas las características del sitio y su estado
drush features revert all revertirá todas las funciones a lo que está en el código (realmente útil para ejecutar después de implementaciones)

Ayuda esto ayuda

11
wiifm

Echa un vistazo al módulo D7 Ejemplos . node_example tiene instalación y desinstalación.

Es posible que pueda desarrollar el tipo con las herramientas de interfaz y luego crear una función (con el módulo de funciones) y extraer partes relevantes en la función de instalación de su módulo personalizado.

3
Drew

Si desea crear un nuevo tipo de contenido con algunos campos, puede usar el siguiente código.

Este código me funciona perfectamente.

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