Mots-clé : drupal

Drupal drush : comment ajouter un champ lié à un vocabulaire

La solution est simple mais pas forcément évidente.

Imaginez que vous ayez un vocabulaire « MonDico ».

Dans ce dictionnaire (ou « vocabulaire« , pour reprendre l’expression Drupal), vous avez ajouté plein de mots. Enfin, pas des mots, des « termes« , pour reprendre l’expression Drupal.

Imaginez que vous vouliez créer des champs pour ce « vocabulaire« .

Voici le code qui permet de faire cela :

<?php
$vocabulary = new stdClass();
$vocabulary->name = 'PAA';
$vocabulary->description = 'Paa - Description';
$vocabulary->machine_name = 'paa';
$vocabulary->help = 'Vocabulaire related to Paa';
$vocabulary->nodes = array();
$vocabulary->weight = 0;
taxonomy_vocabulary_save($vocabulary);

$vmn = $vocabulary->machine_name;
$vvid = $vocabulary->vid;
$term = new stdClass();
$term->vid = $vvid;
$term->name = 'MonTerme';
$term->description = 'Description of terme';
$term->format = 'text';
$term->parent = 0;
$term->vocabulary_machine_name = $vmn;
taxonomy_term_save($term);

$field = array(
    'field_name' => 'test_mon_type', 
    'type' => 'text', 
);
field_create_field($field);

// Create the instance on the bundle.
$instance = array(
    'field_name' => 'test_mon_type',
    'entity_type' => 'taxonomy_term',
    'label' => 'Mon nom de champ',
    'bundle' => 'taxonomy', 
    'required' => TRUE,
    'widget' => array(
        'type' => 'textfield',
    ), 
);
field_create_instance($instance);

Rien de plus simple (mais, comme pour toute chose concernant Drupal en général) : encore fallait-il le savoir !

Drupal : comment faire fonctionner la dernière version de CKEditor

Télécharger la dernière version ici : CKEditor Version 4.3.1 – 10 Dec 2013.

Ensuite cherchez dans le répertoire de Drupal, le fichier ckeditor.inc.
Éditez ce fichier et aux alentours de la ligne 77, dans la fonction
vous devriez trouver une ligne qui ressemble fortement à ceci :

while ($max_lines && $line = fgets($library)) {

(A la différence près qu’il ya a un paramètre supplémentaire à fgets();.
Remplacez le code existant par celui qui est ici.

Ensuite 3 à 4 lignes en dessous, il y a un filtre pour chercher la version de ckeditor. Ce filtre n’est plus valide parce qu’il filtrait sur des nombres, mais ils ont ajouté des lettres à la version de CKEditor. Il faut donc le modifier par ce qui suit :

if (preg_match('@version:\"(?:CKEditor )?([\d\.]+)(?:.+revision:\"([\da-z]+))?@', $line, $version)) {

Et tout cela pourrait presque fonctionner, mais il y a quelque chose de très déroutant : même si vous avez suivi tout cela pas à pas, l’éditeur n’affichera pas les « boutons », mais juste une petite ligne : c’est parce que par défaut, rien n’est coché, et donc aucun bouton n’est visible.

Éditez donc les options de l’éditeur et cochez les boutons que vous voulez voir apparaître dans l’éditeur. Personnellement, je coche tout.

Et voilà, vous aurez un éditeur qui s’intègrera parfaitement, de manière agréable, toutes les fois où vous voudrez ajouter du contenu.

Drupal : code pour les liens avec des URLs dynamiques

Drupal : comment s’adapter à une migration si le site n’est plus à la racine ?

Dans les modules, activation du module « Php filter », afin que le code Php soit exécuté.
Et dans le texte qu’il y a dans un bloc « menu », par exemple, vous pourriez vous inspirer d’un code comme celui-ci (sachant qu’il vous faut absolument revoir l’indentation, qui n’est pas acceptable pour un code digne de ce nom) 🙂  :

<?php /* Ce code sert à générer les URLs
 * de manière dynamique, afin que si l'installation
 * Drupal est dans un sous-répertoire, les liens
 * soient "automatiquement" adaptés, via
 * le code "'absolute' => TRUE", 
 */ ?>
<ol>
    <li>
        <?php echo l(t('Menu1'),
            'lien1',
            array( 'absolute' => TRUE, 'query' => array()
        )); ?>
    </li>
    <li>
        <?php echo l(t('Menu2'),
            'lien2',
            array( 'absolute' => TRUE, 'query' => array()
        )); ?>
    </li>
    <li>
        <?php echo l(t('Menu3'),
            'lien3',
            array( 'absolute' => TRUE, 'query' => array()
        )); ?>
    </li>
    <li>
        <?php echo l(t('Menu4'),
            'lien4',
            array( 'absolute' => TRUE, 'query' => array()
        )); ?>
    </li>
</ol>