Détail du message 14722.24
Message numéro 24 dans le sujet Mise en place Boutique.
-
14722.24 en réponse à 14722.23 écrit par Steven Hartz
13/08/2010 11:32
Bonjour,
comme tout autre contenu, il faut passer par un bloc qui prend cela en charge. A ma connaissance il n'y a pas de bloc standard simple permettant au rédacteur de page d'insérer n'importe quel code HTML dans une page, pour raison de "sécurité" essentiellement : il est trop facile d'insérer un code qui casse une page (au sens de la DTD) sans que l'on s'en rende trop compte si on n'est pas soit même spécialiste HTML / javascript.
Pour les vidéos youtube, dailymotion, .. le module vidéos propose par exemple un bloc permettant d'insérer le markup HTML complet à partir de l'identifiant de la vidéo : c'est plus "sûr" que l'insertion directe de la balise objet.
Ce bloc est cependant assez simple à réaliser :
Si vous n'avez pas déjà votre propre module, créez le (ici module simple):changedev.php add-module simple folder
Puis créez le bloc xhtml :changedev.php add-block simple xhtml --no-tag
Ce bloc aura essentiellement un paramètre, le contenu xhtml à restituer. Dans modules/simple/config/blocks.xml :<?xml version="1.0" encoding="utf-8"?> <blocks> <block type="modules_simple_Xhtml" icon="" label="&modules.simple.bo.blocks.xhtml.Title;"> <parameters> <parameter name="xhtml" type="LongString" min-occurs="1" /> </parameters> </block> </blocks>
Pour enregistrer tout ça :change.php compile-blocks
Puis dans modules/simple/templates/Simple-Block-Xhtml-Success.all.all.html :<tal:block tal:replace="configuration/getXhtml" />
Ou plus directement, dans modules/simple/lib/blocks/BlockXhtmlAction.class.php pour éviter de passer par l'évaluation d'un gabarit PHPTal (ici sans valeur ajoutée) :<?php /** * simple_BlockXhtmlAction * @package modules.simple.lib.blocks */ class simple_BlockXhtmlAction extends website_BlockAction { /** * @see website_BlockAction::execute() * * @param f_mvc_Request $request * @param f_mvc_Response $response * @return String */ function execute($request, $response) { echo $this->getConfiguration()->getXhtml(); } }
Pour finir et pour permettre une visualisation non intrusive du contenu saisi dans l'éditeur de page, je rajouterais :class simple_BlockXhtmlAction extends website_BlockAction { /** * @see website_BlockAction::execute() * * @param f_mvc_Request $request * @param f_mvc_Response $response * @return String */ function execute($request, $response) { if ($this->isInBackoffice()) { echo htmlentities($this->getConfiguration()->getXhtml()) ; } else { echo $this->getConfiguration()->getXhtml(); } } }
Voilà, le bloc "xhtml" du module simple permet d'insérer n'importe quel code dans la page, sans aucun filtre ; pour améliorer ce bloc, on pourrait rajouter un petit bout de code qui vérifie la forme du contenu saisi.
PS : pour plus d'info sur les modules, vous pouvez consulter http://www.rbschange.....odule-annuaire,3720/