Aller au contenu

Charles-Edouard Coste

Servir du vrai XHTML avec eZ publish

Il y a quelques temps, comme je m'intéressais au xhtml+rdfa  qui permet d'ajouter de la sémantique au code html, je suis tombé sur un article d'Alsacreations encore une fois très intéressant sur les doctypes xhtml : Comment bien déclarer du xhtml 1.0 et du xhtml 1.1

Cet article m'a ouvert les yeux car cela faisait un moment que je codais en XHTML avec la volonté que toutes mes pages soient du coup à la fois des pages web et des documents XML. Or après vérification, il est vrai que mes pages étaient servies avec le type MIME : text/html

Impossible donc de passer à des langages plus évolués comme le xhtml+rdfa ou de profiter des nouveautés du xhtml 1.1

Mais heureusement, une manipulation très simple dans eZ publish a changé tout ça...

Tous les jours, j'en apprends de nouvelles sur eZ publish et je découvre de nouvelles fonctionalités de paramétrage. Pour le problème du Content Type, je connaissais déjà le module layout, qui permet de rajouter de nouvelles mises en forme comme le fait Damien Pobel dans son article Des fils RSS sur mesure dans eZ Publish . Ce module permet de choisir un pagelayout personnalisé et d'indiquer le type du contenu. Cela permet de générer par exemple un fichier plutôt qu'une page web et d'indiquer au navigateur s'il s'agit d'un PDF, d'un fichier RDF, ou autre...

Seulement, le module layout, sert à fournir des alternatives au contenu par défaut. Or, c'est le content-type de ce contenu par défaut que je souhaitais changer. j'ai donc jeté un coup d'oeil au code et j'ai découvert une section du fichier site.ini que je ne n'avais vu qu'une fois auparavant lorsque j'ai suivi un tutoriel sur l'utilisation de Varnish avec eZ publish

Il s'agit de la section "HTTPHeaderSettings" . Cette section permet de customiser entièrement les en-têtes envoyées par le serveur.

Dans mon cas, je n'ai eu qu'à ajouter ceci au fichier site.ini.append.php de mon siteaccess publique :

[HTTPHeaderSettings]
CustomHeader=enabled
HeaderList[]
HeaderList[]=Content-Type
Content-Type[/]=application/xhtml+xml

On active les en-têtes personnalisées en mettant CustomHeader sur "enabled"
Ensuite, si l'on consulte le fichier site.ini, on peut se rendre compte que la liste HeaderList contient des valeurs par défaut: Cache-Control, Pragma, et Expires
Pour éviter tout problème, je préfère réinitialiser cette liste avant d'y ajouter "Content-Type", d'où le "HeaderList[]" tout seul.

Ensuite on donne la valeur que l'on souhaite lui donner, là en l'occurence, application/xhtml+xml

il faut cependant faire attention à la syntaxe (que vous pouvez retrouver dans le fichier site.ini par défaut) :

<HTTP header>[<eZ Publish path|module{/view}>]=<value>{;<depth>{;<level>}}

Celle-ci permet d'appliquer des en-têtes différentes à certaines pages de votre site, mais je n'ai pas eu le besoin de m'y intéresser plus que ça.

"Content-Type[/]" Permet d'appliquer le type de contenu sur tout mon site, c'est tout ce dont j'ai besoin à ce niveau là.

Voilà! C'est grâce à cette petite manipulation que vous accédez actuellement à un fichier XML et non plus une page web. Cela peut éventuellement poser des problèmes si vous êtes sous Internet Explorer 6 ou autre vieillerie propriétaire, mais bon... cela respecte les standards et je ne respecte pas les logiciels prioriétaires qui ne respectent pas les standards alors... who cares?

dimanche 08 août 2010

Charles-Edouard Coste

Commentaires