Aggiunta del blocco di contenuto alla Home Page, rimozione di 'std' <div>


9

Voglio fare alcune cose, e sono nuovo e molto molto lontano dall'essere esperto con Magento; quello che sto chiedendo è il modo migliore e più conciso per fare quanto segue:

  1. Vorrei modificare il contenuto della mia home page - e probabilmente di ogni altra pagina CMS, man mano che avrò più avanti in questo progetto - nel mio editor di testo e non nel pannello di amministrazione WYSIWYG. Immagino che avrei solo un modello come home-content.phtmlcontenere il mio markup per le mie giostre e qualsiasi altra cosa finisca per mettere sulla mia home page. Mi sembrava il modo più logico per farlo è collegare il mio home-content.phtmlal getChildHtml('content')metodo Pannello di amministrazione -> CMS -> Pagine -> Home Page -> scheda 'Design' -> Layout di aggiornamento XML con codice come questo:

    <reference name="content">
                <block type="core/template" name="home-content"
                       as="home-content" template="home-content.phtml" />
    </reference>

    Tuttavia, questo è stato incasinato dalla prossima cosa che volevo fare ...

  2. A mio avviso, la struttura HTML predefinita di Magento è orribilmente gonfia, con troppi nidificati div( wrapper -> pagina -> main-container col1-layout -> main -> col-main solo per arrivare al contenuto di una pagina) . Rende lo styling con Sass un incubo per me, con tutti quegli stili di classe suddivisi in 5 diversi parziali di Sass. Quindi, sto ripulendo la struttura predefinita per abbinare i miei principi di progettazione. Parte di ciò significa rimuovere elementi vuoti, come il famigerato <div class="std"> </div>. Il modo più efficace per sbarazzarsi di questo (poiché non ho intenzione di utilizzare il pannello di amministrazione per i contenuti) è con <remove name="cms.wrapper">l'XML di aggiornamento del layout di casa CMS. Il problema è che questo rimuove tutto ciò che aggiungo con il metodo sopra ( reference name="content").

Fondamentalmente: come posso aggiungere contenuto alla mia Home Page con un .phtml e rimuovere il <div class="std"> </div>senza conflitto? Non capisco come la funzionalità di admin -> CMS -> XML di aggiornamento del layout differisca dalla funzionalità di layout.xml, o perché dovrei usarne uno sopra l'altro (come, non potrei usare <cms index-index>per fare la stessa cosa?) .

Grazie in anticipo a tutti.


Nel mio caso, .stdaggiunge gli stili di elenco dove non sono desiderati. Com'era prevedibile con Magento, è una procedura lunga da risolvere.
Rybo111,

Risposte:


12

Dividiamo il problema in 3 sezioni e esaminiamolo.

1. Devi aggiungere un file modello alla tua pagina CMS

Il metodo che adotterai qui funzionerà sicuramente. Cioè devi aggiungere questo snippet di codice nella tua pagina cms, nella scheda progettazione

<reference name="content"><block type="core/template" name="home-content"  template="test.phtml" /></reference>

Poiché il file modello viene direttamente contentbloccato, il contenuto del modello verrà visualizzato da Magento. Quindi non è necessario utilizzare la asproprietà nel tuo core/template block.

2. Come evitare <div class="std"></div>

Questo div è in realtà un elemento div wrapper per le pagine cms. Vedi la definizione di questo blocco qui.

  <block type="page/html_wrapper" name="cms.wrapper" translate="label">
        <label>CMS Content Wrapper</label>
        <action method="setElementClass"><value>std</value></action>
        <block type="cms/page" name="cms_page"/>
  </block>

Come puoi vedere, il cms.wrapperblocco è di tipo page/html_wrapper. Ciò che fa questo blocco è che avvolgerà tutto il suo blocco figlio con un elemento div (elemento predefinito) e renderà automaticamente i blocchi figlio.

Per evitare questo blocco, hai usato questo codice

<remove name="cms.wrapper">

Tuttavia è completamente sbagliato. Rimuove effettivamente il div wrapper. Ma insieme a ciò rimuove anche il blocco figlio cms_page. Questo cms_pageè con un tipo cms/page. Ciò significa che si riferisce al blocco Mage_Cms_Block_Page. Questo blocco è il "cuore" delle pagine CMS. Quindi la rimozione del wrapper ha cancellato anche il blocco cardiaco della pagina CMS. Ecco perché non hai ricevuto alcun output nella tua pagina cms.

Quindi cosa dovresti fare per evitare questo wrapper? La risposta è molto semplice. Sfuggire cms_pagealla confezione e quindi rimuovere la confezione in modo sicuro. Quindi ecco il codice che devi usare nella sezione del layout della tua pagina cms.

<reference name="content"><remove name="cms.wrapper" /><block type="core/template" name="home-content"  template="test.phtml" /><block type="cms/page" name="cms_page"/></reference>

Come puoi vedere nel codice xml del layout, rimuoviamo prima il wrapper e quindi il cms_pageblocco inserito attraverso il nostro codice. Abbiamo anche usato il nostro blocco modello come puoi vedere. Questo renderà il contenuto del file modello prima nella tua pagina, quindi seguito dal contenuto della pagina cms.

3. In che modo admin -> CMS -> XML di aggiornamento del layout differisce dalla funzionalità di layout.xml

Supponiamo che tu desideri avere un aspetto speciale per una delle pagine CMS che hai nel tuo sito. Per questo, il metodo migliore che puoi scegliere è aggiungere l'aggiornamento del layout tramite admin-> CMS-> Layout. Questo sarà applicato in modo univoco solo per la pagina CMS.

Ma se è necessario applicare alcune modifiche generali a tutte le pagine CMS, sarebbe facile procedere layout.xml.

Quindi, in generale, quale metodo adottare per modificare il layout dipende esclusivamente da ciò che si desidera ottenere. A seconda di ciò, devi seguire un metodo. Non tutti i metodi.

spero che aiuti


3

Se c'è solo una pagina offensiva, allora il modo migliore e più semplice IMO:

Modifica la "Design"scheda della pagina CMS .

Fare riferimento all'elemento wrapper, utilizzare il setElementClassmetodo per applicare nessuna classe o una nuova classe.

<reference name="cms.wrapper">
<action method="setElementClass"><value>none</value></action>
</reference>

0

È necessario modificare il layout, normalmente 1column.phtml, 2columns.phtml, ecc. E renderli come desiderato / necessario.

Questi PHTML sono la struttura di base di qualsiasi layout e sono programmaticamente riempiti con aggiornamenti XML.

Ciò non influirà su nessun altro se manterrai la coerenza tra i tuoi modelli e layout nel tuo tema.


Come cosa, aggiungendo un condizionale if this is the home page, include this code ...su tutte le pagine di layout, quindi cancellando solo getCHildHtml('content')su tutte le pagine? Voglio imparare a usare Magento e i suoi strumenti meglio, non solo il problema con la mazza.
Ezratic,

No, i layout sono utilizzati in tutto il sito, in circostanze diverse e con aggiornamenti diversi a seconda del percorso. Fai una domanda alla volta, se hai più dubbi fai più domande, ma non modificarla o potrebbe essere chiusa.
mbalparda,

Non sto cercando di essere scortese qui; Apprezzo il tuo tempo per rispondermi. Tuttavia, non penso che la tua risposta mi aiuti. Sto cercando di rimuovere un elemento e aggiungere un blocco a una singola pagina CMS, ma il mio metodo non funziona, quindi sto chiedendo uno che funzioni. Sono a conoscenza dello scopo generale di layout e modelli e il tuo "Usa le cose correttamente e funzionerà" non risponde alla mia domanda.
Ezratic,

Ti sbagli questa pagina per un "fai lavorare gli altri gratuitamente". La risposta è valida e probabilmente quella che stai cercando e una volta che sai come funzionano le cose in Magento troverai che questa risposta è il modo di procedere in questo caso.
mbalparda,

Leggi questo e troverai la maggior parte di ciò di cui hai bisogno: magentocommerce.com/knowledge-base/entry/…
mbalparda

0

Mi ci è voluto un minuto per capire tutte le indicazioni nella risposta accettata, quindi per ripercorrerla, questo è tutto ciò che era necessario per rimuovere il wrapper per tutte le pagine CMS: <div class="std"></div>

In cms.xml, modifica il blocco cms_page in:

<cms_page translate="label">
    <label>CMS Pages (All)</label>
    <reference name="content">
        <block type="core/template" name="page_content_heading" template="cms/content_heading.phtml"/>
        <block type="cms/page" name="cms_page"/>
    </reference>
</cms_page>
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.