Supprimez le bloc statique ou le widget de bannière via la mise à jour de la mise en page personnalisée

magento.stackexchange https://magento.stackexchange.com//questions/52081

Question

Toutes les pages de catégories de produits de notre magasin sont au format deux colonnes (nav à gauche).L'une de nos catégories doit avoir un élément supprimé dans la colonne de gauche.Toutes les autres pages comportant cette colonne de gauche contiennent cet élément et doivent continuer à le faire, à l'exception de ces quelques sous-catégories mineures.

Le développeur précédent l'avait configuré pour que l'élément soit dans une bannière et positionné avec un widget via le CMS.Il est configuré pour apparaître sur une tonne de pages différentes (par exemple :Catégories est défini sur Tous), et nous souhaitons le conserver ainsi afin de ne pas avoir à ajouter de nouvelles catégories à une liste spécifique au fur et à mesure que de nouvelles catégories sont créées par les chefs de produit, etc.

Je n'ai pas trouvé de moyen de supprimer les bannières ni les widgets d'une catégorie spécifique. J'ai donc recréé la bannière sous forme de bloc statique, dans l'intention d'utiliser la mise à jour de la mise en page personnalisée pour la supprimer de son nom.

<reference name="left">
<remove name="my_static_block_id"></remove>
</reference> 

Cela ne fonctionne pas!

J'ai aussi essayé unsetChildren :

<action method="unsetChildren"/>

Cela a tout supprimé de la colonne de gauche (pas souhaitable)

Existe-t-il un moyen de procéder ?Peut-être que je n'ai pas regardé quelque part ?Merci.

Était-ce utile?

La solution

Donc, ce que vous essayez de réaliser est difficile en raison de la façon dont les widgets sont ajoutés à la page, lorsqu'un widget est enregistré, sa mise à jour XML de mise en page est automatiquement générée CEPENDANT, le nom généré n'est qu'un hachage aléatoire généré dans le fichier ci-dessous.

Mage_Widget_Model_Widget_Instance ::generateLayoutUpdateXml

$hash = Mage::helper('core')->uniqHash();
$xml .= '<block type="' . $this->getType() . '" name="' . $hash . '"' . $template . '>';

Ceci est ensuite enregistré dans la base de données, par exemple dans mon cas, le nom aléatoire était 9d10a0d6931d18586a907b201633d878, ce que vous pouvez voir dans l'image ci-dessous.

enter image description here

Ainsi, même si ce n'est probablement pas très pratique de le faire en théorie, il existe un moyen de le faire sans toucher à aucun code, vous pouvez créer le widget de recherche pour l'enregistrement de mise à jour dans la table de la base de données. core_layout_update récupérez votre nouveau nom de bloc et faites ensuite par exemple <remove name="9d10a0d6931d18586a907b201633d878"/> Cependant, si vous apportez une modification au widget, le XML et le nom seront actualisés et vous devrez à nouveau mettre à jour les références de nom.J'ai essayé unsetChild et cela n'a pas semblé fonctionner. Je suppose que cela est dû à l'ordre dans lequel le XML est traité pour les widgets.

Je pense que vous avez deux vraies options :

1) Ajoutez une nouvelle liste de textes à la colonne de gauche, à la colonne de droite ou à tout autre endroit où vous souhaitez ajouter des widgets, puis supprimez-les peut-être d'une page.Vous pouvez le faire dans vos thèmes local.xml comme ceci.

    <reference name="left">
<block type="core/text_list" name="widgets_left" as="widgets_left" translate="label">
                        <label>Widgets Left</label>
                    </block>
</reference>

Cela ajoutera une nouvelle option dans le backend comme dans l'image que vous pourrez ensuite ajouter des instances de widget également ou simplement supprimer si vous en avez besoin par nom car vous avez le nom widgets_left comme référence.

par exempleenter image description here

Vous pouvez ensuite effectuer l'une des opérations ci-dessous dans la catégorie spécifique dont vous souhaitez qu'ils soient supprimés :

<reference name="left">
<action method="unsetChild"><name>widgets_left</name></action>
</reference>

<remove name="widgets_left"/>

2) Alternativement, vous pouvez simplement les ajouter via XML comme ci-dessous, mais il me semble que vous voulez autant de contrôle que possible via le CMS et pourquoi pas, pour moi, les widgets sont sous-utilisés.

<reference name="left">
            <block type="cms/block" name="cms_left_block_name">
                <action method="setBlockId"><block_id>my_block_identifier_from_magento_backend</block_id></action>
            </block>
        </reference>

Vous aurez alors une référence fixe comme "cms_left_block_name" que vous pourrez utiliser pour effectuer une suppression ou un setChild.

Autres conseils

Vous êtes proche, vous devez connaître le nom du bloc ajouté et le nom de son parent.

Par exemple, un bloc ajouté au bloc parent "laissé" comme suit:

<reference name="left">
    <block type="cms/block" name="my_block_name">
         <action method="setBlockId"><block_id>some_static_block_identifier</block_id></action>
    </block>
</reference>

serait supprimé comme suit:

<reference name="left">
    <action method="unsetChild"><child>my_block_name</child></action>
</reference>

Licencié sous: CC-BY-SA avec attribution
Non affilié à magento.stackexchange
scroll top