Katmanlı gezinme düzeninin düzenini değiştirme


14

Katmanlı bir navigasyonum var ve müşteri <select/>uzun bir bağlantı listesi yerine alanlara sahip olmak istiyor .

Filtrenin adı / kimliği eşleşirse sadece bir gözlemci ile şablonu değiştirmeyi düşündüm.

Daha iyi fikir veya öneriniz var mı? Şablonu değiştirmenin alternatifleri, bloğun üzerine yazabilir / yeniden yazabilir veya yalnızca iki filtre için blok sınıfını değiştirebilir mi?

Şablonu değiştirmek için hangi olay kullanılır?

Sonra burada aynı sorun var /programming/14524791/magento-enable-or-disable-a-module-in-code/14529629 çünkü düzen şeyleri değiştiren bir gözlemcim var. Bu sadece tema ile ilgilidir. Güncellemeleri çalıştırmadan önce temayı kontrol etmek iyi bir fikir olabilir mi?


"Müşteri uzun bir bağlantı listesi yerine alanlara sahip olmak istiyor" Bununla ne demek istediğini bilmiyorum
Rick Kuipers

lanet olsun, stackexchange yedik <select>
Fabian Blechschmidt

1
Sadece catalog/layer/filter.phtmlşablonun üzerine yaz ve ihtiyacınız olanı değiştirmeyi söyleyebilirim , temaya da özel olacak. Tek yapmanız gereken seçili filtreler bitidir. <select>Bir filtre seçildikten sonra diğer seçenekler kaybolur, çünkü bazı Blok işlevlerinin eklenmesini gerektirebilecek tüm filtreleri göstermek istediğinizi tahmin ediyorum .
Rick Kuipers

Hayır, müşteri kategorileri ve "alt kategorileri" (öznitelik) seçim kutuları, onay kutuları ile diğer her şey (yapmak için) ve ek olarak derecelendirme göre filtre :-) istiyorum Ama sonra her şeyi şablonda uygulayacağım.
Fabian Blechschmidt

1
Bu yorum benim için bir not olarak hizmet ediyor. Bunun bir cevabı var ama telefonumdayım. Katmanlı Nav'da çalışmayı seviyorum. Önceki bir projede birden fazla alan seçilmesini desteklemek için genişlettim (onay kutularını düşünün)
Tim Reynolds

Yanıtlar:


6

Tamam, yapmanız gerekenler: 1. Kendi şablonunuzu ayarlamak için 'catalog / layer_view' bloğunu geçersiz kılın. Katmanlı nav'ımı 1 sütun düzeninin bir parçası olarak başlık alanına koydum

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

Bu şablon dosyasında, tek tek öğeleriniz için geçersiz kılınmış şablonu belirtmeniz gerekir.

<?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; ?>

Son olarak, açılır listeyi oluşturmanız gerekir. Bu çok basit olmalı. Bu editörle sorun yaşadığım için bu kötü biçimlendirilmiş, ancak genel fikir burada. Bazı Javascriptlere de ihtiyaç duyulacaktır.

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

düzen yeniden yazma neden zahmet? Neden temel şablonu siteler tema klasörüne kopyalamıyorsunuz? Burada bir şey eksik miyim (biraz yorgun, hasta yeni doğan kızımla bütün gece
uyanık

@dedmeet tebrikler kızınız ve bende aynı soru var. Basit bir tema şablonu geçersiz kılma yapardı.
Rick Kuipers

@Tim: Mobil yayınım Tim'i [at] yutmuş gibiydi, bu yüzden Tim bir bildirim alacak.
ProxiBlue

@dedmeet Yorum yaptığınızda, sizden bahsetmeseniz bile yazının orijinal posteri her zaman bilgilendirilecektir :)
mpaepper

Üzgünüz, evet, şablon yeniden yazma işe yarayacaktı. Katmanlı nav'ımı menünün altındaki sayfanın ortasına taşıdığımı belirttim. Bu, cevapla alakasızdı, bu yüzden onu dışarıda bırakmalıydım.
Tim Reynolds

10

Öznitelik filtrenizin şablonunu değiştirmek için bloktaki core_block_abstract_prepare_layout_afterolayı kullanabilirsiniz Mage_Catalog_Block_Layer_View.

Bunun gibi bir şey olabilir:

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

Özet:

Her alt filtre bloğunun katmanlı gezinme bloğunda takma adı vardır [attribute_code]_filterve tümü _prepareLayout()yöntemle oluşturulur, böylece core_block_abstract_prepare_layout_afterolayda şablonunu kolayca değiştirebilirsiniz .

Ayrıca gözlemcinizde mevcut temanın beklediğinizle aynı olup olmadığını arayarak kontrol edebilirsiniz:

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

Saygılarımla, Ivan


Alt filtre bloğuna attribute_code_filterdiğer ad atanırsa , şablonu neden xml düzeninde ayarlayamıyorsunuz?
Ocak'ta pspahn

1
@pspahn Çünkü düzen olsa takma adla erişemezsiniz. Çıktınızı kontrol ederseniz getNameInLayout(), bu blokların her birinin ANNONYMOUS_30, ANNONYMOUS_23 vb. Olarak benzersiz bir adı olduğunu görürsünüz. Buna güvenemezsiniz.
Ivan Chepurnyi
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.