THELIA Forum

Welcome to the THELIA support and discusssion forum

Announcement

Rejoignez la communauté sur le Discord Thelia : https://discord.gg/YgwpYEE3y3

Offline


T'inquiète pas Nog je te tiens au courant... je fais juste 15 000 choses en même temps ^^'


Aide les autres, ils t'aideront en retour.

Offline


Bon bah je viens de tester et ça change rien...


Aide les autres, ils t'aideront en retour.

Offline


Elyos wrote:

Bon bah je viens de tester et ça change rien...

Je viens d'installer ma version "édulcorée" du plugin sur un de mes sites, le tag affiche bien le résultat attendu...

Offline


hum...


Aide les autres, ils t'aideront en retour.

Offline

Offline


roadster31 wrote:

hum hum...

lol lol lol

en tout cas ça remplace bien {$restrictedDeliveryExcludedDelivery} par "RIEN" ... ^^"


Aide les autres, ils t'aideront en retour.

Offline


Je remets le code ici du coup :

config.xml

<?xml version="1.0" encoding="UTF-8" ?>

<config xmlns="http://thelia.net/schema/dic/config"
		xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
		xsi:schemaLocation="http://thelia.net/schema/dic/config http://thelia.net/schema/dic/config/thelia-1.0.xsd">

	<loops>
		<loop name="restricted_delivery.get" class="RestrictedDelivery\Loop\RestrictedDeliveryLoop" />
	</loops>
	<services>
		<service id="restricted_delivery.exclude_delivery.smarty.plugin" class="RestrictedDelivery\Smarty\Plugins\RestrictedDeliveryExcludeDelivery" scope="request">
			<tag name="thelia.parser.register_plugin" />
		</service>
	</services>
</config>

modules/RestrictedDelivery/Smarty/Plugins/RestrictedDeliveryExcludeDelivery.php

<?php

namespace RestrictedDelivery\Smarty\Plugins;


use TheliaSmarty\Template\AbstractSmartyPlugin;
use TheliaSmarty\Template\SmartyPluginDescriptor;

class RestrictedDeliveryExcludeDelivery extends AbstractSmartyPlugin
{
    public function getPluginDescriptors()
    {
        return array(
            new SmartyPluginDescriptor("function", "restrictedDeliveryExcludeDelivery", $this, "restrictedDeliveryExcludeDelivery"),
        );
    }

    
	/**
     * @param $params
     * @param $smarty
     */
    public function restrictedDeliveryExcludeDelivery($params, $smarty)
    {
		//$cart = $this->getRequest()->getSession()->getSessionCart($this->dispatcher);
		//$smarty->assign('restrictedDeliveryExcludedDelivery', "prout");
		//echo 'prout';
		return 'bingo!';
    }

}

layout.tpl

{$restrictedDeliveryExcludedDelivery}

Aide les autres, ils t'aideront en retour.

Offline


Et dans le cache j'ai

<!-- <?php echo TheliaSmarty\Template\SmartyParser::theliaEscape($_smarty_tpl->tpl_vars['restrictedDeliveryExcludedDelivery']->value,$_smarty_tpl);?>

Aide les autres, ils t'aideront en retour.

Offline


Hello

J'ai recréer un module from scratch à partir de ton code (il manque le module.xml :-))

Dans ton template : cette notation

{$restrictedDeliveryExcludedDelivery}

sert à affiché une variable. Comme je suppose qu'elle n'est pas initialisée ailleurs, du coup RIEN ne s'affiche ^ ^
Si dans le template tu utilises cette notation

{restrictedDeliveryExcludedDelivery}

tu tombes alors sur le message suivant

{restrictedDeliveryExcludedDelivery}</div>" unknown tag 'restrictedDeliveryExcludedDelivery' <-- thrown in /Applications/MAMP/htdocs/ferm...

Le code suivant est bel et bien opérationnel (après avoir activer le module dans l'admin et vider le cache

php Thelia cache:clear --env=prod

Code du module

php Thelia module:generate RestrictedDelivery

modules/RestrictedDelivery/Config/module.xml

<?xml version="1.0" encoding="UTF-8"?>
<module xmlns="http://thelia.net/schema/dic/module"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://thelia.net/schema/dic/module http://thelia.net/schema/dic/module/module-2_2.xsd">
    <fullnamespace>RestrictedDelivery\RestrictedDelivery</fullnamespace>
    <descriptive locale="en_US">
        <title>Debug version of RestrictedDeliveryExcludeDelivery</title>

    </descriptive>
    <descriptive locale="fr_FR">
        <title>Debug version of RestrictedDeliveryExcludeDelivery</title>
    </descriptive>
    <languages>
        <language>en_US</language>
        <language>fr_FR</language>
    </languages>
    <version></version>
    <authors>
        <author>
            <name></name>
            <email></email>
        </author>
    </authors>
    <type>classic</type>
    <thelia>2.4.0</thelia>
    <stability>other</stability>
    <mandatory>0</mandatory>
    <hidden>0</hidden>
</module>

modules/RestrictedDelivery/Config/config.xml

<?xml version="1.0" encoding="UTF-8" ?>

<config xmlns="http://thelia.net/schema/dic/config"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://thelia.net/schema/dic/config http://thelia.net/schema/dic/config/thelia-1.0.xsd">

    <loops>
        <loop name="restricted_delivery.get" class="RestrictedDelivery\Loop\RestrictedDeliveryLoop" />
    </loops>
    
    <services>
        <service id="restricted_delivery.exclude_delivery.smarty.plugin" class="RestrictedDelivery\Smarty\Plugins\RestrictedDeliveryExcludeDelivery" scope="request">
            <tag name="thelia.parser.register_plugin" />
        </service>
    </services>
</config>

modules/RestrictedDelivery/Smarty/Plugins/RestrictedDeliveryExcludeDelivery.php

<?php

namespace RestrictedDelivery\Smarty\Plugins;


use TheliaSmarty\Template\AbstractSmartyPlugin;
use TheliaSmarty\Template\SmartyPluginDescriptor;

class RestrictedDeliveryExcludeDelivery extends AbstractSmartyPlugin
{
    public function getPluginDescriptors()
    {
        return array(
            new SmartyPluginDescriptor("function", "restrictedDeliveryExcludeDelivery", $this, "restrictedDeliveryExcludeDelivery"),
        );
    }

    
    /**
     * @param $params
     * @param $smarty
     */
    public function restrictedDeliveryExcludeDelivery($params, $smarty)
    {
        return 'Affiché par {restrictedDeliveryExcludeDelivery}';
    }

}

Offline


Bon bah ça fonctionne.

J'ai donc tout remis comme j'avais au tout début... vérifier mes noms etc

ET je viens de comprendre comment fonctionne les "assignations" dans le plugin chronopost!!!

Si je mets dans mon template :

{restrictedDeliveryExcludeDelivery}
{$restrictedDeliveryExcludedDelivery}

et dans mon module

/**
     * @return array|SmartyPluginDescriptor[]
     */
    public function getPluginDescriptors()
    {
        return array(
            new SmartyPluginDescriptor("function", "restrictedDeliveryExcludeDelivery", $this, "restrictedDeliveryExcludeDelivery"),
        );
    }

    
	/**
     * @param $params
     * @param $smarty
     */
    public function restrictedDeliveryExcludeDelivery($params, $smarty)
    {
		$smarty->assign('restrictedDeliveryExcludedDelivery', "assign");
    }

J'obtiens bien "assign".

{restrictedDeliveryExcludeDelivery}

Appelle la fonction "restrictedDeliveryExcludeDelivery"
qui assign des valeurs à des variables restrictedDeliveryExcludedDelivery =>  "assign"

et

{$restrictedDeliveryExcludedDelivery}

récupère bien la variable!


Pfiouuuuuuuuuuuuuu! Donc en fait depuis le début c'était bon ce que j'avais fait juste que :
- j'écrivais mal {restrictedDeliveryExcludeDelivery}
- j'oubliais d'appeler {restrictedDeliveryExcludeDelivery} avant {$restrictedDeliveryExcludedDelivery}


Un grand merci Nog !!!

Reste à finaliser.. parcourir le panier... checker les règles... bla bla bla ^^'


Aide les autres, ils t'aideront en retour.

Offline


On a donc OBLIGATION d'appeler une fonction AVANT d'appeler les variables dans les templates (ou je me trompe ?)

Last edited by Elyos (11-06-2021 10:12:48)


Aide les autres, ils t'aideront en retour.

Offline


Elyos wrote:

On a donc OBLIGATION d'appeler une fonction AVANT d'appeler les variables dans les templates (ou je me trompe ?)

dans ton cas d'utilisation en effet. Cela dit ce n'est pas nécessaire si tu effectues ton affichage en une fois au lieu de deux comme tu le fais.
Je m'explique : si ton objectif est d'afficher un texte, tu peux le faire directement via le retour de ta fonction, pas besoin dans la fonction d'assigner la valeur pour ensuite en disposer dans une variable.

Si tu veux afficher "TOTO" via le tag Smarty {affiche_toto} dans ton template défini plûtot ton plugin comme suit :

/**
     * @return array|SmartyPluginDescriptor[]
     */
    public function getPluginDescriptors()
    {
        return array(
            new SmartyPluginDescriptor("function", "affiche_toto", $this, "restrictedDeliveryExcludeDelivery"),
        );
    }

    
	/**
     * @param $params
     * @param $smarty
     */
    public function restrictedDeliveryExcludeDelivery($params, $smarty)
    {
		// $smarty->assign('restrictedDeliveryExcludedDelivery', "assign");
		return 'TOTO';
    }

de cette façon tu n'a plus besoin d'écrire

{restrictedDeliveryExcludeDelivery}
{$restrictedDeliveryExcludedDelivery}

mais uniquement

{affiche_toto}

En utilisant la convention de nomage des tag Smarty {nom_du_tag param1="foo" param2="bar"} tu aurais évité la confusion {restrictedDeliveryExcludeDelivery}/{$restrictedDeliveryExcludedDelivery} je pense.

Je ne sais plus qui a dit en programmation il y a 2 choses de vraiment compliqué :
1/ savoir comment nommer une variable
2/ savoir quand vider le cache

Non ce n'est pas Roadster ;-) (pour il faut TOUT le temps vider le cache !!)

Last edited by Nog (11-06-2021 13:47:40)

Offline


Mais ! Dès qu'il se passe quelque chose de bizarre, il faut commencer par vider le cache, et on voit.


OpenStudio Toulouse

Offline


roadster31 wrote:

Mais ! Dès qu'il se passe quelque chose de bizarre, il faut commencer par vider le cache, et on voit.

C'est pas faux lol !

Offline


Ah ah!

Je fais que ça vider le cache...

D'ailleurs là maintenant... j'avais désactivé un plugin de livraison (qui fonctionnait) le temps de faire mes tests et là je le ré-active et HOP une erreur...

Cannot fetch TableMap for undefined table phpName: \MyCustomDelivery\Model\MyCustomDeliveryFreeshipping.

Pourtant :
1/ ça fonctionnait
2/ Tout est bien nommé et existant

in DatabaseMap.php line 217
at DatabaseMap->getTableByPhpName('\MyCustomDelivery\Model\MyCustomDeliveryFreeshipping') in BaseModelCriteria.php line 144
at BaseModelCriteria->setModelName('\MyCustomDelivery\Model\MyCustomDeliveryFreeshipping') in BaseModelCriteria.php line 40
at BaseModelCriteria->__construct('thelia', '\MyCustomDelivery\Model\MyCustomDeliveryFreeshipping', null) in MyCustomDeliveryFreeshippingQuery.php line 66
at MyCustomDeliveryFreeshippingQuery->__construct() in MyCustomDeliveryFreeshippingQuery.php line 82
at MyCustomDeliveryFreeshippingQuery::create() in MyCustomDeliveryFreeshippingLoop.php line 73
at MyCustomDeliveryFreeshippingLoop->buildModelCriteria() in BaseLoop.php line 515
at BaseLoop->exec(null) in TheliaLoop.php line 174
at TheliaLoop->theliaLoop(array('type' => 'my-custom-delivery-freeshipping', 'name' => 'area_freeshipping', 'area_id' => '1'), null, object(Smarty_Internal_Template), true) in 73367b743431f1db69c20fd057c3a1b5bdeb1637_0.file.configuration.html.php line 196

Last edited by Elyos (14-06-2021 09:33:27)


Aide les autres, ils t'aideront en retour.

Offline


Je viens de voir que dans /thelia/cache/propel/model

J'ai des dossiers Base, Map et Event contenant mes fichiers correspondant à MyCustomDeliveryFreeshipping

Doit y avoir un souci de copié/collé... problème de chemin quelque part ?

Last edited by Elyos (14-06-2021 09:54:12)


Aide les autres, ils t'aideront en retour.

Offline


Bon bah j'avais oublié 

namespace="MyCustomDelivery\Model">

dans mon schema... '-_-


Aide les autres, ils t'aideront en retour.