วิธีการรับหมวดหมู่ผู้ปกครองสูงสุดจากวัตถุประเภทปัจจุบัน?


14

ฉันจะรับหมวดหมู่พาเรนต์ระดับบนสุด (หลังหมวดหมู่เริ่มต้น) จากวัตถุประเภทปัจจุบันได้อย่างไร ฉันต้องการชื่อหมวดหมู่และ URL หมวดหมู่ของหมวดหมู่หลักนั้นเพื่อแสดงในหมวดหมู่ย่อย

  • หมวดหมู่เริ่มต้น
    • แมว A
      • แมว B
        • แคทซี

ฉันจะรับCat Aชื่อและ URL ในCat BและCat Cวัตถุได้อย่างไร

คำตอบ:


22

$category->getPath()จะคืนค่ารหัสของหมวดหมู่ทั้งหมดจากรากของต้นไม้ไปยังปัจจุบันที่คั่นด้วยเครื่องหมายทับ ( /) นี่คือตัวอย่าง: 1/2/56/124/543. คนแรกคือ 'รากของราก' ประการที่สองคือรูตแคตตาล็อก (หมวดหมู่เริ่มต้น) ส่วนที่เหลือเป็นหมวดหมู่ที่เรียบง่าย คุณสามารถทำสิ่งนี้ได้

$path = $category->getPath();
$ids = explode('/', $path);
if (isset($ids[2])){
    $topParent = Mage::getModel('catalog/category')->setStoreId(Mage::app()->getStore()->getId())->load($ids[2]);
}
else{
    $topParent = null;//it means you are in one catalog root.
}

ตอนนี้คุณสามารถได้รับชื่อและ URL เช่นนี้:

if ($topParent){
    $name = $topParent->getName();
    $url = $topParent->getUrl();
}

ขอบคุณ Marius! มีการพิมพ์ผิดในgetId()ฉันแก้ไขมัน มันทำงานได้อย่างสมบูรณ์
MagExt

เย็น. ขอโทษเกี่ยวกับการพิมพ์ผิด และขอบคุณสำหรับการแก้ไข
Marius

สวัสดีทุกคนสามารถอ้างถึงเอกสารวีโอไอพีอย่างเป็นทางการสำหรับแผนภูมิหมวดหมู่ได้หรือไม่
MengT

@Marius เมื่อฉันได้รับเส้นทางของหมวดหมู่ทุกหมวดกล่าวว่า 1/2 / <รหัสหมวดหมู่ที่เกี่ยวข้อง> รหัสหมวดหมู่เริ่มต้นของฉันคือ 2 จากนั้น 1 นี้คืออะไร
ผีเสื้อ

1
@ ไม่สนใจคุณพูดถูก
Marius

15

ลองสิ่งนี้

$level = $this->getCurrentCategory()->getParentCategory()->getLevel();
if($level > 1){                 
    echo $this->getCurrentCategory()->getParentCategory()->getName();
    }
    else{
    echo $this->escapeHtml($_category->getName());
    }

เพียงคัดลอกและวางรหัสนี้ :)


สวัสดี ขอบคุณสำหรับคำตอบของคุณ แต่คุณมา 5 เดือนแล้ว :)
MagExt

9
ยินดีต้อนรับสู่ Magento Stack คุณค่อนข้างถูกที่จะตอบคำถามเก่าถ้าคุณมีคำตอบที่ดีซึ่งยังไม่ได้รับการคุ้มครอง คำตอบมีไว้เพื่อประโยชน์ของชุมชนไม่ใช่เพื่อประโยชน์ของกลุ่ม OP ตามทัน! :)
McNab

คำตอบนี้จะผิดถ้าคุณอยู่ในระดับ 3 และลึกกว่านั้นเพราะมันจะส่งคืนผู้ปกครองคนแรกในขณะที่คำถามเกี่ยวกับอันดับต้น ๆ
gnysek

แม้ว่านี่จะไม่ใช่วิธีการแก้ปัญหาที่สมบูรณ์ แต่ก็สามารถวนซ้ำจนกว่าจะถึงระดับที่ต้องการ ผลักฉันไปในทิศทางที่ถูกต้อง
Domino

4

คุณสามารถใช้ getParentCategories () ในหมวดหมู่ปัจจุบันแล้วเรียก array_pop เพื่อรับองค์ประกอบสุดท้าย ทำสองครั้งเพื่อรับองค์ประกอบสุดท้ายที่สอง

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.