Planète

Par admin

Présence DrupalFR à Solutions Linux 2014

Le salon "SOLUTIONS LINUX" 2013 se déroule le 20 et 21 mai 2014 au CNIT / La défence.

L'Association Drupal France et Francophonie (DRUPALFR) sera sur le stand B39 dans la partie village associatif et recherche des bonnes volontés pour venir nous aider à tenir le stand pour parler de Drupal et aussi venir nous voir.

  • Si vous souhaitez venir nous rendre visite, vous serez les bienvenus.
  • Si vous voulez tenir le stand avec moi, merci de me contacter en m'indiquant vos disponibilités (par demi journée)

Exemple :

  • Christophe Villeneuve
  • Contact : http://drupalfr.org/profil/hellosct1
  • Stand : matin 20 mai (à partir de 9h)

Il faut en parallèle qu'on parle des matériels!!! Discute-on!

À bientôt!

La page DRUPAL :

http://www.solutionslinux.fr/exposant_154_3498_p.html?eid=875

Planning de présence

Nom 20 mai matin 20 mai AM 21 mai matin 21 mai AM
hellosct1 oui

Horaire du salon

  • Mardi 20 mai 2013 : 9h00-19h00
  • Mercredi 21 mai 2013 : 9h00-18h00

Lieu du salon

  • Le CNIT Paris la Défense
  • Hall Marie Curie

Demander un badge pour entrée

http://www.solutionslinux.fr/preinscription.html

Responsable et contact pour le stand :

Christophe Villeneuve

Plus nous serons nombreux, moins de temps vous serez bloqué.

Pour compléter le planning, merci de poster un message dans les commentaires ou m'envoyer directement un message. Merci

Drupal8 : autopsie d’un module de création de page

image

Téléchargement de Drupal8 et nouvelle arborescence

Après téléchargement de la dernière version de Drupal, vous constaterez déjà de gros changements dans l’arborescence.

image

En effet, un dossier “core” a été ajouté. Cela permet d’éviter aux débutants d’ajouter par mégarde des modules contribués parmi ceux du core. On retrouvera donc dans notre dossier core, les modules et thèmes du coeur de Drupal.

Mais où doit-on ajouter nos modules contribués ? Cela se passe dans le répertoire “modules” à la racine. Comme le recommande Drupal, nous vous conseillons de créer deux sous-répertoires :

  • contrib (contiendra les modules téléchargés depuis Drupal.org)
  • custom (contiendra les modules personnalisés que vous développerez)

Nous gérons nos thèmes personnalisés depuis le répertoire “themes” également à la racine.

Qu’en est-il du fichier de configuration pour relier notre site Drupal à sa base de données ? Et bien nous retrouvons nos habitudes : sites/default/settings.php.

Installation et activation du module salutation

  1. Commencez par récupérer le module salutation depuis notre dépôt github
  2. Placez le module “salutation” dans le répertoire modules/custom de votre Drupal. Puis allez activer le module depuis le backoffice de Drupal en cliquant sur ”Extend” (anciennement modules).

Une fois activé, un nouvel item s’ajoute au menu principal : “Salutation - basic page” (http://d8.dev/salutation_page).

image

Nous avons également testé l’ajout de sections à la page de configuration principale (http://d8.dev/admin/config).

image

image

Les fichiers à la loupe

image

Nous allons commencer par parler de la nouvelle extension utilisée dans Drupal8 mais également dans d’autres Framework et CMS : YAML (.yml). Ce format est assez strict en terme d’indentations (La tabulation doit être remplacée par deux espace). Après un petit temps d’adaptation vous ne pourrez plus vous en passer ^^.

salutation.info.yml

Nous allons regarder plus en détail le fichier salutation.info.yml :

name: Salutation
type: module
description: An example of custum module.
package: Custom modules
core: 8.x

Anciennement nommé avec l’extension .info, ce fichier est toujours obligatoire afin de créer un module sur Drupal8.

On y retrouve comme champs obligatoires :

  • name
  • type (module ou theme)
  • description
  • package
  • core

salutation.routing.yml

Restons dans les fichiers .yml avec salutation.routing.yml :

salutation.admin_config_be:
  path: '/admin/config/be'
  defaults:
    _content: '\Drupal\system\Controller\SystemController::systemAdminMenuBlockPage'
    _title: 'BelleEpoque section title'
  requirements:
    _permission: 'access administration pages'
salutation.admin_config_be_besub:
  path: '/admin/config/be/besub'
  defaults:
    _content: '\Drupal\salutation\Controller\SalutationController::salutationAdminPage'
    _title: 'Salutation admin page title'
  requirements:
    _permission: 'access administration pages'
salutation.salutation_page:
  path: '/salutation_page'
  defaults:
    _content: '\Drupal\salutation\Controller\SalutationController::salutationPage'
    _title: 'Salutation page title'
  requirements:
    _access: 'TRUE'

Ce fichier est nouveau dans Drupal8 et remplace la partie propre au routage qui était géré auparavant dans le hook_menu.

Vous voyez clairement le rôle de l’indentation dans ce fichier. Pour rappel, vous devez utiliser deux espaces à la place de la tabulation classique.

On y voit trois déclarations de routes :

  • salutation.admin_config_be
  • salutation.admin_config_be_besub
  • salutation.admin_page

Ces trois « noms machine » permettent d’identifier une route de manière unique. Par convention, ils commencent par le nom du module suivi d’un point puis un nom qui doit donner du contexte à cette route. Par exemple j’ai choisi de reprendre le « path » générique en remplaçant les « / » par des « _ ».

Le path désigne la route pour accéder à la page. Elle commence par un / et est entre ‘’.

Puis dans defaults, on retrouve :

  • « _content » : C’est le chemin d’accès vers le controller::actionAExecuter
  • « _title » : Titre de la page

Enfin la section “requirements”  permet de définir les règles d’accès à appliquer à la page en question.

Mais que font ces trois routes ?

  1. salutation.admin_config_be permet d’ajouter une section propre à notre module. Cette section apparait seulement si cette dernière compte au moins une page rattachée. Nous la voyons à cette adresse : /admin/config
  2. salutation.admin_config_be_besub est une page d’administration (pour le moment juste une page avec un peu de contenu textuel) qui est rattachée à notre section salutation.admin_config_be.
  3. salutation.admin_page est une page visible par tous les internautes (_access à true pour cette démonstration).

salutation.module

Avant de passer à l’explication du controller, visualisons le fichier salutation.module :

<?php

/**
* Implements hook_menu_link_defaults().
*
* Routing functionality of hook_menu() has been replaced by new routing system:
* <a href="https://drupal.org/node/1800686">https://drupal.org/node/1800686</a>
*/
function salutation_menu_link_defaults() {
  // Basic page on "main" menu.
  $links['salutation.basic_page'] = array(
    'link_title' =&gt; 'Salutation - Basic page',
    'description' =&gt; '',
    'route_name' =&gt; 'salutation.salutation_page',
    'menu_name' =&gt; 'main',
  );

  // Add new section (admin/config path) with an other basic page.
  $links['salutation.admin.be'] = array(
    'link_title' =&gt; 'BelleEpoque section block title',
    'description' =&gt; 'BelleEpoque section block description.',
    'route_name' =&gt; 'salutation.admin_config_be',
    'parent' =&gt; 'system.admin.config',
  );
  $links['salutation.admin.be.besub'] = array(
    'link_title' =&gt; 'BelleEpoque page menu title',
    'description' =&gt; 'BelleEpoque page menu description.',
    'route_name' =&gt; 'salutation.admin_config_be_besub',
    'parent' =&gt; 'salutation.admin.be',
  );

  return $links;
}

Ce dernier est identique à celui sur Drupal7 mais quelques hooks changent comme le hook_menu() qui disparaît pour laisser place au hook_menu_link_defaults().

Ce dernier se concentre sur la déclaration des items de menus car le routage (déclaration des chemins d’accès) est géré dans le fichier salutation.routing.yml.

Entre crochet, on retrouve le nom machine de l’item de menu qu’il ne faut pas confondre avec le nom machine du chemin d’accès déclaré depuis route_name.

Programmation Orientée Objet

Nous arrivons maintenant à la partie Orientée Objet de cet article. Vous allez voir ça passe tout seul.

Par convention nos controllers seront dans un dossier controller mais ce dernier n’est pas n’importe où. Encore une fois, il faut respecter les conventions :

Il faut créer cette arborescence : lib/Drupal/[nommodule]/Controller

image

&lt;?php

/**
* @file
* Contains \Drupal\salutation\Controller\SalutationController.
*/

namespace Drupal\salutation\Controller;

use Drupal\Core\Controller\ControllerBase;

/**
* Controller routines for block example routes.
*/
class SalutationController extends ControllerBase {
  /**
   * A simple controller method to explain what the block example is about.
   */
  public function salutationPage() {
    $build = array(
      '#markup' =&gt; t('My first custom page!'),
    );

    return $build;
  }

  /**
   * Admin page.
   *
   * Todo: add form on this page.
   */
  public function salutationAdminPage() {
    $build = array(
      '#markup' =&gt; t('My first custom admin page!'),
    );

    return $build;
  }

}

La classe SalutationController étend ControllerBase (localisée grâce au mot clé use et du chemin Drupal\Core\Controller\ControllerBase).

On y retrouve deux fonctions que vous allez reconnaître. Au niveau de la structure on retrouve Form API référence. Pour rappel, chaque fonction est associée à une route spécifique dans le fichier salutation.routing.yml (voir les lignes “_content”).

Vers l’infini et au delà

image

Nous venons de voir ensemble la nouvelle structure d’un module Drupal8. La standardisation des composants avec l’adoption du YAML et l’utilisation de classes (POO) pour créer des pages va très certainement améliorer la montée rapide en compétence de nouveaux développeurs Drupal et stimuler l’activité de la communauté.

Nous vous retrouverons très prochainement pour de nouvelles aventures (module de création de blocks, formulaires, etc.).

En attendant, vous pouvez télécharger le module salutation depuis notre dépôt Github.

Par Marc Delnatte
Akabia

Drupal ou Wordpress ? Quel CMS choisir pour son site internet ?

Drupal et Wordpress sont deux CMS Open Source puissants et gratuits qui permettent tous deux de réaliser tout type de site internet : blog, site vitrine, e-commerce, intranet mais aussi des sites multilangues.







Par Marc Delnatte
Akabia

Gérer la configuration dans Drupal 8

Drupal 8 va arriver avec une toute nouvelle façon de gérer la configuration au sens large : les modules, les champs et même des informations comme le nom du site. Toutes ses informations, autrefois stockées en base de données dans drupal 7, seront désormais stockées dans fichier YAML (.yml) qui ne seront rien d’autre que de simples fichiers textes.







Par AlanT
Alan Tondelier

Afficher n&#039;importe quel block dans le corps de vos articles Drupal

Par design, les blocks Drupal doivent être placés dans des régions, en-tête, contenu, footer, sidebar, ce mécanisme permet facilement de structurer et de réorganiser rapidement les sections de nos sites.

Cependant il arrive d'avoir besoin d'afficher rapidement un block à l'intérieur même du texte d'un article, ceci peut survenir par exemple lorsque l'on souhaite écrire un premier paragraphe, insérer un block issu d'une vue Drupal puis continuer la rédaction. Je vous présente une méthode simple pour arriver à ce résultat.

Une syntaxe pour les appeler

Afin de placer nos blocks dans le contenu texte des nodes, il faut trouver une solution simple et sécurisée. Le bourrin pourra appeler directement les blocks par du code PHP, mais ce comportement pourra induire de bonnes failles de sécurité.

La solution proposée ici est d'utiliser une chaîne avec une syntaxe prédéfinie qui sera traitée en aval :

{--!block!{module-qui-genere-le-block}{nom-systeme-du-block} # Ici un commentaire ! #--}

Ainsi, en plaçant cette chaîne à l'intérieur de vos textes on évite tout code php et la présence d'un commentaire permet d'indiquer à vos éditeurs ce que fait cette chaîne de caractère "étrange" (et leur évite ainsi d'y toucher...).

Un hook pour les générer

Il va falloir maintenant récupérer cette chaîne de caractère et travailler avec hook_preprocess_node afin de récupérer le block qui nous intéresse. À partir d'ici deux solutions :

  1. On traite notre chaîne dans le template.php du thème de rendu front,
  2. On met en place un module qui va traiter cette chaîne.

Évidemment, la seconde méthode est la meilleure : réutilisabilité du code, possibilité de construire une page d'administration du module (par exemple pour définir quels fields peuvent contenir des blocks et pas seulement le field body), gestion des droits, meilleure intégration dans l'éditeur wysiwyg, etc...

Cependant, mon but ici est avant tout de vous donner une piste qui fonctionne, aussi je vous laisse libre de décider ou traiter cette chaîne.

Dans les deux cas, tout se passe avec hook_preprocess_node :

hook_preprocess_node - ou hook est le nom de votre thème OU de votre module

function alamigeon_preprocess_node(&$variables, $hook) {

  if(isset($variables['content']['body'])){

  $regexGlobal = '/{--(?P<capture>.*)--}/';
  $regexMod = '/!(?P<module>[a-z]+)!/';
  $regexParams = '/{(?P<params>(\w|-)+)}/';
  
  // Get the body value, this can be extended to other fields
  $body = $variables['content']['body'][0]['#markup'];

    if (preg_match($regexGlobal, $body, $matches)) { // if special strings are found

      $capture = $matches['capture'];
      preg_match($regexMod, $capture, $module);

      switch ($module = $module['module']) {
        case 'block':
          // Block code, i used a switch here for extention purpose. For instance we could also fetch a full view, with filters and sorting, with this method...
          preg_match_all($regexParams, $capture, $params); // get block params
          $params = $params['params'];

          // fetch block
          $block = block_load($params[0], $params[1]);
          // the following call ensure that rights, contextual links, and so are functionnal
          $block = _block_get_renderable_array(_block_render_blocks(array($block)));
          $block = drupal_render($block);

          // replace special string with block HTML
          $variables['content']['body'][0]['#markup'] = preg_replace($regexGlobal, $block, $body);

          break;

        case 'my_other_module':
          // do stuff
          break;

        default:
        
          break;
      }

    }

  }

}

Ainsi vous avez une méthode simple et facile à mettre en place pour afficher vos blocks directement dans vos contenus. Bien entendu ceci est un point de départ, à vous d'étendre ce code pour vos besoins.

Et dans un exemple les lier

Ce mécanisme est utilisé sur la page suivante : meetsys.com - les clients.

Vue de l'administration :


Affichage d'un block dans le corps du texte avec cette méthode

 

Par Marc Delnatte
Akabia

Retrouvez-nous au Nord It Days

L'agence Akabia est heureuse de vous retrouver le jeudi 17 avril prochain, lors de la 6ème édition des Nord IT DAYS, l'événement numérique incontournable de la région Nord-Pas-de-Calais.







Par GoZ
Fabien CLEMENT

Ajouter une propriété à une entitée

Je souhaitais pouvoir ajouter une propriété à une entité. Certainement fatigué au moment où j'ai pensé qu'il était indispensable de faire cela, j'ai bossé dessus une paire d'heures avant de me rendre compte, au moment où tout fonctionnait... que je n'en avais pas besoin finalement...

Histoire que ce ne soit pas perdu, je vais tout de même récapituler ce qu'il faut faire ici.

en lire plus

Par fgm@drupal.org
Frédéric G. Marand

Standardisation PHP : le groupe PHP-FIG et les standards PSR

Avec la montée progressive en niveau d'exigence des projets PHP, notamment dans les projets en entreprise comme les extranets et applications spécifiques, le rôle des frameworks et CMS devient prééminent et, avec leur poids, le besoin de coopérer sans devoir réinventer la roue dans chaque silo technologique: Symfony, Zend Framework, Drupal, et tous les autres.

Depuis 2009, le groupe PHP-FIG s'est fondé pour favoriser l'interopérabilité entre tous ces frameworks, CMS et grandes applications en définissant des standards permettant aux projets d'utiliser des composants à l'interface standardisée pour favoriser le mix and match des meilleurs outils dans chaque environnement. Parmi ces standards:

en lire plus

Par AlanT
Alan Tondelier

Personnalisez jusqu&#039;à la moelle le template de vos field-collections

Troll matryoshka

Le module field_collections permet de créer des "champs de champs", particulièrement pratique pour accélérer la création de contenus et permettre de simplifier la gestion en back-office. Si vous avez déjà travaillé avec field-collection, vous avez pu vous heurter à un problème lors de la modification de la sortie HTML, ou bien essayé de "themer" différement un des items de votre field-collection. 
Cet article propose un template regroupant l'ensemble de la sortie html d'un field-collection, permettant ainsi d'en simplifier la personnalisation.

Note : Cet article est une réponse "simpliste" à un problème de la communauté Drupal datant du 14 Mai 2011 : https://drupal.org/node/1157794, actuellement la solution proposée n'a pas encore été implémentée. Elle le sera dans la version 2.x de field-collection qui rendra cet article obsolète.

Field Collection, anatomie d'un theming compliqué


Sortie par défaut de field-collection avec formatteur "Field collection items"

Lorsque vous mettez en place un field-collection, drupal va rendre l'html de sortie en passant par ces étapes :

  1. Ajout de l'html pour les variables (modifier/supprimer/ajouter) directement dans une fonction de theming interne au module field_collection,
  2. Passage au fichier de template field.tpl.php pour mettre en place l'html d'enveloppe du champ,
  3. Passage au fichier de template field-collection-item.tpl pour rendre l'html de chaque item de field-collection.

Donc, si je veux personnaliser entièrement la sortie html de mes field-collection , parce-que j'ai envie de faire une intégration html aux petits oignons, la mission va s'avérer assez délicate.

Une solution "maison"

Ce n'est pas la plus élégante des solutions !

Avant tout, la solution proposée n'a pas vocation de remplacer une vraie modification du coeur du module field-collection, bien au contraire, ce que je propose est à mi chemin entre un "hack" et une utilisation conventionnelle des fonctions de theming de Drupal. Aussi vous pouvez regardé du côté du topic officiel sur drupal.org pour un patch du module permettant (normalement) d'arriver au même résultat.
Cette solution a cependant l'avantage de faire le travail demandé, à savoir personnaliser au maximum la sortie de vos field-collection mais également d'être applicable sans aucune modification de module ou d'installations complémentaires ; en travaillant sur le template.php de votre thème et en modifiant deux fichiers .tpl.php.

Et dès que la version 2.x de field_collection sera sortie, le problème ne se posera plus.

En attendant...

Nous allons travailler dans template.php, remplacez "votre_theme" par le nom système de votre theme "front" :

template.php - hook_preprocess_node()

/**
 * Override or insert variables into the node template.
 */
function demo_preprocess_node(&$variables) {
  if ($variables['view_mode'] == 'full' && node_is_page($variables['node'])) {
    $variables['classes_array'][] = 'node-full';
  }

  // Field Collection Alter - This is required in order to pass the description of the field collection and the "add new item" to $variables.

  if (!empty($variables['content'])) {
    foreach ($variables['content'] as $key => $field) {

      if (isset($field['#field_type']) && $field['#field_type'] === 'field_collection' && $field['#formatter'] === 'field_collection_view') {

        // move description and links from #suffix into separate variables for field_collection_view;
          if ($field['#formatter'] === 'field_collection_view') {

            // remove #prefix - if not, get printed
            $variables['content'][$key]['#prefix'] = '';

            //capture links and description - this is hackish (but works) !
            preg_match("/<div .*>(.*)<\/div>./i", $field['#suffix'], $desc);
            preg_match("/(<ul.*<\/ul>)/i", $field['#suffix'], $links);

            // field_collection global description
            if (isset($desc[1])) {
             $variables['content'][$key]['fc_description'] = $desc[1];
            }

            // field_collection links (add new item to the collection)
            if (isset($links[1])) {
              $variables['content'][$key]['fc_links'] = $links[1];
            }

            //remove #suffix - if not, get printed
            $variables['content'][$key]['#suffix'] = '';

          }

      }

    }

  }
 
}

template.php - hook_preprocess_field

/**
 * Override or insert variables into the field template.
 */
function demo_preprocess_field(&$vars) {

  if (isset($vars['element']['#field_type']) && $vars['element']['#field_type'] === 'field_collection' && $vars['element']['#formatter'] === 'field_collection_view') {

    // move each item into a renderable array and pass html for edit and delete links into simple variables

    foreach ($vars['items'] as $key => &$item) {
      // item
      $item['item'] = array_shift($item['entity']);

      // edit
      if (isset($item['links']['#links']['edit'])) {
        $edit = $item['links']['#links']['edit'];
        $edit = l($edit['title'], $edit['href'], array('query' => $edit['query'],'attributes'=>array('class'=>'field-collection-edit-item')));
        $item['item']['#edit_link'] = $edit;
      }

      // delete
      if (isset($item['links']['#links']['delete'])) {
        $delete = $item['links']['#links']['delete'];
        $delete = l($delete['title'], $delete['href'], array('query' => $delete['query'],'attributes'=>array('class'=>'field-collection-delete-item')));
        $item['item']['#delete_link'] = $delete;
      }

      // pass a nice, renderable array to template file
      $item = $item['item'];

    }

    // add field-collection description
    if (isset($vars['element']['fc_description'])) {
      $vars['fc_description'] = $vars['element']['fc_description'];
    }
    
    // add field-collection links
    if (isset($vars['element']['fc_links'])) {
      $vars['fc_links'] = $vars['element']['fc_links'];
    }

  }
}

Ainsi, nous avons modifié les données transmises au fichiers templates. Les fichiers templates utilisés pour rendre les field-collection n'ont pas changé, il s'agit toujours de field.tpl.php pour l'enveloppe et field-collection-item.tpl.php pour chaque item de la collection. Or avec ce qui a été fait dans template.php, field-collection-item.tpl.php doit renvoyer la plus simple des structure (ie ne pas ajouter d'html).

field-collection-item.tpl.php - à placer dans votre thème

<?php
  print render($content);
?>

Maintenant la partie qui nous intéresse le plus, le template de rendu de votre field-collection : field.tpl.php. Si vous avez suivi le code, vous avez du voir que nous avons rendu disponible le contenu normalement affiché dans field-collection-item directement au niveau de field.tpl.php.

Votre template field.tpl.php est utilisé pour rendre l'html de tout les champs de votre site, vous cibler uniquement les field-collection, nommez le field--field-collection.tpl.php, vous pouvez également mettre différents templates par field-collection et par affichage selon la syntaxte :

  1. field--[nom_systeme_du_field].tpl.php
  2. field--[nom_systeme_du_field]--[nom_systeme_affichage].tpl.php

field--field-collection.tpl.php - à placer dans votre thème

<!-- field-collection wrapper -->
<div class="field-collection">

<?php if (!empty($fc_description)): // description of the field-collection ?>

  <div class="field-collection-description">

    <?php print $fc_description; ?>

  </div>

<?php endif; ?>

<?php foreach ($items as $delta => $item): // loop on each item of the collection ?>

  <div class="field-collection-item">
    <?php
      print render($item);
      // or play with some fields
      // print render($fc_item['my_field']);
    ?>

    <?php if (isset($item['#edit_link']) || isset($item['#delete_link'])): // check that links are available (can be enabled/disabled in display settings) ?>

      <div class="field-collection-item-links">
        <?php print isset($item['#edit_link'])?$item['#edit_link']:NULL; ?>
        <?php print isset($item['#delete_link'])?$item['#delete_link']:NULL; ?>
      </div>

    <?php endif; ?>

  </div>

<?php endforeach; ?>

  <?php print !empty($fc_links)?$fc_links:NULL; // link for adding a new item to the collection ?>

</div>
<!-- end field-collection wrapper -->

Videz vos caches, et normalement votre nouveau template prend le relai dans l'affichage de vos field-collections. À noter que ce template est utilisé uniquement lors de l'affichage "field collection items".


Veillez à mettre le format de sortie sur "field collection items", sinon le template par défaut sera utilisé.

J'espère que cet article vous sera utile, et n'hésitez pas à faire des retours si vous l'implémentez dans vos projets Drupal :)

Par Artusamak
Julien Dubois

Drupal Dev Days Szeged 2014 – Episode 3

Toutes les bonnes choses ont une fin, les Dev Days n’y font pas exception. Après vous avoir raconté ce à quoi j’ai participé au cours de la première journée et de la deuxième journée de la conférence à Szeged, voilà ce que j’ai retenu de ma dernière journée.

Marvin assis devant un micro

Marvin se prépare à donner sa session (c) Mr.TeeCee

The future of media management in Drupal 8

Démarrage de la journée par cette présentation, je suis un peu curieux de savoir ce qu’il se trame pour D8 sachant que je sors d’un projet où nous avons dû gérer des médias. La session est présentée par Janez Urevc, ses slides sont disponibles sur son site. Sauf qu’en fait le chantier n’est pas hyper avancé, des discussions ont lieu depuis Prague mais sont un peu bloquées faute d’accord sur la direction dans laquelle aller. Du coup si des bonnes volontés veulent aider, rejoignez les issues, la conversation doit avancer.

Develop for D8 on D6 and D7

Ensuite direction la présentation de FGM qui a donné son point de vue sur la bascule vers Drupal 8. Il s’appuie sur des expériences passées pour décrire les situations à préférer pour faire du D8 ou non. Tout n’était pas hyper clair pour moi, j’attends ses slides pour résumer sa pensée et donner mon avis. (Il était trop tôt pour moi :)).

Graph databases for D8

Cette session a été la session de la conférence pour moi. J’avais découvert ce qu’étaient les graph databases lors des Human Talks de Paris (rendez-vous tous les deuxième mardi du mois pour venir nous voir) et Peter Arato nous a fait une présentation de Neo4j, une solution en Java, pendant 40 minutes en expliquant les usages que l’on pouvait en tirer. Comme tweeté en sortant de la salle :

Le constat est simple, lorsque vous cherchez à afficher les résultats de requêtes complexes telles que « liste les amis, des amis de mes amis » les bases de données relationnelles ne sont pas compétitives, par design elles ne sont pas faites pour ça. L’idée est donc de stocker les données différemment. Et c’est là que les graph databases apportent leur solution, au lieu de normaliser les entrées en ajoutant des clés pour faire des jointures vous décrivez les relations entre les éléments. Exemple : John / cuisine pour / Lisa, John / habite / Londres, Lisa / habite / San Franciso, John / aime / Lisa. En multipliant les relations entre les objets vous obtenez un réseau de connexions. Le principe suivant est que lorsque vous allez requêter votre base de données vous allez définir un point de départ, décrire les conditions de relations que vous voulez poser, leur profondeur et potentiellement le type de connexions attendues. Exemple : « Trouve moi une fête où il y aura au moins 20 de mes amis proches qui ne connaissent pas mon ex ». C’est très « naturel » comme langage, si vous regardez la syntaxe des requêtes vous verrez que c’est très lisible.
Quel intérêt à utiliser ce genre de base de données ? Non, elles ne remplaceront pas totalement un MySQL pour le moment, l’idée est plutôt de s’appuyer sur ce type de bases pour faire les calculs complexes et laisser MySQL servir la page de détails d’un résultat de recherche par exemple. Les tendances du web sont à la recommandation et à la personnalisation, c’est tout à fait approprié d’avoir un index à côté du site principal à partir duquel on extraira les résultats de ces calculs avancé (à la Solr).
Le niveau d’intégration avec Drupal est très basique, il y a la possibilité d’indexer des données, quelques types de champs sont supportés et il est faisable de requêter depuis une fenêtre le serveur Neo4j sans aller plus loin pour l’instant.
Les slides de Peter sont en ligne, allez y jeter un oeil et intéressez-vous au sujet, vous en entendrez de plus en plus parler, tout comme les bases de données document.

Configuring D8

L’un des nouveaux morceaux très attendus de Drupal 8 est l’intégration dans le core d’un outil pour l’industrialisation, un remplaçant de Features. Un système permettant d’exporter et d’importer de la configuration d’un environnement à un autre. Gabor s’est dévoué pour remplacer Alex Pott souffrant pour la présentation. En gros le meilleur moyen que vous plongiez dans le système est de le manipuler. La page de documentation de l’API de configuration est une lecture obligatoire pour plonger dans ce nouveau morceau. Il a été pensé pour permettre d’éviter les problèmes connus de Features et permettre de facilement générer des diffs, facilement s’interfacer avec le multilinguisme et facilement être déployable.
Il faudra juger à l’usage, mes premiers tests pour le portage de Views Megarow m’ont paru satisfaisants. Sachez que la configuration est stockée sous forme de Yaml maintenant et que le bon vieil adage Don’t hack core est devenu Don’t hack your active config car cela peut faire exploser votre site assez facilement si vous le bidouillez.
Pas de slides à disposition, lisez la page de documentation, vous découvrirez entre autres qu’il y a plusieurs niveaux de configuration, la configuration « simple », que vous stockiez avant via un variable get / set et les configurations « complexes » qui introduisent le concept de config entities.

D8 for real

Dernière présentation de la dernière journée et dernier speaker que j’aime beaucoup, Florian. Il nous partage son point de vue sur l’état de Drupal 8 et ce que l’on peut faire avec dès maintenant. Il dresse un constat de ce qui va évoluer dans nos façons de faire les projets avec un ratio d’utilisation des modules contrib qui devrait baisser comparé à Drupal 7 compte tenu du fait que chaque nouvelle version majeure rend le produit de plus en plus utilisable out of the box.
Mais Florian ne s’arrête pas là, il pointe du doigt le fait qu’avec tous les changements apportés au coeur les modules les plus populaires devraient être réécrits pour profiter de la nouvelle façon dont Drupal fonctionne. Et quitte à réécrire un module, peut être qu’il faut complètement ré-envisager la façon dont on s’en sert. Il s’appuie pour cela sur l’exemple de Panels, avec toutes les technos qui sont apparues ces dernières années, peut être qu’il sera possible de faire un outil répondant à nos besoins d’une façon complètement nouvelle. Ou peut être que l’on n’aura pas besoin de Panels du tout maintenant !
L’important c’est que les gens commencent à se servir de Drupal 8 pour qu’il monte en puissance très vite. Si vous souhaitez être un acteur significatif de l’éco-système il est crucial que vous vous y intéressiez plus tôt que tard. En construisant de vrais projets, en utilisant Drupal 8 pour de vrai, vous identifierez des besoins et proposerez des solutions qui seront peut être les Panels de demain.

Par Mantalo Conseil
Benjamin Grapeloux
Agence web, Agence de Communication et Marketing en Dordogne (Aquitaine)

+ d'1 million de sites Drupal !

Drupal a franchi la barre symbolique du million de sites

Avec ses 26 099 modules, ses 1961 thèmes, ses 783 distributions et ses 32422 développeurs, Drupal représente une des solutions libres les plus pérennes et fiables qu'ont choisie plus d'un million de propriétaires de sites Internet.

12 000 d'entre eux représentent 12 % des 100 000 sites mondiaux qui concentrent le trafic le plus important sur Internet... (données communiquées par le cabinet BuiltWith Research)

Drupal 8 va enfoncer le clou

La très prochaine sortie de la version 8 de Drupal est très attendue comme décuplant encore les potentiels déjà très puissants offerts par la version 7.

Mantalo se félicite d'offrir les solutions Drupal à ses clients

Exemple de site marchand sous drupal 7Pour une agence web, propulser les sites de ses clients avec Drupal est un investissement lourd, mais une option de qualité et de durabilité qui garantit aux propriétaires des sites un avenir serein et porteur d'évolutions.

Nous avons fait le choix en 2012 d'intégrer Drupal dans notre palette d'outils et depuis, nous confirmons l'intérêt croissant de cette solution !

Vous aussi êtes adeptes d'un internet de qualité ? Contactons-nous et étudions sans tarder comment servir vos objectifs de développement !

Par Mantalo Conseil
Benjamin Grapeloux
Agence web, Agence de Communication et Marketing en Dordogne (Aquitaine)

Gérer les commandes clients avec Drupal Commerce

Accès aux commandes dans Drupal Boutique

Dans le menu Boutique -> Commandes (ou directement Commandes selon la configuration du menu de votre site) (admin/commerce/orders) !

Vous pouvez voir la liste des commandes passées sur votre site, classées par ordre anti-chronologique.

Le tableau vous présente quelques informations pratiques sur les commandes comme :

  • son identifiant;
  • sa date de création;
  • l'email du client;
  • le total de la commande;
  • son statut;
  • et différents liens spécifiques à la commande.

Pour chaque commande, plusieurs actions sont possibles :

  • la consulter;
  • l'éditer;
  • la modifier;
  • voir le détail des paiements;
  • la supprimer;

Les statuts d'une commande

  • Annulée : commande annulée, soit automatiquement par non validation du paiement par la banque, soit manuellement suite à votre décision de ne pas donner suite à la commande.
  • Panier : l’internaute a rempli son panier, mais sans créer son compte ni entrer dans le tunnel d’achat.
  • Terminer ma commande : associé aux étapes suivantes du tunnel d'achat:
    • Tunnel d’achat : identifiant
    • Tunnel d’achat : Terminer ma commande
    • Tunnel d’achat : Coordonnées
    • Tunnel d’achat : Expédition
    • Tunnel d’achat : Vérifier
    • Tunnel d’achat : Paiement
    • Tunnel d’achat : Terminé
  • En attente :
    • En attente : statut d’une commande validée par la banque.
    • En cours de traitement : Activez cet état quand la commande est en cours de traitement.
  • Terminé : Activez cet état quand la commande est expédiée. Passe automatiquement à l’état suivant : facturé.
  • Facturé : La facture est générée au format PDF et est accessible par votre client dans son compte.

Voir la commande en détails en un seul clic !

Synthèse de la commande

La première colonne du tableau des commandes indique l'identifiant unique de celle ci. Celui ci est lié aux détails de la commande. En cliquant sur l'identifiant, vous accédez à la page qui va vous présenter tous les éléments correspondant à la commande client.

Vous pouvez voir, en premier lieu, les différentes lignes de la commande qui correspondent à chaque produit acheté par le client ainsi qu'à chaque entité commerciale comme les réductions ou les frais de port !

En plus du nom et de la référence du produit, sont indiqués le prix unitaire, la quantité et le total TTC de la ligne.

Une synthèse du prix total de la commande et des taxes est présente sous ce tableau.

Informations complémentaires de la commande

Après ce tableau, suivant les besoins de votre activité, vous retrouverez toutes les informations complémentaires à la commande, demandées à utilisateur, dans le tunnel d'achat.

Informations utiles sur le client

Enfin, dans la colonne de droite, vous trouverez toutes les informations relatives à l'utilisateur (Informations de facturation, informations d'expédition ...), donc votre client.

Les informations de paiement : lecture directe dans la boutique

Lorsque vous êtes sur le tableau récapitulatif des commandes, vous pouvez voir une liste déroulante d'actions en bout de ligne.

Dans cette liste déroulante, vous trouverez le lien "Paiement". En l'utilisant, vous accédez à une liste des paiements ou tentatives de paiements liées à la commande.

En cliquant sur le lien "Voir", vous accédez à la totalité des informations fournies par votre banque.

Accéder aux informations importantes sans changer de page !

Consultation rapide

Si vous êtes pressés ou si vous n'avez pas besoin d'accéder à la totalité des informations relatives à la commande, toujours dans la liste déroulante de fin de ligne, vous avez accès au lien "édition rapide".

En y accédant, une synthèse des informations importantes est déroulée sous la ligne de commande !

Ici, vous pouvez consulter rapidement :

  • les produits achetés,
  • l'état du paiement,
  • les informations de facturation,
  • les données d'expédition.

Actualiser le statut d'une commande

Vous pouvez aussi actualiser l'état de votre commande :

  • Une commande passée avec paiement accepté se rajoute automatiquement dans la liste, avec le statut "En attente";
  • Après avoir décidé d'accepter une commande, vous devez la passer en statut "En cours de préparation";
  • Lorsqu'une commande est finalisée, changez le statut en "Terminée".

Lorsque vous n'avez plus besoin de visualiser ces données, vous pouvez cliquer sur la petite croix, en haut à droite, pour les cacher.

Modifier ou supprimer une commande à tous moments ...

Vous êtes maître de votre boutique en ligne ! Vous pouvez modifier absolument tous les champs composant la commande.

En cliquant sur le lien "Modifier" dans la liste déroulante vue précédemment, vous accédez à la page d'édition de tous ces champs :

  • Si une information est incorrecte, changez la très simplement,
  • Vous êtes au téléphone avec un de vos clients qui vous demande de modifier un élément de sa commande, faites le en direct !
  • Vous pouvez aussi :
    • ajouter une réduction,
    • fixer une date de facturation,
    • changer une adresse,
    • modifier une quantité,
    • modifier un prix,
    • rajouter ou retirer un produit à la commande,
    • changer le statut,
    • corriger les coordonnées
    • ...
  • Accéder à l'adresse mail du client en allant en bas de la page dans les onglets verticaux. L'onglet "Informations utilisateur" contient son adresse mail, vous pouvez ainsi correspondre directement avec votre client en marge de la boutique,
  • Enfin, si vous souhaitez supprimer une commande qui n'a pas abouti, vous trouverez le lien de suppression dans la liste déroulante de fin de ligne du tableau récapitulatif des commandes.

Vous souhaiteriez vous aussi pouvoir gérer votre boutique en ligne aussi facilement ? Contactez nous !

Par Artusamak
Julien Dubois

Drupal Dev Days Szeged 2014 – Episode 2

Les Drupal Dev Days ce sont trois jours de conférence, si vous voulez savoir ce qu’il s’est dit précédemment, n’hésitez pas à lire mon compte-rendu de la première journée des Drupal Dev Days Szeged. Voilà ce que j’ai retenu de la deuxième journée.

Drupal Developer Days - J2

Keynote

Pour continuer sur leur lancée, les organisateurs ont proposé une Keynote avec un intervenant de qualité, en l’occurence une intervenante car il s’agissait de Cathy Theys (@YesCT sur drupal.org). Le sujet de sa présentation était à propos de l’organisation de sprints. Cathy est l’une des figures incontournables lorsque l’on parle de sprints, elle a aidé à se former des sprints allant de 10 personnes à plus de 600.

Les messages qu’elle a envoyé lors de son intervention sont assez simples, pour réussir vos sprints les nouveaux arrivants sont la clé. Il y a un cercle vertueux à les mentorer efficacement. Un débutant est impressionné par toute la mécanique du développement du coeur alors prenez le par la main en l’aiguillant vers des issues qui sont à sa portée pour le mettre en confiance. Prenez également le temps de faire du suivi avec ces nouveaux venus pour qu’ils ne soient pas lâchés dans la nature.
La principale difficulté consiste à réussir à « fidéliser » les contributeurs, trop souvent ils viennent aider pendant 1 ou 2 jours puis repartent dans la nature. Si vos sprints sont bien gérés, vos mentors vont prendre soins de ces nouveaux arrivants et pourront petit à petit les aider à devenir eux même mentors.
Être mentor n’est pas une mission réservée à une élite, si vous avez appris à faire une chose vous pouvez la réapprendre tout de suite à quelqu’un d’autre (et vous devenez alors son mentor). Les mentors peuvent ne pas savoir et vont vous transmettre leur approche pour trouver des réponses « voilà comment je m’y prendrais pour chercher », « j’irais parler à cette personne pour lui demander son avis », etc.
C’est grâce à l’envie de partager que la communauté fonctionne et que les sprints prennent chaque année un peu plus d’ampleur. Ne soyez donc pas effrayés et tentez de proposer un coup de main autour de vous en organisant vos sprints. Même si les gens ne viennent pas en masse la première fois, martelez vos messages, continuez de laisser une porte ouverte pour permettre aux plus timides de sauter le pas et la sauce prendra autour des sprints.
Par ici pour lire ses slides.

Building really fast websites with D8

Ma première session de la journée a été celle de Wim Leers, il y a parlé des performances de notre cher Drupal et de comment l’on pouvait les améliorer. La session était principalement orientée autour des problématiques de cache et bien entendu des problèmes d’invalidation de cache (l’un des deux sujets les plus compliqués en informatique avec le nommage des choses). L’un des principaux problèmes du cache généré par D7 est que le markup de certains éléments comme les liens contextuels, ou l’affichage d’un drapeau « nouveau contenu » change d’un utilisateur à l’autre, obligeant à générer autant de variantes d’un même cache. Changer de technique pour cacher ces données est donc une piste qui a été suivie, l’idée consiste à générer la même base de markup pour tous et d’injecter des placeholders qui sont remplacés à la volée pour chaque utilisateur. Cela coûte quelques requêtes supplémentaire par page mais cela est beaucoup plus bénéfique dans son ensemble. S’appuyer sur des techniques comme le localStorage / sessionStorage (stockage de données côté client plutôt dans une base de données) fait aussi parti des nouvelles façons de faire qui permettent de rendre la gestion du cache plus maligne.
Dans Drupal 8, il était impossible de savoir quels caches invalider lorsqu’un contenu était mis à jour, il y avait le cache du rendu direct de l’entité mais peut être aussi des rules ou des pages de listing à invalider. Difficile donc de savoir qu’est ce qui était utilisé où.
Il a donc été décidé d’ajouter des tags aux bins de cache, permettant ainsi de tagger un élément avec un node id, un user id ou un type de contenu (mais pas que), de cette façon lorsque vous allez invalider un cache, vous allez invalider un tag « je veux vider tous les caches qui sont liés au node 2254″. Imbattable comme technique pour améliorer la finesse des invalidations !
La présentation était vraiment intéressante, les slides ne sont pas encore en ligne mais je mettrai l’article à jour si je parviens à mettre la main dessus.

D8 plugin system

Un des gros morceaux de Drupal 8 a été présenté par Aspilicious. Le système de plugin de Drupal 8 pourrait être présenté de plein de façons différentes et avec des degrés de profondeur plus ou moins importants. Je vais me contenter de vous en faire la description qui me parait la plus pertinante.
Le système de plugin se base sur le principe des annotations introduit par un composant de Symfony. Les annotations sont des commentaires autour des classes qui suivent une structure bien définie et qui permettent au système d’étendre les composants de votre application. C’est ni plus ni moins que l’équivalent de vos hook_info_*() dans Drupal 7.
Le système de plugins en lui même est la possibilité qu’il vous est donnée de créer vos propres composants, vos propres hook_info(). Jetez un oeil aux slides, Aspilicious a pris le temps d’introduire tous les concepts de la plugin API par une suite d’exemples de plus en plus complexes.

Themer VS Coder

Moment de légèreté de la journée, Campbell et Adam, développeur pour l’un et thémeur pour l’autre, sont partis d’une base de wireframe de site et se sont donné comme mission de s’approcher de la mise en page demandée au plus près en partant d’un site Drupal avec des contenus déjà saisis et un peu de configuration faite.
Après 15 minutes chacun, on se rend compte que certaines choses sont faciles à faire pour l’un des deux mais plus compliquées pour l’autre (et inversement).
La conclusion de leur démo (où ils arrivent presque tous les deux au résultat demandé) est que tous les corps de métier doivent collaborer car leurs compétences sont complémentaires.

Get ready for fully translated sites with Entity Translation

Schnitzel impliqué dans l’équipe multilingue qui travaille sur Drupal 8 a présenté l’état de l’art des traductions pour Drupal 7. Il n’est pas toujours simple de choisir sa stratégie de traduction de contenu mais ça l’est un peu si vous lisez les slides de la présentation. Michael a montré comment utiliser Entity Translation et comment basculer vers ce module si précédemment vous utilisiez content translation ou field translation. Ce module est une référence et a été utilisé dans la nouvelle version majeure de Drupal. Ses slides sont en ligne (attention aux allergiques, beaucoup de chatons dans les slides !)

Care for your backoffice

Cette dernière présentation de la journée est celle que Guillaume et moi avons donné, les slides sont ci-dessous. Pendant cette présentation nous avons listé les conseils et modules que vous pouvez utiliser pour améliorer vos backoffice. Des utilisateurs passent des heures à se servir de ces interfaces, optimisez les, profitez de modules disponibles côté contrib pour rendre vos backoffices plus utilisables et si vous avez de bonnes idées, contribuez les !

Par hellosct1

Rendez-vous en conférence avec @afup_paris

L'AFUP Paris est l'antenne Parisienne de l'Association Française des Utilisateurs de PHP (AFUP). Le fonctionnement de celle-ci est d'alterné les apéros PHP et les rendez-vous.

Le 2 avril 2014, salle Spark (Paris), nous organisations un rendez-vous sous le thème : 'Intéropérabilité des frameworks PHP'.

Le programme de cette soirée :

  • Ouverture des portes à 18h30
  • 1ere présentation : les containers d’injection par David Négrier de The Coding Machine
  • 2ème présentation : Les efforts de FIG par Frédéric Marand de Osinet
  • 3ème présentation : présentation surprise
  • Pot de l’amitié

Alors venez nombreux pour parler de ce sujet et nous voir

J'en profite pour remercier l'ensemble des sites qui ont relayés l'informations : AFUP, AFUP Paris, Toolinux, Linuxfr, Agendadulibre

Bien entendu, vous pouvez toujours vous inscrire à cette soirée à partir du lien suivant : http://afup.org/pages/rendezvous/index.php?id=20

Par Artusamak
Julien Dubois

Drupal Dev Days Szeged 2014 – Episode 1

Voilà que la première journée de conférence des Drupal Dev Days 2014 se termine.  Moins d’un an après l’édition de Dublin, la communauté des développeurs Drupal se retrouve à Szeged (Hongrie) pour son rendez-vous préféré.

Photo de groupe pour les Drupal Dev Days 2014 à Szeged (Par mr.TeeCee)

Photo de groupe pour les Drupal Dev Days 2014 à Szeged (Par mr.TeeCee)

La conférence se déroule sur toute la semaine avec depuis lundi (et même dimanche soir) des journées de sprint. L’idée est de profiter de ces moments ensemble pour faire plusieurs choses : aider des nouveaux contributeurs à mettre le pied à l’étrier (presque 2 000 contributeurs déjà impliqués pour Drupal 8), échanger de vive voix entre contributeurs core afin de débloquer certains points, ou tout simplement découvrir Drupal 8.
Les sujets sont divers et variés, on y trouve par exemple du débuggage pour le site drupal.org, la gestion du multilinguisme, le thèming autour de Twig, la résolution des beta blockers, etc.

Keynote

A propos du contenu, le coup d’envoi de la journée a été donné par Jam lors d’une keynote dédiée à Drupal 8, il  a profité de sa tribune pour rendre hommage aux contributeurs déjà impliqués et a invité les nouveaux venus à s’impliquer également. Il y a du travail pour tous les niveaux et si vous ne savez pas à qui parler la technique qu’il a recommandé est très bonne : « Vous tendez votre bras et pointez votre doigt devant vous, vous fermez les yeux et faites trois tours sur vous même. En rouvrant les yeux vous parlez à la personne que pointe votre doigt et lui demandez comment contribuer, il y a de fortes chances qu’elle sache vous dire quoi faire ou vers qui vous tourner. »

Entity API pour Drupal 8

Après cette keynote Fago a pris le relai pour présenter entity API pour Drupal 8. Quoi de neuf au programme ? L’entity API dans sa version pour Drupal 7 n’était pas terminée, elle a donc été unifiée, réécrite, optimisée.
Changement le plus notable, les propriétés et les champs sont maintenant tous des champs. Ils sont respectivement des base fields et des bundle fields. Cela signifique que manipuler des propriétés ou des champs se fera de façon transparente, les mêmes méthodes pourront être appelées. Autre bénéfice, on peut donc maintenant appliquer des formateurs et des widgets aux base fields (anciennement appelés propriétés) et c’est une très bonne nouvelle !
Obtenir des informations sur le modèle des données se résume à appeler une simple méthode là où avant il fallait appeler un hook_entity_info() et faire pas mal de navigation au sein du tableau de données retourné.
J’ai aimé ses explications sur la validation API qui prend tout son sens lorsque vous faites du REST, vous ne pouvez pas valider vos données comme si un formulaire venait d’être soumis, il vous faut donc vous appuyer sur une autre logique de validation, et c’est là que la validation API entre en jeu.
Prenez le temps de parcourir les slides, il y a beaucoup d’informations très intéressantes, on y parle du stockage, de la façon de définir de nouveaux types d’entités, de contrôle d’accès etc.

Point sur les initiatives non officielles

Pour la deuxième session de la journée, je suis allé voir Pedro nous partager ce qu’il se passe du côté des initiatives « non officielles » pour Drupal 8. Il s’agit de changements plus ou moins grands portés par quelques individus qui continuent de rendre Drupal meilleur. En vrac, il a parlé de WYSIWYG, Twig, Menus comme entités, de l’introduction des form modes (yay \o/), de la nouvelle façon de faire la migration et de plein d’autres sujets. Jetez un oeil à ses slides elles valent le coup et vous découvrirez sûrement pas mal de nouveautés pour Drupal 8.

D8: Fields reborn

A la reprise des sessions suite  à la pause déjeuner, Swentel a donné sa présentation sur le nouveau fonctionnement des champs pour Drupal 8. Le sujet a été rapidement évoqué par Fago dans sa session sur Entity API mais Kristof est allé plus loin. Il y a beaucoup de choses spécifiques détaillées dans ses slides et il sera bien plus intéressant pour vous de les consulter.

Cracking Drupal

La bonne surprise de la journée a été la présentation de Klausi sur la sécurité. Je m’attendais en rentrant dans la salle à écouter encore une session sur la sécurité qui était abstraite et pas vraiment appliquée à Drupal et ça n’a pas été le cas du coup. Klausi a pris le temps de vulgariser les principales failles de sécurités identifiées sur les sites et de faire un parallèle pour Drupal avec des exemples concrets.

Drupal and Scrum from the trenches

Cette session a été plus particulière, je n’y ai pas assisté, je l’ai donnée avec Guillaume. Nous avons partagé nos retours d’expériences sur Drupal et Scrum, vous pouvez accéder aux slides de notre présentation « Drupal and Scrum from the trenches » pour lire ce que nous avons présenté.

JS Pulp Fiction

Pour terminer les sessions de ce jour 1, direction la salle principale pour écouter nod_ nous parler de Pulp Fiction et de l’état de Javascript dans Drupal 8. Ses messages étaient autour des bonnes pratiques, de la nouvelle façon de travailler avec Javascript et de l’avenir potentiel du sujet.

La suite demain après une courte nuit de sommeil !

Par hellosct1

AgoraCMS j-30

Dans 30 jours se déroulera AgoraCMS 2014. Cette deuxième édition se déroulera le 25 avril 2014 à Paris à destination de l'ensemble des CMS : Drupal, Wordpress, Typo 3, Joomla, etc...

Ce rendez-vous est ouvert à toutes les personnes qui n’intéresses aux CMS en générales, mais aussi, aux DSI, chefs de projets technique et marketing.

Le thème principal de l'édition 2014 est 'Développez votre audience : du marketing à la technique'.

Le programme vient d'être publié avec 3 salles en parallèle :

  • E-marketing
  • Ergonomie/design
  • Technique

De plus, une salle découverte est en place pour découvrir les possibilités des CMS.

Enfin, les inscriptions sont ouvertes, et il est important de s'inscrire rapidement avant la fermeture du guichet.

Programme de AgoraCMS 2014

Site officiel de AgoraCMS

Par admin

Assemblée générale extraordinaire du 2 avril 2014

Fichier attaché Taille
dff-ag-2014-2.pdf 73.64 Ko

Chers adhérents,
J’ai le plaisir de vous convier à une assemblée général extraordinaire de notre association le mercredi 2 avril prochain, conformément à l’article 8 des statuts.
Cette réunion se tiendra le mercredi 2 avril 2014 à partir de 19h à la Maison des Associations du 3ème, 5 rue Perrée, 75003 Paris, dans la salle 1.
. Cette assemblée extraordinaire fait suite a celle organisée le 18 mars 2014 qui n’a pas réunit le quorum nécessaire au vote sur la modification des statuts de notre association. Conformément à l’article 8.2 nous convoquons une nouvelle assemblée générale extraordinaire. Celle-ci aura pour objet la soumission au vote de modifications de nos statuts, notamment sur la constitution du conseil d’administration et sur son mode de scrutin.
Si vous ne pouvez être physiquement présent lors du vote, vous pouvez vous faire représenter par un autre membre de l’association muni d‘un pouvoir régulier (ou vous pouvez l’envoyer à l’adresse de l’association au minimum 4 jours avant l’assemblée générale).
Vous pouvez également participer à l'assemblée générale par un moyen de communication électronique permettant de vous identifier formellement. Dans ce cas, si vous souhaitez participer aux votes vous devrez renoncer à l'anonymat des votes afin de les transmettre.
Je vous rappelle également que seuls les membres à jour de leur cotisation peuvent participer à l’assemblée générale et participer au vote, n'hésitez pas à adhérer dés à présent grâce au bulletin d'adhésion en ligne http://drupalfr.org/sites/default/files/formulaire-adherent-drupalfr.pdf ou sur place le jour même.

Olivier Friesse
Président sortant Drupal France & Francophonie

En page d'accueil : 
Par admin

Le nouveau bureau ADFF élu pour 2014 !

Lors de l'assemblée générale ordinaire du 18 mars 2014, les membres de l'association ont élu le nouveau bureau.

Voici les résultat du scrutin :

  • Anne Sophie Picot : 34 (élue)
  • Alexandre Israël : 7
  • Christophe Villeneuve : 27 (élu)
  • Edouard Cunibil : 33 (élu)
  • Florent Torregrosa : 23 (élu)
  • Frédéric G. Marand : 31 (élu)
  • Julien Dubreuil : 32 (élu)
  • Léon Cros : 35 (élu)
  • Olivier Pierre : 30 (élu)
  • Simon Morvan : 29 (élu)
  • Vincent Maucorps : 25 (élu)
  • Viriginie Jarosik : 28 (élue)

Le bureau se réunira dans le courant de la semaine prochaine pour désigner en son sein les nouveaux président, trésorier et secrétaire de l'association.

En page d'accueil : 
Par Mantalo Conseil
Benjamin Grapeloux
Agence web, Agence de Communication et Marketing en Dordogne (Aquitaine)

Syndiquer un flux externe sur son site Drupal

logo Drupal RSS

Pourquoi syndiquer un contenu externe sur son site ?

Il peut être bénéfique de syndiquer un flux RSS externe sur son propre site !

Cette action permet d'afficher dans les pages de votre site les dernières publications du site web d'un partenaire, d'un client ou d'un site qui apporte un contenu pertinent et complémentaire au votre pour l'enrichir ou le compléter.

Vous pouvez ainsi donner une profondeur à votre contenu en l'associant naturellement à celui du site que vous syndiquez.

Comment syndiquer un site externe avec Drupal?

Suivez tout simplement les étapes suivantes...

Accés à l'agrégateur de flux RSS

Se rendre sur "Agrégateur de flux"Dans la Configuration du site, cliquez sur le lien "Agrégateur de flux" dans la partie "Services Web".

(admin/config/services/aggregator)

 

 

Ajout d'un flux RSS

Ajouter un flux RSSCliquez sur "Ajouter un flux".

(admin/config/services/aggregator/add/feed)

 

 

Informations d'un flux RSS

Renseigner le fluxIndiquez notamment :

  • un titre (par exemple, "suivez l'actualité de ce site",
  • l'adresse du flux RSS (et pas l'adresse du site),
  • la fréquence des mises à jour (nous vous conseillons "1 jour" pour ne pas surcharger les activités serveur de fond),
  • le nombre de publications que vous souhaitez afficher.

 

Enregistrement du flux RSS

Mettre à jour le flux RSSCliquez sur "Enregistrer".

 

Activation d'un nouveau flux

Sur la page qui récapitule les flux (admin/config/services/aggregator), vous pouvez voir le flux récemment ajouté.

Cliquez sur le lien "mettre à jour les éléments" pour que le module récupère les publications.

 

Visualisation du flux

Se rendre dans la gestion des blocsRendez vous ensuite sur la page de gestion des blocs, dans le menu "Structure" puis "Blocs" (admin/structure/block).

Le module de syndication a automatiquement créé un bloc qui affiche les dernières publications de votre flux !

 

Positionnement du contenu syndiqué

Choisir la région du blocAssignez le à la région dans laquelle vous souhaitez voir le bloc s'afficher (barre latérale, contenu principal, pied de page ...), puis enregistrez (en bas de la page).

 

Affichage du flux

Enfin, vous pouvez configurer votre bloc afin de ne l'afficher que sur certaines pages de votre site, pour certains utilisateurs ou dans certains types de contenu.

Vous pouvez aussi changer son titre. Pour cela, cliquez sur le lien "configurer" associé au bloc, vous trouverez en premier lieu un champ pour modifier son titre et en bas de page, différents onglets pour configurer son affichage !
Configurer le bloc Les paramètres du bloc

 

Validation de la configuration du nouveau flux RSS

Le résultat de la syndicationEnregistrez, videz le cache et le tour est joué !

Vous disposez maintenant d'un bloc affichant les dernières publications du site syndiqué ainsi qu'une page dédiée à ses publications !

 

 


 

Mantalo met la syndication au service de ses clients pour afficher les dernières publications de leurs sites et renforcer ainsi leur référencement naturel. Envie d'en savoir plus sur cette fonctionnalité ? Contactez nous !

Pages