Planète eZ Publish, Ze french corner!

Planète eZ Publish (Page 40)

Frédéric David : Conférence eZ Developer

Hier après midi, eZ Systems a organisé une conférence autour du développement. Cette conférence a attiré pas mal de développeurs, tel que tigrou , ou Nabil .

Ayant eut l'estomac dans les talons, je suis arrivé en retard, et j'ai malheureusement loupé la présentation de Roland Benedetti pendant que j'engloutissais mon sandwitch.

Paul Borgermans nous a décrit eZ Labs et leur objectifs. C'est un projet très intérréssant, qui devrait permettre à eZ publish de se perfectionner sur différents points bloquants. Bonne nouvelle pour les développeurs, projects.ez.no devraient réouvrir, mais je n'ai pas demandé quand est ce que les inscriptions allaient réouvrir :'(

Il nous a aussi exposé la roadmap pour eZ publish 4, et la fabuleuse extension eZ Find qui tourne autour de solr. Le principal changement pour les développeurs sera à partir de la version 4.x qui aménera un changement dans la syntaxe des templates. Il y aura aussi une augmentation des performances, supérieures à ce que l'on pouvait conclure avec le test de performances qu'on peut retrouver sur ez.no. Pas mal de composants d'eZ Components vont être intégrer, tel que les workflows.

Paul a expliqué rapidement les différents concepts, et les façons de faire pour migrer les extensions de PHP4 vers PHP5. Nous avons eut le droit à une démonstration de la nouvelle extension eZ publish nommée eZ Flow, qui d'après moi a de belles années devant elle.

Damien Pobel, du blog pwet.fr a parlé des sites à gros traffic. Il nous a expliqué les différents systèmes possibles, tel que le cache statique, ou le clustering, avec leur avantage, ainsi que leur inconvénients. Il nous a expliqué l'architecture et les différents concepts qu'il avait utilisé sur un site à très grosse audience, avec des obligations de performance supérieures à ce qu'eZ publish peut fournir. Ce passage fut très intérréssant, même si je doute que j'en aurais un jour besoin pour frefred.fr ...

Cette conférence était très instructive, et intéressante. A quand la prochaine ?

Publié par Frédéric David le

Frédéric David : Utiliser eZUrl via l'API

eZ Publish nous fournit certains opérateurs de base, tel que ezurl, ezimage, ezroot et ezdesign.

A la place de les utiliser dans les templates, voici quelques informations pour utiliser ezurl via l'API.

ezurl

L' opérateur ezurl est définit dans la classe php ezuri.php. Pour l'utiliser, voici un petit exemple de code :

include_once('lib/ezutils/classes/ezuri.php');
$link = $node->attribute('url_alias');
eZURI::transformURI($link);

La variable $link contient désormais la même valeur que si vous aviez utliser l'opérateur ezurl, et peut directement être renvoyé dans un lien.

Publié par Frédéric David le

Frédéric David : eZ publish 3.10 et les urls

Depuis la version 3.10 d'eZ publish , nous pouvons configurer le schéma des urls tel que nous le désirons. Voici une petite documentation sur les différentes fonctionnalités.

eZ publish 3.10 modifie son schéma d'url, en remplaçant le underscore par le tiret. Mais voulant rester flexible, il nous permet de personnaliser le schéma des urls.

Les schémas d'url de base, et leur configuration

eZ publish définit dès l'installation 7 schémas d'url. Ces schémas sont définit dans le fichier transform.ini. Nous pouvons donc retrouver :

  • search
  • urlalias_iri
  • urlalias
  • urlalias_compat
  • identifier
  • uppercase
  • lowercase

Ajouter un schéma d'url

Pour ajouter un schéma d'url, il faut créer le fichier transform.ini.append.php. Une fois créer, il faut rajouter notre nouveau schéma dans le tableau Groups de la section [Transformation]. Il faut ensuite créer une section portant le nom de votre schéma. Dans votre section, deux tableaux doivent être créer : Extensions et Commands.

Le tableau Extensions doit comporter un lien vers les extensions comportant des scripts de transformation. Commands est un tableau contenant les différentes règles à utiliser pour modifier les urls.

Voici la liste des commandes disponibles par défaut :

  • normalize : normalise plusieurs caractères similaires
  • search_normalize : requis pour le moteur de recherche.
  • transform : Transform un caractère en un autre
  • decompose : Transforme les caractères spéciaux.
  • lowercase : Passe tout en minuscule si possible
  • uppercase : Passe tout en majuscule si possible
  • transliterate : Convertit en un charset possible
  • diacritical : Supprime les caractères non critiques
  • rule : Permet de lancer une commande personnalisée

Il existe des commandes spéciales : url_cleanup (nettoie l'url pour en faire un texte présentable en tant qu'url), identifier_cleanup (similaire à url_cleanup, mais pour que ca ressemble à un identifiant), search_cleanup (transforme l'url pour que l'url soit utilisable par le moteur de recherche).

Par exemple, pour que notre schéma d'url soit séparé par des tirets, et le tout en minuscule, voici à quoi ressemblerait notre transform.ini.append.php

 
[Transformation]
Groups[]=lower_uri
 
[lower_uri]
Extensions[]
Commands[]
Commands[]=normalize
Commands[]=transform
Commands[]=decompose
Commands[]=transliterate
Commands[]=diacritical
Commands[]=lowercase
Commands[]=url_cleanup

Il faut configurer notre site pour qu'il prenne ce nouveau schéma. Il faut modifier le fichier site.ini.append.php. Il faut modifier la variable TransformationGroup de la section URLTranslator :

 
[URLTranslator]
TransformationGroup=lower_uri

Pour mettre à jour toutes vos urls après, vous pouvez exécuter deux scripts php, à partir de votre répertoire eZ publish .

php bin/php/updateniceurls.php -s votre_siteaccess
php bin/php/ezcache.php --clear-all
Publié par Frédéric David le

Frédéric David : eZpublish : le système de droits

le CMS eZ publish utilise un système de droits relativements poussé, et très modulable selon les besoin de l'administration. Les accès se font sur différentes restrictions qui sont les modules , les vues, et les arborescences.

Quelques concepts

Histoire d'approcher au plus près le fonctionnement d'eZ publish , vous pouvez retrouver un peu de vocabulaire, pour que la suite de l'article soit plus claire. Les termes les plus importants sont module et vue. Voici une petite explication.

Les différentes fonctionnalités d'eZ publish sont décrites selon le même processus. A la base, eZ publish est composé de modules, tel que content, pdf, ou user. Pour chaque module, un nombre de vue est défini, tel que view, download, create pour le module content.

Comme exemple, lorsque l'on visualise la page d'accueil, eZ publish appele l'url système content/view/2. Cette url appele donc la vue "view" du module "content" et lui passe en paramètre l'id du noeud 2.

Définir un rôle

Pour définir un rôle précis, il faut se rendre dans Comptes Utilisateurs > Rôle et droits ou Administration > Rôle et droits. Vous retrouvez tous les rôles déjà définis dans votre instance eZ publish . Vous avez donc la possibilité de créer un rôle, ou de modifier les rôles déjà existants.

Créer un rôle, est un simple champ texte à remplir, ou vous nommez tout simplement votre rôle. Vous allez devoir ajouter des polices au rôle. Une police définit les permissions sur :

  • un module
  • une vue

Vous pouvez restreindre la permission selon la configuration des vues définies dans le module. Vous pouvez restreindre selon une arborescence, un noeud, une classe, ou une section.

Voici quelques exemples :

  • Autorisation de s'identifier sur un siteaccess : module user, vue login, et vous pouvez choisir les siteaccess désirés.
  • Créer du contenu : module content, vue view, et vous pouvez personnaliser vos accès dessus.

Une fois votre rôle créé, avec les différentes polices enregistrées, vous pouvez l'assigner à un groupe d'utilisateur, ou un à utilisateur.

Assigner un rôle à un utilisateur

Une fois notre rôle créé, nous allons l'assigner à un utilisateur. Une fois sur la page de visualisation du rôle, eZ publish nous propose deux solutions pour l'assigner. Les choix possibles sont :

  • Assigner le rôle à un groupe d'utilisateurs ou utilisateur
  • Assigner le rôle à un groupe d'utilisateurs ou utilisateur avec limitation à une sous arboresecence ou section

Vous pouvez utiliser librement l'assignation qui vons convient selon votre site.

Trucs et Astuces

Voici en vrac, quelques trucs que j'ai remarqué sur les droits.

  • Pour pouvoir modifier la priorité des enfants, il faut avoir le droit de modifier le node parent.

Désactiver des vues

Le système de droits d'eZ publish permet seulement d'attribuer de nouveaux droits aux utilisateurs. L'inconvénient est que pour certaines situations, nous avons besoin de désactiver des vues pour les utilisateurs. Par exemple, pour un site public, il faut que l'utlisateur anonymous puisse s'identifier sur le siteaccess correspondant à votre site. Cette permission permet donc à n'importe quelle personne de s'identifier, ou de créer un utilisateur. Pour un site communautaire, cette fonctionnalité n'est pas nécéssaire, et eZ publish permet de désactiver certaines vues. Dans le fichier site.ini, vous pouvez rajouter ces lignes :

[SiteAccessRules]
Rules[]
Rules[]=access;disable
#Lister toutes les vues qui doivent être désactivées
# Interdir l'enregistrement d'un nouvel utilisateur
Rules[]=module;user/register
Publié par Frédéric David le

Frédéric David : eZ publish 3.10 et 4.0 alpha

Aujourd'hui, la version d'ez publish 3.10 en stable est sorti. eZ Systems propose aussi la version d'eZ publish 4 en alpha.

Vous pouvez télécharger ces deux versions sur la page download d'eZ Systems . Pour les geeks, fans d'ez publish, ca va nous donner une saine occupation le soir :)

A première vue, il n'y pas grand chose de changer, peut être un simple portage en php5.

Publié par Frédéric David le


Frédéric David : Extended Attribute Filter

eZ publish nous permet de récuperer certains éléments grâce à la fonction fetch. Pour cette fonction, il est possible de ne sélectionner que certains éléments, en utilisant le paramètre attribute_filter. Le paramètre attribute_filter ne permet pas de faire toutes les restrictions que l'on veut, d'où l'apparition de l' extended attribute filter.

Configuration de l'extended attribute filter

Pour créer un extended attribute filter, qui sera réutilisable facilement sur nos sites, nous allons commencé par créer une nouvelle extension. Cette extension doit contenir deux dossiers :

  • settings
  • classes ( nom par défaut dans eZ publish )

Pour déclarer notre extended attribute filter, nous allons créer un fichier nommé extendedattributefilter.ini.append.php dans le dossier settings.

La déclaration d'un extended attribute filter se fait par le biais de 4 lignes de code :

 
[extended_attribute_filter_name]
ExtensionName=extensionname
ClassName=classname
MethodName=methodname
FileName=filename ( classes/file.php)
 

Une fois la déclaration de notre extended attribute filter fini, nous allons commencé par créer notre fichier php.

Création de l'extended attribute filter

Pour créer le code pour l'extended attribute filter, on va commencer par créer un fichier php dans le répertoire classes, et nous allons commencer par le remplir selon ce que nous avons déclaré dans le fichier de settings.



class classname
{
     function classname()
     {
          // empty
     }
 
     function methodname( $params )
     {
          // Your code
     }
}
?>
 

L'extended attribute filter est tout simplement un ajout dans la requête sql. Notre méthode methodname doit retourner un tableau de type associatif, contenant deux champs :

  • la cellule tables : les tables à rajouter dans la requête
  • la cellule joins : les lignes sql contenant les jointures ou restrictions.

Utilisation de l'extended attribute filter

Voici un exemple de code pour utiliser notre extended attribute filter :

{fetch( 'content', 'list', hash( 'parent_node_id', 2,
                 'sort_by', array( 'priority', false() ),
                 'limit', 15,
                 'extended_attribute_filter',
                            hash( 'id', 'extended_attribute_filter_name',
                                          'params', hash( 'value1', 15,
                                                        'value2', 30 ) ),
              'depth', 10,
              'main_node_only', true() ) )}
 
Publié par Frédéric David le

Frédéric David : eZ publish 3.10 beta1 est sorti

eZ publish 3.10 est sorti en version beta aujourd'hui. eZ Systems en a profité aussi pour sortir différents patchs de correction , la version 3.8.9 et la 3.9.3.

eZ publish 3.10 beta 1

eZ publish 3.10 beta1 est sortié aujourd'hui. Dans la version Beta, le nouveau datatype de multioption est désormais terminé. On peut commencer à voir comment ce datatype va se comporter.

Pour rappel, voici les nouvelles fonctionnalités d'eZ publish 3.10 :

  •  

    Clustering amélioré

     

  •  

    Menu contenant l'arboresence amélioré. Il devrait ressembler à ce que l'on peut avoir avec l'extension ezJaxx.

     

  •  

    Datatype ISBN-13 amélioré

     

  •  

    Datatype multioption revu

     

Les releases 3.8.9 et 3.9.3

les versions d'eZ publish 3.8.9 et 3.9.3 sont sorti aujourd'hui. Elles corrigent en premier lieu un bug de sécurité très important. eZ publish , lors de la vérification des permissions, posait quelques soucis pour les vues , ou aucune fonction de politique est définie. Différents problèmes ont pu se produire sur le fonction "Remise" du module du magasin.

Tous les utilisateurs, utilisant la fonctionnalité de remise dans ce module , et qui ont définit des rôles avec des règles explicites sont priés de mettre à jour leur version d'eZ publish .

D'autres bugs ont été corrigés en même temps.

Publié par Frédéric David le

Frédéric David : l'éditeur Online Editor d'eZ publish

L'éditeur WYZWYG d'eZ publish Online Editor est à l'heure actuelle assez complet. Tout comme eZ publish , qui permet de rajouter des extensions pour être aussi flexible que l'on veut, Online Editor est aussi très souple et permet de le configurer comme on le désire.

Rajouter des classes CSS

Online Editor nous propose certains éléments HTML de base, tel que les liens, les balises de mise en forme ( gras , italique, ...), les tableaux etc ... En modifiant quelques fichiers, on peut rajouter des classes CSS aux différents éléments, pour permettre une présentation collant plus au site Internet.

Pour déclarer de nouvelles classes CSS , il faut modifier le fichier content.ini.append.php . Selon la balise que vous comptez modifier, il faut rajouter le nom de la balise entre crochets, et rajouter le nom de la classe que vous voulez. Voici un exemple de code pour rajouter une classe CSS "violet" pour les liens.

[link]
AvailableClasses[]
AvailableClasses[]=violet

Une fois ces lignes ajoutées, vous pouvez la retrouver en créant un lien, dans le champ Classe .

Vous pouvez ajouter une description à cette classe, pour qu'elle soit plus explicite. Il faut modifier le fichier content.ini.append.php de l'extension ezdhtml. Voici un exemple sur la classe "violet" :

[link]
ClassDescription[]
ClassDescription[violet]=12px Gras violet


Au lieu de retrouver dans le champ Classe, la ligne violet, on retrouvera à la place 12px Gras Violet.

Rajouter des balises personnalisées


Les balises personnalisées, ou custom tag permettent de rajouter des attributs html dans l'éditeur WYZWYG . Pour rajouter un custom tag, il faut ouvrir le fichier content.ini.append.php . Le plus pratique serait de prendre celui dans le répertoire Settings > Override.

Une fois le fichier ouvert, il faut rajouter une section CustomTagSettings. Dans cette section, on rajoute le nom du custom tag dans le tableau AvailableCustomTags. On peut décider si la nouvelle balise ajoutée est une balise à afficher en tant que block, ou en tant que ligne, grâce au tableau Inline. Voici un exemple pour configurer une balise acronym dans Online Editor :

[CustomTagSettings]
AvailableCustomTags[]=acronym
Inline[acronym]=true

Pour rajouter des attributs personnalisés à la classe, on crée une section avec le nom du custom tag, ou on ajoute un tableau CustomAttributes. On rajoute ensuite les différents attributs.

[acronym]
CustomAttributes[]
CustomAttributes[]=title

Notre custom tag acronym contient donc un attribut "title". Il ne reste plus qu'à créer un template pour pouvoir l'afficher correctement.

Le chemin par défaut pour créer le template d'un custom tag est :
templates/content/datatype/view/ezxmltags/nom_du_tag.tpl.

Dans notre exemple ce serait :
templates/content/datatype/view/ezxmltags/acronym.tpl

Il suffit d'écrire le code HTML allant avec le custom tag. Le contenu principal est représenté par la variable $content. Pour les attributs personnalisés, il suffit de rajouter un $ devant pour avoir la valeur de l'attribut. Toujours pour l'exemple de l'acronym, voici le contenu du template :

<<a href="http://december.com/html/4/element/acronym.html">acronym title="{$title}">{$content}<<span style="color: #66cc66;">/acronym>

Vous pouvez désormais rajouter tous les customs tags que vous désirez :

Quelques articles intéréssants sur Online Editor :

Publié par Frédéric David le

Frédéric David : Collecter des informations sous eZ publish

eZ publish nous offre la possibilité d'ajouter des formulaires, permettant de collecter des informations. Voici quelques informations sur les collecteurs d'informations(information collector) dans eZ publish , et comment les utiliser.

Les champs collecteur d'informations

eZ publish nous propose un nombre de type de données très suffisant, mais seuls certains de ces champs permettent de récupérer des informations. Ces types sont :

  • Case à cocher
  • E-Mail
  • Option
  • Ligne de texte
  • Bloc de texte

Avec ces 5 champs, on peut répondre à tous les besoins pour collecter les informations. On retrouve en général les mêmes types de champs dans tout les formulaires sur Internet.

Pour créer un collecteur d'information, il suffit de rajouter les champs supplémentaires à votre classe, et de choisir collecteur d'informations.

Comme exemple, voici la procédure pour créer une page de contact. Pour commencer, créons une nouvelle classe. Je mets en général pour une page, un champs nom de type ligne de texte, et d'un bloc xml, me permettant de faire une description de la page. Pour un formulaire de contact, 3 champs sont utilisés. Il faut le nom de l'expéditeur, l'email de l'expéditeur, ainsi qu'un champ permettant de récupérer le message. Pour cela, nous allons rajouter 3 champs, un champs ligne de texte, un champs email et un champs bloc de texte. Voici ce que vous devriez avoir à la fin de l'opération :

Une fois la classe validée, Il nous faut l'intégrer au site.

Template pour collecter des informations

Pour mettre en page un formulaire collecteur d'informations, il y a quelques lignes de code obligatoire à mettre dans votre template. Pour afficher simplement nos champs "collecteur d'information", on utilise la fonction attribute_view_gui , qui va nous permettre de nous simplifier la vie.

Après avoir afficher nos trois champs, il faut rajouter les différentes informations nécéssaires à eZ publish . La première chose est d'entourer nos trois champs par un formulaire. Ce formulaire renvoie vers la page "content/action". Pour qu'eZ publish sache relier les informations collectées au bon objet, il faut rajouter deux champs cachés, l'identifiant de l'objet, ainsi que l'identifiant du node. Il ne nous reste plus qu'à créer un champs "submit" pour publier les informations. Ce champ doit avoir comme nom ActionCollectInformation, pour spécifier correctement le type de traitement que eZ publish doit exécuter sur le formulaire.

On se retrouve à la fin avec le code suivant :

{'content/action'|ezurl}> {attribute_view_gui attribute=$node.data_map.contact_nom} {attribute_view_gui attribute=$node.data_map.contact_email} {attribute_view_gui attribute=$node.data_map.contact_message} {$node.node_id}" type="hidden"> {$node.node_id}" type="hidden"> {$node.object.id}" type="hidden">

Les visiteurs peuvent désormais vous laisser un message. Pour voir les différentes informations collectées, il faut aller dans Administration > Informations recueillies. Vous y retrouverez tous vos formulaires de contact.

Comment récupérer les informations récupérées dans eZ publish

eZ publish fournit 3 fonctions, nous permettant de manipuler les collections d'information, pour les afficher dans un template. Les trois fonctions sont :

  • collected_info_collection
  • collected_info_count
  • collected_info_count_list

Les fonctions qui sont les plus intéréssantes sont les deux premières fonctions.La fonction collected_info_count nous permet de récupérer le nombre d'informations collectées (le nombre de fois que le formulaire a été validé). La fonction collected_info_collection permet de récupérer les informations pour un collecteur d'information spécifique.

Voici un exemple d'un template permettant de lister les informations récupérées dans un template :
 

{def $collection_count = fetch(content, collected_info_count, hash(object_id, $node.object.id))}
{for 1 to $collection_count as $counter}
{def $collection = fetch(content, collected_info_collection, hash(collection_id, $counter, contentobject_id, $node.object.id))}

{$collection.data_map.votre_attribut.data_text} {undef $collection} {/for} {undef $collection_count}

 
Avec ce système, on peut afficher directement les informations liées sans devoir cliquer sur chaque formulaire envoyé par l'utilisateur final.

Publié par Frédéric David le