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


    Alexandre Simon
    Titre : Développeur RBS Change
    Rang : Expert
    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="&amp;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/
 
1377 membres
Aucun membre connecté