স্তরযুক্ত নেভিগেশনের লেআউট পরিবর্তন করা


14

আমার একটি স্তরযুক্ত নেভিগেশন রয়েছে এবং গ্রাহকের <select/>লিঙ্কের দীর্ঘ তালিকার পরিবর্তে ক্ষেত্র থাকতে চান ।

আমি ফিল্টারটির নাম / আইডি মেলে তবে কোনও পর্যবেক্ষকের সাথে টেমপ্লেট পরিবর্তন করার বিষয়ে ভাবলাম।

কোন ভাল ধারণা বা সুপারিশ? টেমপ্লেট পরিবর্তন করার বিকল্পগুলি, সম্ভবত ব্লকটি ওভাররাইট / পুনর্লিখন বা কেবল দুটি ফিল্টারের জন্য ব্লক শ্রেণি পরিবর্তন করতে পারে?

টেমপ্লেট পরিবর্তন করার জন্য কোন ইভেন্টটি ব্যবহার করতে হবে?

আমার তখন এখানে একই সমস্যাটি রয়েছে /programming/14524791/magento-enable-or-disable-a-module-in-code/14529629 কারণ আমার এমন একটি পর্যবেক্ষক আছেন যিনি বিন্যাসের জিনিসগুলি পরিবর্তন করেন। এটি শুধুমাত্র প্রাসঙ্গিক থিম। তাই আপডেটগুলি চালনার আগে থিমটি চেক করা ভাল ধারণা হতে পারে?


"গ্রাহক লিংকের দীর্ঘ তালিকার পরিবর্তে ক্ষেত্রগুলি রাখতে চান" আপনি এর অর্থ কী তা আমার কোনও ধারণা নেই।
রিক কুইপার্স

অভিশাপ, স্ট্যাকেক্সচেঞ্জ আমার <
সलेक्ट

1
আমি কেবলমাত্র catalog/layer/filter.phtmlটেমপ্লেটটি ওভাররাইট করে বলব এবং আপনার যা প্রয়োজন তা পরিবর্তন করুন, এটি থিমও নির্দিষ্টভাবে হবে। আপনার কেবলমাত্র যে বিষয়টি মোকাবেলা করতে হবে তা হল নির্বাচিত ফিল্টার বিট। আমি অনুমান করছি আপনি নির্বাচিত সমস্ত ফিল্টার প্রদর্শন করতে চান যার জন্য <select>কিছু ব্লক ফাংশন যুক্ত করার প্রয়োজন হতে পারে, কারণ কোনও ফিল্টার নির্বাচন করা হলে অন্যান্য বিকল্পগুলি অদৃশ্য হয়ে যায়।
রিক কুইপার্স 26'13

না, গ্রাহক নির্বাচিত বাক্স হিসাবে বিভাগগুলি এবং "উপশ্রেণীগুলি" (বৈশিষ্ট্য) রাখতে চান, চেকবক্সগুলি (করণীয়) সহ সমস্ত কিছু এবং অতিরিক্ত রেটিং দিয়ে ফিল্টার করুন :-) তবে তারপরে আমি টেমপ্লেটে সমস্ত কিছুই প্রয়োগ করব।
ফ্যাবিয়ান ব্লাচসমিড

1
এই মন্তব্যটি আমার জন্য একটি নোট হিসাবে কাজ করে। এর জন্য আমার একটি উত্তর আছে তবে আমি আমার ফোনে আছি। স্তরযুক্ত নাভিতে কাজ করা ভালবাসা। পূর্ববর্তী প্রকল্পে একাধিক ক্ষেত্র নির্বাচন সমর্থন করার জন্য আমি এটি বাড়িয়েছি (চেকবক্সগুলি মনে করুন)
টিম রেইনল্ডস

উত্তর:


6

ঠিক আছে, আপনার যা করতে হবে: আপনার নিজের টেম্পলেটটি সেট করতে 'ক্যাটালগ / স্তর_দর্শন' ব্লকটি ওভাররাইড করুন। আমি 1 স্তম্ভের লেআউটের অংশ হিসাবে আমার লেয়ার্ড এনএভিটিকে হেডার অঞ্চলে রেখেছি

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

সেই টেম্পলেট ফাইলটিতে আপনার স্বতন্ত্র উপাদানগুলির জন্য ওভাররাইড হওয়া টেম্পলেটটি নির্দিষ্ট করতে হবে।

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

অবশেষে, আপনাকে ড্রপ ডাউন ফিল্টার.ফিটএমএল তৈরি করতে হবে। যে সরাসরি এগিয়ে থাকা উচিত। এই সম্পাদকটির সাথে আমার সমস্যা হচ্ছে বলে এটি খারাপভাবে ফর্ম্যাট করা হয়েছে তবে সাধারণ ধারণাটি এখানে। কিছু জাভাস্ক্রিপ্ট পাশাপাশি প্রয়োজন হবে।

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

পুনর্লিখন লেআউট করতে কেন বিরক্ত? কেন কেবল সাইটের থিম ফোল্ডারে বেস টেমপ্লেটটি অনুলিপি করবেন না? আমি কি এখানে কিছু মিস করছি (কিছুটা ক্লান্ত হয়ে পড়েছি, আমার অসুস্থ নবজাতক কন্যার সাথে সারা রাত জেগে)
প্রক্সি ব্লু

@edmeet আপনার মেয়েকে অভিনন্দন জানায় এবং আমারও একই প্রশ্ন রয়েছে। একটি সাধারণ থিম টেমপ্লেট ওভাররাইড করবে।
রিক কুইপার্স

@ টিম: আমার মোবাইল পোস্টটি মনে হয়েছে [টি] টিমকে গ্রাস করেছে, সুতরাং এটি ঠিক তাই টিম একটি বিজ্ঞপ্তি পেয়েছে।
প্রক্সি ব্লু

@edmeet আপনি মন্তব্য করলে, পোস্টটির মূল পোস্টারটি সর্বদা অবহিত করা হবে এমনকি আপনি তাঁর উল্লেখ না
করলেও

দুঃখিত, হ্যাঁ, টেমপ্লেট পুনর্লিখন কাজ করবে। আমি উল্লেখ করেছি যে আমি আমার স্তরযুক্ত নাভিকে মেনুটির নীচের পৃষ্ঠার কেন্দ্রে সরিয়েছি। এটি উত্তরের সাথে অপ্রাসঙ্গিক ছিল তাই আমার এটি ছেড়ে দেওয়া উচিত ছিল।
টিম রেনল্ডস

10

আপনার নির্দিষ্ট বৈশিষ্ট্য ফিল্টারটির টেম্পলেটটি পরিবর্তন করতে আপনি ব্লকে core_block_abstract_prepare_layout_afterইভেন্ট ব্যবহার করতে পারেন Mage_Catalog_Block_Layer_View

এটি এমন কিছু হতে পারে:

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

সারসংক্ষেপ:

প্রতিটি শিশু ফিল্টার ব্লকের স্তরযুক্ত নেভিগেশন ব্লকটিতে উপন্যাস রয়েছে [attribute_code]_filterএবং এগুলি সমস্ত _prepareLayout()পদ্ধতিতে তৈরি হয়েছে যাতে আপনি core_block_abstract_prepare_layout_afterইভেন্টে সহজেই এর টেমপ্লেটটি সংশোধন করতে পারেন ।

এছাড়াও আপনি আপনার পর্যবেক্ষকের মধ্যে এটি পরীক্ষা করে দেখতে পারেন যে বর্তমান থিমটি কল করে প্রত্যাশার মতো একই:

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

আন্তরিকভাবে, ইভান


চাইল্ড ফিল্টার ব্লকটি যদি attribute_code_filterওরফে নির্ধারিত হয় , তবে আপনি কেন বিন্যাসের এক্সএমএলে টেমপ্লেটটি সেট করতে পারবেন না?
pspahn

1
@pspahn কারন আপনি লেআউট সত্ত্বেও উপনাম দ্বারা এটি অ্যাক্সেস করতে পারবেন না। আপনি যদি আউটপুট পরীক্ষা করে getNameInLayout()দেখেন যে এই প্রতিটি ব্লকের ANNONYMOUS_30, ANNONYMOUS_23, ইত্যাদি হিসাবে অনন্য নাম রয়েছে তাই আপনি এর উপর নির্ভর করতে পারবেন না।
ইভান চেপর্ণি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.