Flexform et itemsProcFunc

Mehdi Guermazi | CMS/SGC,Développement,Web | Mardi, 21 juin 2011

C'est votre première visite ici ! Peut être voudriez-vous souscrire à notre fil RSS pour connaître tous les changements. Merci pour votre visite !

Ces derniers temps, l’équipe Infoglobe a été assez active sur le blogue. C’est le T3CON à San Francisco qui nous a inspiré tous. Nos articles, bien qu’intéressants, n’étaient pas très techniques. Cependant, notre blogue s’adresse aussi aux programmeurs et aux utilisateurs invétérés de notre SGC favori TYPO3.

C’est la raison pour laquelle j’ai décidé aujourd’hui, de vous parler d’une astuce que j’ai appris il y a de cela quelques mois. Les logiciels libres c’est avant tout un partage de connaissances!

Flexform et itemsProcFunc

Récemment, j’ai dû développer une extension qui liste des enregistrements provenant du DAM (Digital Assets Management). Très simple me diriez-vous? C’est vrai lorsque nous sommes seul à gérer un site. La plupart du temps, les sites web et les intranets que nous développons pour nos clients sont beaucoup plus complexes que ça. Ils impliquent un grand nombre d’intervenants (utilisateurs back-end BE) et un grand nombre de rôles et de permissions (groupes back-end BE). Le choix des enregistrements dans le formulaire back-end créé grâce à un « flexform » dépend donc des permissions accordées à l’utilisateur BE courant et aux groupes auxquels ce dernier appartient.

Supposons par exemple que notre utilisateur BE appartienne à un groupe BE qui a pour « filemount » un dossier bien précis. Il ne faudrait pas dans ce cas, lui afficher des enregistrements du DAM qui ne sont pas inclus dans ce dossier.

Exemple :

Un champ de type select dans un flexform

Un champ de type select dans un flexform

 

<config>
  <type>select</type>
  <foreign_table>table</foreign_table>
  <foreign_table_where>
      AND table.champ_1 = x  AND table.champ_2 = y
      AND table.deleted = 0 AND table.hidden = 0
      ORDER BY table.champ_3 ASC
  </foreign_table_where>
</config>

Dans un flexform, nous pouvons utiliser un « select » avec un « foreign_table » et faire des requêtes simples avec « foreign_table_where » comme dans l’exemple ci-haut. Par contre, la tâche devient plus ardue lorsqu’on arrive au point où il faut jouer dans plusieurs tables de la base de données et chercher dans des relations stockées dans un champ grâce à des indentifiants séparés par des virgules.  Heureusement que TYPO3 est assez flexible pour nous permettre de tout configurer selon nos besoins. Dans le « flexform » nous pouvons utiliser « itemsProcFunc », qui nous permet d’aller chercher les items de notre « select » dans une userfunc.

Dans la classe user_maclass, il suffit d’avoir une fonction addElements qui nous permettra de faire les requêtes les plus complexes possibles. Cette fonction peut recevoir deux variables par référence : &$config et &$ref. La première contient toute la configuration du champ du flexform en question. On pourra alors accéder à la valeur du paramètre « exemple » dans $config['config']['exemple']. Nous pouvons aussi modifier les valeurs dynamiquement, seulement en les attribuant à la variable : $config['items'] = array_merge($config['items'],$optionList);.

Flexform :

 <config>
  <type>select</type>
  <itemsProcFunc>user_maclass->addElement</itemsProcFunc>
  <exemple>valeur</exemple>
</config>

class PHP :

 class user_maclass {        
   function addElement(&$config) {
      $optionList = $this->getList($config);
      if(is_array($optionList)){	    
         $config['items'] = array_merge($config['items'],$optionList);
      }	    
   }
}

Attention – la class class.user_maclass.php doit être incluse par le fichier ext_tables.php de la façon suivante :

include_once(t3lib_extMgm::extPath($_EXTKEY).'class.user_maclass.php');

Pour accéder aux données de l’utilisateur BE courant, nous avons la variable globale $BE_USER.

Exemple :

global $BE_USER;

if(!$BE_USER->isAdmin()){        
   //Récuperer les usergroup de l'utilisateur actuel    
   $ug = $BE_USER->user['usergroup'];    
   $arrug = explode(',',$ug);
}

On pourra toujours affirmer que TYPO3 est difficile à apprendre, du moins, pour les développeurs et non pas pour l’utilisateur final. Mais personne ne peut nier la force et la flexibilité de ce SGC.

T3CON11SF jour 2 : « Continuous Delivery » par Jez Humble

Mehdi Guermazi | T3CON,Web | Lundi, 13 juin 2011

Après une première journée très réussie au T3CON11SF, nous sommes passés aux choses sérieuses. Aujourd’hui, beaucoup de gens ont rejoint la conférence. C’est impressionnant de voir autant de personnes intéressées par le SGC TYPO3 et qui prennent la peine de faire un long voyage pour approfondir leurs connaissances et contribuer à la promotion de ce produit.

Jez Humble et Mehdi Guermazi au T3CON11SF

Lors du 2e matin au T3CON, nous commençons la journée avec la présentation de Jez Humble, qui nous parle de la méthode Agile et des processus de mises a jour des développements logiciel. Jez est l’auteur du livre « Continuous Delivery » (plus d’information sur http://continuousdelivery.com/).

L’idée principale de la présentation repose sur l’importance d’augmenter le nombre de mises à jour et de réduire au maximum le nombre de fonctionnalités ajoutées. Selon lui, il ne faut surtout pas développer de fonctionnalités qui ne seront pas utilisées. Lorsqu’on augmente le nombre de mises à jour, on reçoit plus de « feed-back » des clients, ce qui assure une meilleure orientation pour les futures améliorations du logiciel. Dans le même ordre d’idée, Jez a recommandé d’éviter les branches dans un logiciel de gestion de version décentralisée dans le cas ou les « merge » ne sont pas fréquents.

Pour conclure, notre présentateur nous a rappelé que le plus important, dans le processus de développement d’applications, c’est toujours les personnes impliquées. Il faut donc fréquemment organiser des réunions de suivi pour tenir les participants au courant des étapes du projet.