Créer un type de contenu et y attacher des champs

Il est possible via l'IHM de créer un nouveau type de contenu et d'y ajouter des champs. Tout ceci peut également se faire de manière programmatique, par un simple module.

Le module va comporter au moins 2 fichiers : le .info qui décrit le module, et le .module qui comprend le code.

Pour notre démonstration, nous allons créer un module qui permettra de créer des contenus qui seront repris par Views Slideshow par la suite.

Le fichier monslideshow.info est simple :

name = Mon Slideshow
description = [slideshow] Custom Slideshow based on Views Slideshow
package = Custom modules
core = 7.x
version = 7.x-dev-0.7
dependencies[] = views
dependencies[] = link
stylesheets[all][] = vcmslideshow.css

Le type de contenu et les champs seront créés dans le fichier monslideshow.install :

function monslideshow_install () {

// Add Node Type mon_carrousel if it does not exist
 if (!in_array('mon_carrousel', node_type_get_names())) {
    $type = array(
      'type' => 'mon_carrousel',
      'name' => st('Custom Carrousel Accueil'),
      'base' => 'node_content',
      'description' => st('Utiliser Custom Carrousel pour les articles mis en évidence.'),
      'custom' => 1,
      'modified' => 1,
      'locked' => 0 
  	);

    $type = node_type_set_defaults($type);
    node_type_save($type);
    node_add_body_field($type);

// Turn off comments
  variable_set('comment_mon_carrousel', '1');
  variable_set('node_submitted_mon_carrousel', 0);  
  }

// Ajout d'un champ de type Link (apporté par le module link)

  $field = array(
    'field_name' => 'field_lien',
    'type' => 'link_field',
    'cardinality' => 1,
    'locked' => FALSE,
    'indexes' => array(),
    'settings' => array(
        'attributes' => array(
          'class' => '',
          'rel' => '',
          'target' => 'default',
        ),
        'display' => array(
          'url_cutoff' => 80,
        ),
        'enable_tokens' => 1,
        'title' => 'optional',
        'title_maxlength' => 128,
        'title_value' => '',
        'url' => 0,    ),
    'storage' => array(
      'type' => 'field_sql_storage',
      'settings' => array(),
    ),
  );
  field_create_field($field);
 
// On attache ensuite au type de contenu mon_carrousel

  $instance = array (
    'field_name' => 'field_lien',
    'entity_type' => 'node',
    'label' => 'Lien',
    'bundle' => 'mon_carrousel',
    'description' => st('Lien vers la page.'),
    'required' => FALSE,
    'settings' => array(
        'attributes' => array(
          'class' => '',
          'configurable_title' => 0,
          'rel' => '',
          'target' => 'default',
          'title' => '',
        ),
        'display' => array(
          'url_cutoff' => '80',
        ),
        'enable_tokens' => 1,
        'title' => 'optional',
        'title_maxlength' => '128',
        'title_value' => '',
        'url' => 0,
        'user_register_form' => FALSE,
        'validate_url' => 1,
      ),
      'widget' => array(
        'active' => 0,
        'module' => 'link',
        'settings' => array(),
        'type' => 'link_field',
        'weight' => '32',
      )
      
  );
 
  field_create_instance($instance);



}
Catégorie