Frage

Ich habe eine facettennavigation, und der Kunde haben möchte <select/> Felder, anstatt eine lange Liste von links.

Ich dachte darüber nach, ändern Sie einfach die Vorlage mit einem Beobachter, wenn der name/id der filter passt.

Irgendwelche besseren Ideen oder Empfehlungen?Alternativen zum ändern der Vorlage, vielleicht überschreiben, umschreiben, blockieren oder ändern Sie nur die block-Klasse für die beiden Filter?

Was Ereignis zu verwenden, für die Vorlage ändern?

Ich habe dann das gleiche problem wie hier https://stackoverflow.com/questions/14524791/magento-enable-or-disable-a-module-in-code/14529629 denn ich habe einen Beobachter, der Veränderungen layout Dinge.Dies ist nur Relevantes Thema.So chechking das Thema vor dem ausführen des updates könnte eine gute Idee?

War es hilfreich?

Lösung

OK, Dinge, die Sie tun müssen: 1. Überschreiben Sie den Block 'Catalog/layer_view', um Ihre eigene Vorlage festzulegen. Ich stellte meinen geschichteten NAV in den Kopfzeilenbereich als Teil eines 1 -Spalten -Layouts

<layout>
    <catalog_category_layered>        
        <reference name="header">
            <block type="catalog/layer_view" name="mylayered"  template="mymodule/catalog/layer/view.phtml"/>
        </reference>    
    </catalog_category_layered>
</layout>

In dieser Vorlagendatei müssen Sie die überschriebene Vorlage für Ihre einzelnen Elemente angeben.

<?php if($this->canShowBlock()): ?>
<div class="block block-layered-nav">
    <div class="block-title">
        <strong><span><?php echo $this->__('Shop By') ?></span></strong>
    </div>
    <div class="block-content">
        <?php echo $this->getStateHtml() ?>
        <?php if ($this->getLayer()->getState()->getFilters()): ?>
            <div class="actions"><a href="<?php echo $this->getClearUrl() ?>"><?php echo $this->__('Clear All') ?></a></div>
        <?php endif; ?>
        <?php if($this->canShowOptions()): ?>
            <p class="block-subtitle"><?php echo $this->__('Shopping Options') ?></p>
            <dl id="narrow-by-list">
                <?php $_filters = $this->getFilters() ?>
                <?php foreach ($_filters as $_filter): ?>
                <?php /* !!! HERE !!! */ ?>
                <?php if(some_condition == true){ $_filter->setTemplate('path/to/your/new/filter.phtml'); } ?>
                <?php if($_filter->getItemsCount()): ?>
                    <dt><?php echo $this->__($_filter->getName()) ?></dt>
                    <dd><?php echo $_filter->getHtml() ?></dd>
                <?php endif; ?>
                <?php endforeach; ?>
            </dl>
            <script type="text/javascript">decorateDataList('narrow-by-list')</script>
        <?php endif; ?>
    </div>
</div>
<?php endif; ?>

Schließlich müssen Sie den Dropdown -Filter.phtml erstellen. Das sollte einfach sein. Dies ist schlecht formatiert, da ich Probleme mit diesem Herausgeber habe, aber die allgemeine Idee ist hier. Ein JavaScript wird ebenfalls benötigt.

<ol>

    <li><select>
    <?php foreach ($this->getItems() as $_item): ?>
        <option value="<?php echo $this->urlEscape($_item->getUrl()); ?>">
        <?php if ($_item->getCount() > 0): ?>
        <a href="<?php echo $this->urlEscape($_item->getUrl()) ?>"><?php echo $_item->getLabel() ?></a>
        <?php else: echo $_item->getLabel() ?>
        <?php endif; ?>
        <?php if ($this->shouldDisplayProductCount()): ?>
        (<?php echo $_item->getCount() ?>)
        <?php endif; ?>
    </option>
<?php endforeach ?>
</select></li>
</ol>

Andere Tipps

Sie können verwenden core_block_abstract_prepare_layout_after Veranstaltung am Mage_Catalog_Block_Layer_View block-zum ändern der Vorlage Ihrer besonderen Attribut-filter.

Es könnte so etwas wie dieses:

public function yourObserver($observer) 
{
    $block = $observer->getBlock();
    if ($block instanceof Mage_Catalog_Block_Layer_View) {
        $block->getChild($yourAttributeCodeGoesHere . '_filter')
           ->setTemplate('your/template.phtml');
    }
}

Zusammenfassung:

Jedes Kind filter block alias im layered navigation block wie [attribute_code]_filter, und alle von Ihnen erstellt _prepareLayout() Methode, so dass Sie können leicht ändern die Vorlage auf core_block_abstract_prepare_layout_after event.

Auch können Sie innerhalb Ihres Beobachters, das aktuelle Thema die gleiche wie erwartet, indem Sie:

$design = Mage::getSingleton('core/design_package')
$design->getPackageName(); // Returns current design package
$design->getTheme('layout'); // Returns current design layout

Mit freundlichen GRÜßEN, Ivan

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit magento.stackexchange
scroll top