Rimuovere il blocco statico o il widget banner tramite l'aggiornamento del layout personalizzato

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

Domanda

Tutte le pagine della categoria Prodotto nel nostro negozio sono in formato due colonne (NAV SINISTRA). Una delle nostre categorie deve avere un elemento nella colonna di sinistra rimossa. Ogni singola pagina che ha questa colonna sinistra ha questo elemento in esso, e ha bisogno di continuare a farlo, ma per queste poche sottocategorie minori.

Lo sviluppatore precedente si è impostato in modo che l'elemento fosse in un banner e posizionato con un widget tramite il CMS. È impostato per presentarsi su una tonnellata di pagine diverse (ad esempio: le categorie sono impostate su tutti), e vogliamo tenerlo così in modo che non dobbiamo aggiungere nuove categorie a un elenco specifico come sono fatti nuovi dai gestori di prodotti e da whatnot.

Non riesco a trovare un modo per rimuovere i banner né i widget da una categoria specifica, quindi ho ricreato il banner come blocco statico, con l'intenzione di utilizzare l'aggiornamento del layout personalizzato per rimuoverlo con il suo nome.

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

Questo non funziona!

Ho anche provato annetchildren:

<action method="unsetChildren"/>
.

Questo ha rimosso tutto dalla colonna sinistra (non desiderabile)

C'è un modo per farlo? Forse da qualche parte non ho guardato? Grazie.

È stato utile?

Soluzione

Allora, quindi il tuo tentativo di raggiungere è difficile a causa del modo in cui i widget vengono aggiunti alla pagina, quando un widget viene salvato il suo aggiornamento XML Layout viene generato automaticamente il nome che viene generato è solo un hash casuale generato nel file qui sotto .

mage_widget_model_widget_instance :: generatelayoutupdatexml

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

Questo è quindi in seguito salvato nel database ad esempio nel mio caso il nome casuale era 9D10A0D6931D18586A907B201633D878 che puoi vedere è nell'immagine sottostante.

Inserire l'immagine Descrizione qui

Quindi, anche se probabilmente non è molto pratico farlo in teoria c'è un modo in cui potresti fare questo senza toccare alcun codice è possibile creare la ricerca del widget per il record di aggiornamento nella tabella del database core_layout_update Ottieni il tuo nuovo nome blocco e poi fare Ad esempio <remove name="9d10a0d6931d18586a907b201633d878"/>, tuttavia se si effettua qualsiasi modifica al widget, il XML e il nome si aggiorneranno e dovresti aggiornare nuovamente i riferimenti dei nomi. Ho provato l'annesso e che non sembrava funzionare il sospetto che sia dovuto all'ordine in cui viene elaborato XML per i widget.

Penso che tu abbia due opzioni reali:

1) Aggiungi un nuovo text_list alla colonna di sinistra, alla colonna di destra o in qualsiasi altro posto che vorresti aggiungere widget e poi Mabey rimuoverli su una pagina. Puoi farlo nei tuoi temi local.xml come questo.

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

Questo aggiungerà una nuova opzione nel backend come nell'immagine che è quindi possibile aggiungere anche le istanze di widget o semplicemente rimuovere se è necessario per nome poiché si ha il nome widgets_left come riferimento.

E.G Inserire l'immagine Descrizione qui

Puoi quindi fare sul seguito nella categoria specifica che ti piacerà rimossi da:

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

<remove name="widgets_left"/>
.

2) In alternativa potresti semplicemente aggiungerli in via XML come sotto, ma mi sembra che tu voglia tanto il controllo possibile tramite il CMS e perché non per i widget non sono sottoutilizzati. < / P >.

<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>
.

Avrai quindi un riferimento fisso come "cms_left_block_name" che è possibile utilizzare per eseguire un rimuovo o un nontchill.

Altri suggerimenti

Sei vicino, è necessario conoscere il nome del blocco aggiunto, e il nome del suo genitore.

Ad esempio, un blocco aggiunto al blocco principale "SINISTRA" come segue:

<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>
.

Verrebbe rimosso come segue:

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a magento.stackexchange
scroll top