Détail du message 83996.1

Message numéro 1 dans le sujet phptal créer sa propre extension change.

  • 83996.1

    11/08/2014 09:36


    laurent89
    Rang : Membre
    Bonjour à tous,

    je désire créer une extension change:monextension. Due au manque d'information sur le wiki et de la façon de comment je pourrais implémenter cela. Je suis donc bloqué. (je précise j'utilise la version 3.6.8 de rbs)

    Ce que j'ai compris c'est qu'il faut définir dans le module que je souhaite un répertoire phptal dans le répertoire lib.

    En suite créer la classe PHPTAL_CHANGE.class.php
    et placer ceci dans la classe

    	/**
    	 * @param PHPTAL_Namespace_CHANGE $namespaceCHANGE
    	 */
    	public static function addAttributes($namespaceCHANGE)
    	{
            LoggingService::getInstance()->namedLog("test phptal 1","phptal");
    		$namespaceCHANGE->addAttribute(new PHPTAL_NamespaceAttributeSurround('monextension', 3));
    	}
    


    Créer une classe php : monextension.php

    <?php
    // change:monextension
    
    /**
     * @package monmodule.lib.phptal
     */
    class PHPTAL_Php_Attribute_CHANGE_monextension extends ChangeTalAttribute 
    {
    	/**
    	 * @see ChangeTalAttribute::getEvaluatedParameters()
    	 * @return array
    	 */
    	public function getEvaluatedParameters()
    	{
    		return array('token', 'size', 'name');
    	}
    
        /**
         * @see ChangeTalAttribute::evaluateAll()
         *
         * @return Boolean
         */
        protected function evaluateAll()
        {
            return true;
        }
    
    	/**
    	 * @see ChangeTalAttribute::start()
    	 */
    	public function start()
    	{
            LoggingService::getInstance()->namedLog("test phptal 2","phptal");
            $this->initParams();
            $this->getEvaluatedParameters();
    //        var_dump($this->expression);
            $expressions = $this->tag->generator->splitExpression($this->expression);
            //var_dump($expressions);
            $name = null;
            $token = null;
            $urlattribute = 'src';
            $sizeValue = "210x189";
    
            // foreach attribute
            foreach ($expressions as $exp)
            {
                list($attribute, $value) = $this->parseSetExpression($exp);
                var_dump($value);
                switch ($attribute)
                {
                    case 'size':
                        if ($size ='small') $sizeValue = "210x189";
                        if ($size ='medium') $sizeValue = "300x270";
                        break;
                    case 'token':
                        $token = $this->evaluate($value);
                        break;
                }
            }
            var_dump($token); die();
            /*
           $this->tag->attributes[$urlattribute] = '<?php echo PHPTAL_Php_Attribute_CHANGE_monextension:render('.$token.','.$sizeValue.') ?>';
    */
    	}
    
        public function end()
        {
        }
    
        public static function render($product, $sizeValue)
        {
            var_dump($product); var_dump($sizeValue); die();
    //            $configMediaUrl = Framework::getConfigurationValue('modules/monmodule/config/mediaUrl', false);
    //            LoggingService::getInstance()->namedLog($configMediaUrl,"phptal");
    //            if(!empty($configMediaUrl)){
    //                $code = $configMediaUrl.'/'.$product.getVisual().'/'.$sizeValue.'/image.jpg';
    //                LoggingService::getInstance()->namedLog($code,"phptal");
    //
    //                return $code;
    //            }
        }
    
        public function evaluate($exp, $stripQuotes = false)
        {
            $exp = trim(strval($exp));
            $end = strlen($exp) - 1;
            if (is_numeric($exp) || ($exp[0] == "'" && $exp[$end] == "'") ||
                ($exp[0] == '"' && $exp[$end] == '"'))
            {
                // Static value
                return $exp;
            }
            else
            {
                return $this->tag->generator->evaluateExpression($exp);
            }
        }
    
    
    }
    


    Ce que je met dans mon template d'un block :
                    <tal:block tal:define="tokenProduct php: product->getVisual()->getValue()" tal:condition="tokenProduct">
                        <img change:comparioimage="token tokenProduct;size 'small';name 'test'"/>
                    </tal:block>
    


    Ce que j'ai aussi compris c'est que quand on met des quotes sur une valeur alors elle ne sera pas évalué et donc on prendra le string (exemple : test on récupèrera test).
    Toutefois mon tokenProduct lui est une variable contenant une valeur et ce dernier n'est jamais évalué :(. Je récupère toujours un String : tokenProduct

    Bref, je n'ai aucun résultat !

    De plus, j'aimerais savoir comment on pourrait transmettre à cette extension un objet ou une valeur.

    J'aimerais également comprendre à quoi correspond la variable $ctx (context) mais une fois que l'on est passé dans le evaluateExpression().

    exemple :
    $ctx->tokenProduct


    Voilà si on sait me donner des exemples qui marchent.

    L'objectif étend d'avoir une pour la balise image dans ce cas-ci

    <img href="monUrl/tokenProduct" alt="" />


    Je vous remercie d'avance pour votre aide,
    Laurent
 
1471 membres
Aucun membre connecté