Développer avec RBS Change : phptal créer sa propre extension change
-
11/08/2014 09:36
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 -
06/10/2015 09:22
Bonjour,
pas plus d'informations sur le sujet?
Je tente pour ma part d'ajouter un type de message. Il existe change:errors et change:messages, je voudrais ajouter un change:informations.
Mais pour l'instant je me heurte toujours à l'erreur Exception: PHPTAL_Dom_Parser error: Unsupported attribute 'change:informations'
Merci
Fred -
83996.3 en réponse à 83996.2 écrit par farijs@wink.be
16/10/2015 11:56
Bonjour @farijs,
tout d'abord, êtes-vous certain d'être dans le même cas que le post précédent ?
D'après le message d'erreur j'aurais tendance à dire que votre extension n'est pas enregistrée.
Avec-vous pensé à exécuter la commandephp framework/bin/change.php compile-phptal
?
suite à cette exécution avez-vous vérifié que vous aviez bien une (nouvelle) ligne
<modulename>_PHPTAL_CHANGE::addAttributes($namespaceCHANGE);
dans le fichier
WEBEDIT_HOME .'/build/<profile>/PHPTAL_change.php' ?
<modulename>_PHPTAL_CHANGE étant la classe que vous avez créée pour votre extension.
"La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information"
Albert Einstein -
83996.4 en réponse à 83996.3 écrit par Georges Njock-Bôt
22/10/2015 11:26
Bonjour,
merci pour ces informations.
Il est vrai que je ne suis pas sûr que ce soit exactement le même cas.
Au final, il semble que j'avais surtout des problèmes de compilation. Après de nombreuses compilation, vidé le cache, cela a fini par fonctionner.
Merci
Fred -
83996.5 en réponse à 83996.3 écrit par Georges Njock-Bôt
15/11/2015 15:49
Georges Njock-Bôt a dit :
Bonjour @farijs,
tout d'abord, êtes-vous certain d'être dans le même cas que le post précédent ?
D'après le message d'erreur j'aurais tendance à dire que votre extension n'est pas enregistrée.
Avec-vous pensé à exécuter la commandephp framework/bin/change.php compile-phptal
?
suite à cette exécution avez-vous vérifié que vous aviez bien une (nouvelle) ligne
<modulename>_PHPTAL_CHANGE::addAttributes($namespaceCHANGE);
dans le fichier
WEBEDIT_HOME .'/build/<profile>/PHPTAL_change.php' ?
<modulename>_PHPTAL_CHANGE étant la classe que vous avez créée pour votre extension.
Salut à tous!
Je me nommes Ken et je reviens d' un séjour prolongé en Allemagne, à l' occasion d' un échange entre entreprises de plomberie européen. Ainsi, j' ai représenté les plombiers lors d' une sorte de conférence sur le réchauffement climatique...très honoré de cette honneur.
Merci de prendre connaissance et de respecter les règles des forums.