Bienvenue, Invité
Merci de vous identifier ou de vous inscrire.    Mot de passe perdu?

Suppression et ajout de block de maniere conditionel
(1 lecteur(s)) (1) Invité(s)
Aller en basPage: 1
SUJET:

Suppression et ajout de block de maniere conditionel

#48687
nanowitch
Junior Boarder
Messages: 21
graphgraph
Personne n'est hors ligne Cliquez ici pour voir le profil de cet utilisateur

Suppression et ajout de block de maniere conditionel

Il y a 6 Années, 11 Mois
Karma: 0  
Bonjour, je cherche a remplacer un block par un autre en fonction d'un paramètre de configuration.

Pour la suppression, pas vraiment de problème directement dans le layout
Code :


<reference name="content">
  <action method="unsetChild" ifconfig="mon/parametre/de/config">
    <name>mon_bloc_a_supprimer</name>
  </action>
</reference>



Par contre dans le controller
Code :


$this->loadLayout();
$this->getLayout()->getBlock('content')->unsetChild();
$this->renderLayout();


ne supprime rien du tout

Pour l'ajout d'un nouveau block dans le layout
Code :


<reference name="content">
  <action method="append" ifconfig="mon/parametre/de/config">
    <block>package/mon_block</block>
    <template>mon/template.phtml</template>
  </action>
</reference>


n'a aucun effet, idem dans le controller
Code :


$this->loadLayout();
$this->getLayout()->getBlock('content')->append(
    $this->getLayout()->createBlock('package/mon_block')
);
$this->renderLayout();



Merci de votre aide et de vos éclaircissements
Arnaud
 
L'administrateur a désactivé l'accès public en écriture.
#48703
nanowitch
Junior Boarder
Messages: 21
graphgraph
Personne n'est hors ligne Cliquez ici pour voir le profil de cet utilisateur

Re:Suppression et ajout de block de maniere conditionel

Il y a 6 Années, 11 Mois
Karma: 0  
J'avance un peu (merci a nico et greg)

Dans la fonction unsetChild controller, il faut ajouter le nom du block a supprimer
Code :


$this->loadLayout();
$this->getLayout()->getBlock('content')->unsetChild('mon_block_a_supprimer');
$this->renderLayout();


ou pour supprimer tous les blocks
Code :


$this->loadLayout();
$this->getLayout()->getBlock('content')->unsetChildren();
$this->renderLayout();



Par contre, pour la création de block, toujours le même problème
 
L'administrateur a désactivé l'accès public en écriture.
#48735
seb.lepers
Expert Boarder
Messages: 135
graphgraph
Personne n'est hors ligne Cliquez ici pour voir le profil de cet utilisateur
Sexe: Masculin Meliweb, expertise Magento Lieu: Paris, France

Re:Suppression et ajout de block de maniere conditionel

Il y a 6 Années, 11 Mois
Karma: 7  
Pour la création de block, voici comment il faut s'y prendre (testé sous v1.5.0.1).

Dans le layout :
Code :


        <reference name="content">
            <block type="core/template" name="test.myblock" template="test/test.phtml" />
            <action method="unsetChild">
                <name>test.myblock</name>
            </action>
            <action method="append" ifconfig="mon/parametre/de/config">
                <block>test.myblock</block>
            </action>
        </reference>


En gros, on crée le bloc, on le désaffecte de son block parent et on ne l'ajoute que si le paramètre de config est activé.

Pour le faire dans le controller, le code ci-dessous fonctionne :
Code :


        $this->loadLayout();
        if (Mage::getStoreConfig('mon/parametre/de/config')) {
            $myblock = $this->getLayout()->createBlock('core/template', 'test.myblock');
            $myblock->setTemplate('test/test.phtml');
            $this->getLayout()->getBlock('content')->append($myblock);
        }
        $this->renderLayout();

 
Expertise et formation Magento : Meliweb & The e-Commerce Academy

Expert Magento @ The e-Commerce Academy

L'administrateur a désactivé l'accès public en écriture.
#48740
nanowitch
Junior Boarder
Messages: 21
graphgraph
Personne n'est hors ligne Cliquez ici pour voir le profil de cet utilisateur

Re:Suppression et ajout de block de maniere conditionel

Il y a 6 Années, 11 Mois
Karma: 0  
Super, je vais tester de suite

Par contre ta remarque me fait poser une question
En gros, on crée le bloc, on le désaffecte de son bloc parent

Je viens de faire quelques tests. Si je desaffecte, mon bloc est quand même instancié, du coup en terme de perf c'est pas terrible !!

Si je suis mon raisonnement, le mieux pour les performances de mon site sera de créer ce bloc dans le controller.

Mais quand est-il des bonnes pratiques sous Magento ? Comment le ferai-tu, dans le controller ou dans les xml ?

Merci de aide et de tes éclaircissements
Arnaud
 
L'administrateur a désactivé l'accès public en écriture.
#48795
seb.lepers
Expert Boarder
Messages: 135
graphgraph
Personne n'est hors ligne Cliquez ici pour voir le profil de cet utilisateur
Sexe: Masculin Meliweb, expertise Magento Lieu: Paris, France

Re:Suppression et ajout de block de maniere conditionel

Il y a 6 Années, 11 Mois
Karma: 7  
Oui, ton raisonnement est bon.

En termes de bonnes pratiques, on n'arrivera pas vraiment à trancher dans ce cas particulier. Dans le cas où tu crées le block dans le controller, tu privilégies les performances, mais tu ne laisse pas la possibilité de gérer les blocks et templates dans le layout (donc tu perds un peu de l'intérêt du système de templating de Magento).
Et inversement. Donc ça va dépendre de ce que tu dois (ou souhaites) privilégier dans ton projet.
 
Expertise et formation Magento : Meliweb & The e-Commerce Academy

Expert Magento @ The e-Commerce Academy

L'administrateur a désactivé l'accès public en écriture.
#56507
etaunais
Junior Boarder
Messages: 39
graphgraph
Personne n'est hors ligne Cliquez ici pour voir le profil de cet utilisateur

Re:Suppression et ajout de block de maniere conditionel

Il y a 6 Années, 2 Mois
Karma: 1  
Bonjour,

J'ai du mal à savoir à quoi sert ifconfig?

Quelqu'un peut il m'aider?

Merci

Eric
 
Dernière édition: 01/02/12 à  07:05 Par etaunais.
L'administrateur a désactivé l'accès public en écriture.
Revenir en hautPage: 1
Modérateur: admin, Gabriiiel, ILOA, zuiko