নীচের কোডটি ম্যাজেন্টো ২.২.৫ এ প্রযোজ্য।
প্রথমে, সাইডবারে, সমস্ত সম্ভাব্য ফিল্টারগুলির জন্য সমস্ত সম্ভাব্য ব্যাপ্তি উত্পাদন করা দরকার। অতিরিক্তভাবে, এটিতে, আপনার দেওয়া রেঞ্জের মধ্যে পাওয়া পণ্য গণনার সংক্ষিপ্তসার থাকবে।
উদাহরণস্বরূপ, আমি একটি ফিল্টার ব্যবহারের দিকে মনোনিবেশ করব: দাম।
অন্য যে কোনও কিছুর আগে, কোনও প্রদত্ত পণ্যের গুণাবলী স্তরযুক্ত নেভিগেশনের জন্য যোগ্য হওয়ার জন্য, এটি সঠিকভাবে কনফিগার করা উচিত।
চেক করতে Stores -> Attribute -> Product
, অ্যাডমিনটিতে ব্রাউজ করুন, তারপরে দামের বৈশিষ্ট্যটি নির্বাচন করুন এবং তা Storefront Properties
ট্যাবটিতে
পর্যবেক্ষণ করুন Use in Layered Navigation
toFilterable (with results)
এই ছবি আমরা দেখতে যে মূল্য ফিল্টার জন্য, আমরা পরিসীমা দেখতে থেকে 50.00-59.99
ধারণ করে 10
ফলাফল, এবং জন্য 80+
শুধুমাত্র 1
।
এই দৃশ্যটি ভিতরে তৈরি করা হয়
/vendor/magento/theme-frontend-luma/Magento_LayeredNavigation/templates/layer/view.phtml
এর মতো একটি কোড রয়েছে
<?php foreach ($block->getFilters() as $filter): ?>
<?php if ($filter->getItemsCount()): ?>
যা অবশেষে স্ট্যাক
private function prepareData($key, $count)
এবং এটি একটি পদ্ধতি is
vendor/magento/module-catalog-search/Model/Layer/Filter/Price.php
সুতরাং, আমরা শ্রেণিটি চিহ্নিত করেছি যা দাম ফিল্টারিংয়ের জন্য দায়ী এবং আমরা দেখতে পাচ্ছি যে এটি ইতিমধ্যে উপলব্ধ ব্যাপ্তিগুলি উত্পাদন করতে ব্যবহৃত হয়েছিল।
আরও গুরুত্বপূর্ণ স্ট্যাকটি হ'ল কোনও নির্দিষ্ট ব্যাপ্তি নির্বাচন করা হলে কী ঘটে তা যাচাই করা।
উদাহরণস্বরূপ, আমি 40.00-49.99 পরিসরে ক্লিক করব, যা 4 ফলাফল প্রত্যাশিত বলে প্রত্যাশিত।
প্রথম আপ পদ্ধতি _prepareLayout()
থেকে
/vendor/magento/module-layered-navigation/Block/Navigation.php
কোডটি হ'ল
protected function _prepareLayout()
{
foreach ($this->filterList->getFilters($this->_catalogLayer) as $filter) {
$filter->apply($this->getRequest());
}
$this->getLayer()->apply();
return parent::_prepareLayout();
}
সংক্ষেপে, এটি বলে, আমাকে সমস্ত ফিল্টার এবং সেগুলির পূর্বাভাস দাও apply
।
এখন, getFilters () একা, অবশেষে থেকে একটি অবজেক্ট তৈরির দিকে পরিচালিত করে
vendor/magento/module-catalog-search/Model/Layer/Filter/Price.php
একটি কলিং পদক্ষেপ যে বিশালাকার __construct
এর Price
হয়
protected function createAttributeFilter(
\Magento\Catalog\Model\ResourceModel\Eav\Attribute $attribute,
\Magento\Catalog\Model\Layer $layer
) {
$filterClassName = $this->getAttributeFilterClass($attribute);
$filter = $this->objectManager->create(
$filterClassName,
['data' => ['attribute_model' => $attribute], 'layer' => $layer]
);
return $filter;
}
এবং এটি থেকে কোড
vendor/module-catalog/Model/Layer/FilterList.php
যাইহোক, আমরা যদি $filter->apply($this->getRequest());
উপরে থেকে কোডটিতে ফোকাস করি তবে এর অর্থ এই কোডটি কার্যকর হবে
public function apply(\Magento\Framework\App\RequestInterface $request)
{
/**
* Filter must be string: $fromPrice-$toPrice
*/
$filter = $request->getParam($this->getRequestVar());
if (!$filter || is_array($filter)) {
return $this;
}
$filterParams = explode(',', $filter);
$filter = $this->dataProvider->validateFilter($filterParams[0]);
if (!$filter) {
return $this;
}
$this->dataProvider->setInterval($filter);
$priorFilters = $this->dataProvider->getPriorFilters($filterParams);
if ($priorFilters) {
$this->dataProvider->setPriorIntervals($priorFilters);
}
list($from, $to) = $filter;
$this->getLayer()->getProductCollection()->addFieldToFilter(
'price',
['from' => $from, 'to' => empty($to) || $from == $to ? $to : $to - self::PRICE_DELTA]
);
$this->getLayer()->getState()->addFilter(
$this->_createItem($this->_renderRangeLabel(empty($from) ? 0 : $from, $to), $filter)
);
return $this;
}
এবং আবারও, এই কোডটি এসেছে
vendor/magento/module-catalog-search/Model/Layer/Filter/Price.php
আমি যদি পরিবর্তনশীল মানগুলি ঘনিষ্ঠভাবে অনুসরণ করি তবে, আমি 40.00-49.99 পরিসীমাটি নির্বাচন করেছি, তবে $filter
দুটি উপাদানগুলির সমন্বয়ে অ্যারে রয়েছে: [0 => 40, 1 => 50]
এই লাইন কার্যকর করার পরে
list($from, $to) = $filter;
স্পষ্টতই, $from
চলকটি এখন 40, এবং $to
চলকটি এখন 50 50
পরের লাইনটি অত্যন্ত গুরুত্বপূর্ণ
$this->getLayer()->getProductCollection()->addFieldToFilter(
'price',
['from' => $from, 'to' => empty($to) || $from == $to ? $to : $to - self::PRICE_DELTA]
);
ইতিমধ্যে স্তরটির সাথে সম্পর্কিত ইতিমধ্যে উপস্থিত সংগ্রহটি কল করে আরও কমে যায় addFieldToFilter()
।
সম্ভবত, এই জায়গাতেই বাগগুলি সনাক্ত করার জন্য মনোযোগ দেওয়া উচিত any
শেষ পর্যন্ত, প্রোগ্রামটি getLoadedProduct Colલેક્શન () থেকে কল করে
vendor/magento/module-catalog/Block/Product/ListProduct.php
যা কার্যকরভাবে এই অবজেক্টটি আবদ্ধ করা সুরক্ষিত সংগ্রহ প্রদান করে।
ম্যাজেন্টো একটি জটিল অ্যাপ্লিকেশন।
এইগুলিতে একক ক্লিক যা দামের একক পরিসীমা নির্বাচন করেছে, আমরা তিনটি পৃথক মডিউল ইন্টারঅ্যাক্ট করার কোড দেখেছি
- মডিউল-ক্যাটালগ
- মডিউল-ক্যাটালগ-অনুসন্ধান
- মডিউল-স্তরপূর্ণ-গৌণ
মুহুর্তগুলিতে এটি অপ্রতিরোধ্য বোধ করতে পারে তবে এটি আমার কাছে মনে হয়, এই মডিউলগুলির মধ্যে একটি দুর্দান্ত সমন্বয় রয়েছে।
পড়ার জন্য আপনাকে ধন্যবাদ. আমি আশা করি এটি ব্যাখ্যা করে এবং আপনি এখন স্তরযুক্ত নেভিগেশন কিছুটা ভাল বোঝার সাথে সজ্জিত।