มีวิธีซ่อนหมวดหมู่ที่ไม่มีผลิตภัณฑ์ที่ใช้งานหรือไม่? หรือดียิ่งขึ้นแสดงเฉพาะหมวดหมู่ที่มีผลิตภัณฑ์และสต็อกที่ใช้งานอยู่
มีวิธีซ่อนหมวดหมู่ที่ไม่มีผลิตภัณฑ์ที่ใช้งานหรือไม่? หรือดียิ่งขึ้นแสดงเฉพาะหมวดหมู่ที่มีผลิตภัณฑ์และสต็อกที่ใช้งานอยู่
คำตอบ:
วิธีที่ง่ายที่สุดในการทำเช่นนี้คือการเขียนMage_Catalog_Block_Navigation
บล็อกใหม่เท่านั้น:
=> ในวิธีที่_renderCategoryMenuItemHtml()
คุณต้องการแทนที่ลูป
foreach ($children as $child) {
if ($child->getIsActive()) {
$activeChildren[] = $child;
}
}
=> ด้วยสิ่งนี้:
foreach ($children as $child) {
if ($child->getIsActive() && $this->_hasProducts($child->entity_id)) {
$activeChildren[] = $child;
}
}
=> และคล้ายกันในวิธีการrenderCategoriesMenuHtml()
แทนที่รหัส
foreach ($this->getStoreCategories() as $child) {
if ($child->getIsActive()) {
$activeCategories[] = $child;
}
}
=> ด้วยสิ่งนี้:
foreach ($this->getStoreCategories() as $child) {
if ($child->getIsActive() && $this->_hasProducts($child->entity_id)) {
$activeCategories[] = $child;
}
}
=> สุดท้ายเพิ่มวิธีการที่เราเพิ่งใช้ในรหัสของเรา:
protected function _hasProducts($category_id) {
$products = Mage::getModel('catalog/category')->load($category_id)
->getProductCollection()
->addAttributeToSelect('entity_id')
->addAttributeToFilter('status', 1)
->addAttributeToFilter('visibility', 4);
return ( $products->count() > 0 ) ? true : false;
}
โปรดจำไว้ว่าวิธีการตรวจสอบแต่ละหมวดหมู่โดยใช้แคตตาล็อก / หมวดหมู่หมวดหมู่ ดังนั้นหากคุณมีหลายประเภทคุณอาจต้องการเขียนรหัสใหม่เพื่อไม่ให้เกิดปัญหาเรื่องประสิทธิภาพ ในร้านค้าขนาดเล็กที่เรากำลังดำเนินการอยู่ได้ผลดี
ไม่มีคุณสมบัติในตัวสำหรับซ่อนหมวดหมู่ที่ว่างเปล่า (แต่คุณสามารถเลือกด้วยตนเองใช้งานได้ = ไม่สำหรับแต่ละหมวดหมู่ในพื้นที่ผู้ดูแล -> แคตตาล็อก -> จัดการหมวดหมู่)
นี่คือลิงค์ในโพสต์ที่ยอดเยี่ยมจากบล็อกของ Josh Prattskiซึ่งเขาเขียนคำแนะนำแบบทีละขั้นตอนเกี่ยวกับวิธีการสร้างส่วนขยายสำหรับจุดประสงค์นี้
หากคุณต้องการซ่อนไว้ในการนำทางแคตตาล็อกคุณสามารถเพิ่มเงื่อนไข if ในเทมเพลตเพื่อตรวจสอบปริมาณของผลิตภัณฑ์ในหมวดหมู่นั้น
บางทีนี่อาจช่วยได้เช่นกัน
ไปที่แบ็กเอนด์ของเว็บช็อปของคุณ
จากนั้นไปที่
Catalog > Category > Manage Category
เลือกหมวดหมู่ของคุณแล้วเลือกDisplay settings
แท็บ
Display Mode
สามารถตั้งป้ายกำกับเป็น
Show static block only
.
หากต้องการซ่อนหมวดหมู่ที่ว่างเปล่าจากเมนูด้านบนให้ทำดังต่อไปนี้:
ไปที่โฟลเดอร์และสำเนา
app/code/core/Mage/Catalog/Block
Navigation.php
แทนที่
Navigation.php
ในแพ็คเกจท้องถิ่นของคุณ เปิดNavigation.php
แพ็คเกจของคุณและวางรหัสต่อไปนี้ในไฟล์นี้:
if ($category->getIsActive()) {
$cat = Mage::getModel('catalog/category')->load($category->getId());
$products = Mage::getResourceModel('catalog/product_collection')->addCategoryFilter($cat);
Mage::getSingleton('catalog/product_status')->addVisibleFilterToCollection($products);
Mage::getSingleton('catalog/product_visibility')->addVisibleInCatalogFilterToCollection($products);
Mage::getSingleton('cataloginventory/stock')->addInStockFilterToCollection($products);
if (count($products) == 0) {
return;
}
}
สิ่งที่ใช้ได้ผลสำหรับฉันคือการสร้างทรีหมวดหมู่เทมเพลตและใช้ฟังก์ชันเงื่อนไขซึ่งทำให้ทรีหมวดหมู่:
foreach ($children as $child)
{
if ($child->getIsActive() && $this->_hasProducts($child->entity_id))
{
$activeChildren[] = $child;
}
}
function _hasProducts:
protected function _hasProducts($category_id) {
$products = Mage::getModel('catalog/category')->load($category_id)
->getProductCollection()
->addAttributeToSelect('entity_id')
->addAttributeToFilter('status', 1)
->addAttributeToFilter('visibility', 4);
return ( $products->count() > 0 ) ? true : false;
}
คุณสามารถรัน sql ต่อไปนี้เพื่อปิดการใช้งานทุกหมวดหมู่โดยไม่มีผลิตภัณฑ์
UPDATE `catalog_category_entity_int` AS `status`
INNER JOIN `eav_attribute` AS `attr` ON `attr`.`attribute_code` = 'is_active'
AND `attr`.`entity_type_id` = 3
AND `status`.`attribute_id` = `attr`.`attribute_id`
SET `status`.`value` = IF((SELECT COUNT(`index`.`product_id`)
FROM `catalog_category_product_index` AS `index`
WHERE `index`.`category_id` = `status`.`entity_id` GROUP BY `index`.`category_id`) > 0, 1, 0)
WHERE `status`.`store_id` = 0
รายละเอียดเพิ่มเติมที่คุณสามารถหาที่นี่http://quicktips.ru/all/hide-all-categories-without-products-and-show-categories-with-pr/
สิ่งที่ฉันทำเพื่อซ่อนหมวดหมู่ที่ว่างเปล่าคือการเขียนMage_Catalog_Model_Resource_Category_Tree
load()
ฟังก์ชั่นใหม่ ฉันจะเข้าร่วมกลุ่มผลิตภัณฑ์ที่มีหมวดหมู่ดังต่อไปนี้
$collection = Mage::getResourceModel('catalog/product_collection');
Mage::getSingleton('cataloginventory/stock')->addInStockFilterToCollection($collection);
Mage::getSingleton('catalog/product_visibility')->addVisibleInCatalogFilterToCollection($collection);
$collection->getSelect()->join(
array('product_category' => Mage::getSingleton('core/resource')->getTableName('catalog/category_product_index')),
'product_category.product_id = e.entity_id',
array('')
);
$collection->getSelect()->where('product_category.category_id = '.$this->_table.'.entity_id');
$select->columns(array('product_count' => $collection->getSelectCountSql()));
เพิ่มรหัส$arrNodes = $this->_conn->fetchAll($select);
นี้ก่อนบรรทัดนี้
และห่อโค้ดนี้ด้วยเงื่อนไขนี้คลาสนี้เรียกจากโมเดลส่วนหน้าและส่วนหลังด้วย
if(!Mage::getSingleton('admin/session')->isLoggedIn())
ฉันได้เพิ่มฟิลด์เพิ่มเติม product_count ซึ่งมีจำนวนผลิตภัณฑ์ที่ใช้งานจริง
ฉันใช้โมดูลบุคคลที่สามเพื่อแสดงหมวดหมู่บนเมนูด้านบนและฉันวางเงื่อนไขตามจำนวนผลิตภัณฑ์เมื่อมีการแสดงเมนู