Snippets

Les snippets sont des bout de code.

Présenté ici de manière volontairement « brute », ces snippets ont vocation à servir d'aide mémoire.

N'hésitez-pas à poser un commentaire si vous rencontrez un problème avec un des éléments.

Vous pouvez utiliser la navigation via les tags présents sur la droite

  • Drupal 8 - Charger toutes les entitées d'un certain type

    Posté le Mercredi 27 avril 2016 - 12:02
    Dernière mise à jour le Vendredi 26 janvier 2018 - 18:35

    Ici mon type d'entitée est "group" :

    $storage = \Drupal::entityManager()->getStorage('group');
    $query =  \Drupal::entityQuery('group');
    
    $ids = $query->execute();
    if(count($ids)>0) {
      return $storage->loadMultiple($ids);
    }
    else {
      return [];
    }

     

  • Drupal 7 - Views - Créer un champ calculé personnalisé

    Posté le Mercredi 2 mars 2016 - 09:22
    Dernière mise à jour le Vendredi 26 janvier 2018 - 18:35

    Dans views quand l'on veut avoir un champ personnalisé un peu tiré par les cheveux, on peut y aller comme un porc en utilisant le hook_views_pre_render ou alors on peut definir un custom field.

    Première étape, implémenter le HOOK_views_data() afin de définir le champ :

    function MON_MODULE_views_data() {
      $data['acaps_user']['table']['group'] = t('User'); // groupement de field dans lequel sera placé notre champ custom dans views
      $data['acaps_user']['table']['join'] = array(
        '#global' => array(),
      );
    
      $data['acaps_user']['countries_followed'] = array(
        'title' => t('Mon nom de champ'),
        'help' => t('Ma description de champ'),
        'field' => array(
          'handler' => 'views_handler_mon_champ_custom', //doit correspondre au nom de la classe definie plus bas
        ),
      );
    
      return $data;
    }

     

    Deuxième étape définir la classe qui contiendra le calcul du champ :

    <?php
    class views_handler_mon_champ_custom extends views_handler_field {
      function render($values) {
        return t("C'est ici que l'on peut faire les traitement et que l'on doit retourner le contenu du champ");
      }
    }

     

     

  • Installer Node JS 10 et npm sur Ubuntu

    Posté le Dimanche 28 février 2016 - 10:45
    Dernière mise à jour le Lundi 22 octobre 2018 - 08:58

    Pour installer Node JS 10.x :

    1. curl -sL https://deb.nodesource.com/setup_10.x | sudo -E bash -
    2. sudo apt-get install -y nodejs

    Pour installer Node JS 9.x :

    1. curl -sL https://deb.nodesource.com/setup_9.x | sudo -E bash -
    2. sudo apt-get install -y nodejs

    Pour installer Node JS 8.x :

    1. curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash -
    2. sudo apt-get install -y nodejs

    Ensuite installation de gulp, foundation, bower en global :

    1. sudo npm install -g gulp gulp-cli foundation bower

     

     

  • Installer picasa 3.9 sous Ubuntu

    Posté le Mercredi 10 février 2016 - 10:26
    Dernière mise à jour le Vendredi 26 janvier 2018 - 18:35

    Ajouter les lignes suivantes à votre fichier .bash_rc / .zsh_rc :

    export WINEARCH=win32
    export WINEPREFIX=~/.wine
    

    Lancer les commandes suivantes

    rm -Rf .wine
    sudo apt-get install wine winetricks
    cd && wget http://dl.google.com/picasa/picasa39-setup.exe
    winetricks
    winetricks ie6
    wine picasa39-setup.exe
    
  • Drupal 7 - Database API - db_select et count

    Posté le Lundi 4 janvier 2016 - 09:26
    Dernière mise à jour le Vendredi 26 janvier 2018 - 18:35

    Comment utiliser count dans un db_select avec Drupal ?

     

    Dans l'exemple ci-dessous, on détermine le nombre de nodes de type "page" publiées.

    $nb_results = db_select('node')
      ->fields(NULL, array('nid'))
      ->condition('type','page')
      ->condition('status',1)
      ->countQuery()
      ->execute()
      ->fetchField();
    
  • Drupal 7 - Database API - Utiliser IS NULL et IS NOT NULL

    Posté le Mercredi 16 décembre 2015 - 11:16
    Dernière mise à jour le Vendredi 26 janvier 2018 - 18:35

    Quand l'on fait des jointures on veut parfois récupérer les enregistrements dont un champ n'est pas renseigné ou au contraire que ceux qui le sont.

    Pour cela en SQL on utilise le "IS NULL" ou "IS NOT NULL".

    Pour faire la même chose avec la database API de Drupal 7 il faut utiliser les methodes isNull() et isNotNull().

    Exemple avec isNull() :

    $query = db_select('scald_atoms', 'a');
    $query->fields('a', array('sid','title'));
    $query->leftjoin('table_name','table_alias','table_alias.entity_id = a.sid');
    $query->isNull('table_alias.mon_field_value');
    $query->execute();
    $query->fetchAllAssoc('nid');

    Exemple avec isNotNull() :

    $query = db_select('scald_atoms', 'a');
    $query->fields('a', array('sid','title'));
    $query->leftjoin('table_name','table_alias','table_alias.entity_id = a.sid');
    $query->isNotNull('table_alias.mon_field_value');
    $query->execute();
    $query->fetchAllAssoc('nid');

     

  • Drupal 7 - Supprimer un champ (de manière brutale)

    Posté le Mercredi 4 novembre 2015 - 16:35
    Dernière mise à jour le Vendredi 26 janvier 2018 - 18:35

    Parfois vous pouvez vous retrouver avec un problème d'intégrité de données qui entraîne l'impossibilité de supprimer un champ, voici comment faire avec Drush, dans un terminal donc :

    drush eval 'field_delete_field("NOM_MACHINE_DU_FIELD")'
    drush core-cron
    drush eval 'field_purge_batch(1)'
    

    Ou bien dans un HOOK_update_X :

    function MODULE_update_7001() {
      field_delete_field("NOM_MACHINE_DU_FIELD");
      field_purge_batch(1);
    }

     

  • Drupal 7 - Créer un vocabulaire et des terms de taxonomy

    Posté le Mardi 3 novembre 2015 - 09:28
    Dernière mise à jour le Vendredi 26 janvier 2018 - 18:35

    Le script suivant permet de créer un nouveau vocabulaire et de lui affecter des termes en concervant l'ordre défini dans le tableau.

    Il est à utiliser dans un HOOK_install ou un HOOK_update_X par exemple.

      $voc_name = "Nom du vocabulaire";
      $voc_desc = "Description du vocabulaire";
      $voc_machine_name = "nom_machine"; //sans espace et caractères spéciaux 
    
      $vocabulary = new stdClass();
      $vocabulary->name = $voc_name;
      $vocabulary->description = $voc_desc;
      $vocabulary->machine_name = $voc_machine_name;
      taxonomy_vocabulary_save($vocabulary);
    
      //on charge maintenant le vocabulaire pour avoir son VID
      $vocabulary = taxonomy_vocabulary_machine_name_load($voc_machine_name);
    
      //les termes à créer
      $terms = array(
        'Term 1',
        'Term 2',
        'Term 3',
      );
    
      foreach($terms as $key => $term) {
        $new_term = new stdClass();
        $new_term->name = $term;
        $new_term->weight = $key; //permet de définir le poids (pour l'ordre)
        $new_term->description = '';
        $new_term->vid = $vocabulary->vid;
        taxonomy_term_save($new_term);
      }

     

  • Drupal 7 - Supprimer toutes les entités d'un certain type

    Posté le Mardi 20 octobre 2015 - 10:26
    Dernière mise à jour le Vendredi 26 janvier 2018 - 18:35

    Pour faire du ménage sur un site et supprimer tous les contenus de test, on peut biensûr le faire à la main, ou utiliser un script.

    Celui qui suit fonctionne à la fois pour les types de contenu mais aussi pour les entités custom.

    Créez un fichier php à la racine de votre site drupal avec le contenu suivant. Modifiez simplement les variables $entity_type et $bundle pour correspondre à votre besoin.

    Pour lancer le script, appelez-le depuis votre navigateur.

    <?php
    define('DRUPAL_ROOT', getcwd());
    
    require_once DRUPAL_ROOT . '/includes/bootstrap.inc';
    drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);
    
    
    $entity_type = "node"; //Nom du type de l'entité
    $bundle = "article"; //Bundle de l'entité ('article', 'page'...)
    
    $query = new EntityFieldQuery();
    $result = $query
      ->entityCondition('entity_type',$entity_type)
      ->entityCondition('bundle', $bundle)
      ->execute();
    
    $deleted_count = 0;
    foreach ($result[$entity_type] as $key => $record) {
      entity_delete($entity_type,$key);
      $deleted_count++;
    }
    
    print("$deleted_count entites de type $entity_type ont été supprimées.");