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 7 - Passer des variables à un formulaire

    Posté le Lundi 19 octobre 2015 - 16:57
    Dernière mise à jour le Vendredi 26 janvier 2018 - 18:35

    Via la fonction drupal_get_form il est possible de passer des variables à notre formulaire custom.

    //On ajoute la ou les variables à la suite de l'identifiant de notre formulaire
    $form = drupal_get_form('mon_formulaire',$ma_variable_a_passer);

    On les récupère ensuite dans la déclaration du formulaire :

    function mon_formulaire($form,&$form_state) {
      //On récupère les variables dans un tableau d'arguments
      $ma_variable_a_recuperer = $form_state['build_info']['args'][0];
      ...
    }

    Même principe avec plusieurs variables :

    $form = drupal_get_form('mon_formulaire',$var1,$var2);

    Récupération :

    function mon_formulaire($form,&$form_state) {
      $var1 = $form_state['build_info']['args'][0];
      $var2 = $form_state['build_info']['args'][1];
      ...
    }

     

  • Drupal 7 - Afficher formulaire de création et modification d'une entité définie par ECK

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

    ECK (Entity Construction Kit) est un module qui permet de créer facilement vos types d'entités via l'interface d'administration de Drupal.

    Il se peut que vous souhaitiez afficher les formulaires à des endroits personnalisés, voila comment faire :

    Formulaire de création

    $entity_machine_name = "lorem"; //Nom machine de votre entité
    $bundle_machine_name = "ipsum"; //Nom machine de votre ipsum
    
    $form = eck__entity__add($entity_machine_name, $bundle_machine_name);
    
    $content = drupal_render($form); 

    Formulaire de modification

    $entity_machine_name = "lorem"; //Nom machine de votre entité
    $bundle_machine_name = "ipsum"; //Nom machine de votre ipsum
    $id = 5; // identifiant de l'entite à modifier
    
    $form = eck__entity__edit($entity_machine_name,$bundle_machine_name,$id);
    
    $content = drupal_render($form); 

     

  • Drupal 7 - Afficher un bloc où l'on veut

    Posté le Jeudi 8 octobre 2015 - 18:04
    Dernière mise à jour le Vendredi 26 janvier 2018 - 18:35

    Afficher un block créé via l'administration

    $identifiant = 1; //c'est l'identifiant du bloc visible dans l'url lors de sa modification
    $block = block_load('block', $identifiant);
    
    $monBlock = _block_get_renderable_array(_block_render_blocks(array($block)));
    
    //Code pour afficher le block
    //Peut aussi être passé à un template via theme()
    print render($monBlock); 

    Afficher un block créé dans un module

    $module = 'mon_module' //Le nom du module définissant le bloc
    $identifiant = 'mon_bloc'; //le nom "machine" du bloc, défini dans HOOK_block_info()
    
    $block = block_load($module, $identifiant);
    $monBlock = _block_get_renderable_array(_block_render_blocks(array($block)));
    
    //Code pour afficher le block
    //Peut aussi être passé à un template via theme()
    print render($monBlock); 

    Afficher un block créé dans views

    Note : pour cela il est préférable d'utiliser le type d'affichage "Embed" ou "Intégré" de Views, qui est fait pour ça.

    $nom_vue = 'mon_bloc'; //le nom "machine" de la vue
    $nom_affichage = 'block1' //le nom "machine" de l'affichage ("Display")
    
    $block = block_load('views', $nom_vue.'-'.$nom_affichage);
    $monBlock = _block_get_renderable_array(_block_render_blocks(array($block)));
    
    //Code pour afficher le block
    //Peut aussi être passé à un template via theme()
    print render($monBlock); 
    

     

  • Drupal 7 - Form API - #states sur champ checkbox

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

    Exemple issu d'un patch que j'ai soumis pour le module twitter_post :

      $form['twitter_post_add_tracking_code'] = array(
        '#type' => 'checkbox',
        '#title' => t('Add tracking code'),
        '#default_value' => variable_get('twitter_post_add_tracking_code', 0),
      );
      //Le champ qui suit ne sera visible que si le champs précédant est coché
      //cela grâce à l'option #states
      $form['twitter_post_add_tracking_code_utm_medium'] = array(
        '#type' => 'textfield',
        '#title' => t('Campaign Medium  (utm_medium)'),
        '#maxlength' => 140,
        '#default_value' => variable_get('twitter_post_add_tracking_code_utm_medium', ''),
        '#states' => array(
          //À noter, le required ne fera qu'ajouter une asterisque rouge, aucun test ne sera
          //effectué côté serveur. (merci @DuaelFr)
          'required' => array(
            ':input[name="twitter_post_add_tracking_code"]' => array('checked'=>true)
          ),
          'visible' => array(
            ':input[name="twitter_post_add_tracking_code"]' => array('checked'=>true)
          ),
        ),
      );
    

     

  • Drupal 7 - Charger une ou plusieurs entité(s)

    Posté le Mercredi 7 octobre 2015 - 11:13
    Dernière mise à jour le Vendredi 26 janvier 2018 - 18:35

    Chargement d'une entité :

    $entity_type = 'selection'; //nom du type d'entité
    $entity_id = 1; //l'id de l'entité que l'on veut charger
    
    $entite = entity_load($entity_type,array($entity_id));//la fonction entity_load attends un tableau
    
    $entite = array_pop($entite) //la fonction entity_load retourne un tableau avec comme clé l'id
    //OU
    $entite = $entite[$entity_id]

    Chargement de plusieurs entités :

    $entity_type = 'selection'; //nom du type d'entité
    $entity_id = array(1,5,7);  //les ids des entités que l'on veut charger
    
    $entites = entity_load($entity_type,$entity_ids);//la fonction entity_load attends un tableau
    
    //$entites est un tableau d'entités dont les clés sont les ids (1,5,7 dans cet exemple)

     

  • Drupal 7 - Créer et populer une entité

    Posté le Mercredi 7 octobre 2015 - 09:30
    Dernière mise à jour le Vendredi 26 janvier 2018 - 18:35

    Dans une fonction :

    $entity_type = 'selection'; //Type de l'entité voulue
    $entity_bundle = 'selection'; //Bundle de l'entité voulue
    
    $entity = entity_create($entity_type, array('type' => $entity_bundle));
    $wrapper = entity_metadata_wrapper($entity_type, $entity);
    
    //Modification de propriétés
    $wrapper->uid = $user_id;
    
    //Modification de champs
    //Remplacez ici "field_selection_country" par le nom machine de votre champ
    $wrapper->field_selection_country->set($country_id);
    
    //Sauvegarde de l'entité et de ses champs
    $wrapper->save();

    À noter, cela peut aussi fonctionner avec un type de contenu, avec les valeurs ci-dessous :

    $entity_type = 'node'; //À ne pas modifier
    $entity_bundle = 'article'; //Nom du type de contenu

     

  • Installer Ruby, Sass & Compass sur Ubuntu

    Posté le Mardi 6 octobre 2015 - 19:11
    Dernière mise à jour le Mardi 31 juillet 2018 - 08:28

    Dans un terminal :

    sudo apt-get install ruby-dev
    sudo gem install sass compass

    Ancienne méthode :

     gpg2 --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3
    sudo apt-get update
    sudo apt-get install git-core curl zlib1g-dev build-essential libssl-dev libreadline-dev libyaml-dev libsqlite3-dev sqlite3 libxml2-dev libxslt1-dev libcurl4-openssl-dev python-software-properties
    sudo apt-get install libgdbm-dev libncurses5-dev automake libtool bison libffi-dev
    
    curl -L https://get.rvm.io | bash -s stable
    
    rvm install ruby --latest
    
    gem install compass