ฉันจะแทรกเมนู taxonomy เป็นเมนูย่อยของรายการเมนูมาตรฐานได้อย่างไร


12

ฉันมีเมนูหลักที่มีโครงสร้างระดับบนสุดคล้ายกับต่อไปนี้:

Home - Categories - Something Else - ... - Contact

ลิงก์ระดับบนสุดแต่ละลิงค์นั้นไปยังหน้าโหนดที่เหมาะสม

ฉันมีคำศัพท์สำหรับหมวดหมู่ (หลายระดับ) และฉันต้องการคำศัพท์อนุกรมวิธานเหล่านั้นในเมนูย่อยภายใต้รายการ "หมวดหมู่" ฉันต้องการหลีกเลี่ยงการเข้ารหัสรายการลงในเมนูหลักเนื่องจากเมนูย่อยควรเติบโต / ย่อขนาดตามคำศัพท์

ในอดีตที่ผ่านมาฉันได้เขียนโค้ดที่ซับซ้อนเกินความจำเป็นเพื่อให้บรรลุสิ่งนี้ซึ่งเชื่อมโยงกับการดำเนินงานด้านอนุกรมวิธานและจัดการรายการย่อยของเมนูเฉพาะตามนั้น (คล้ายกับสิ่งที่Taxonomyทำ แต่ไม่มีเมนูที่แตกต่างกัน คำศัพท์).

ในขณะที่วิธีการนี้ใช้งานได้มันไม่เหมาะและแน่นอนว่าไม่ใช่เรื่องทั่วไป ฉันไม่สามารถยกโค้ดนั้นจากโปรเจ็กต์เก่าไปยังโค้ดใหม่ได้มันต้องมีการปรับแต่งตามความเหมาะสม

ฉันไม่สามารถรู้สึกได้ว่าจะต้องมี 'มาตรฐาน' โซลูชันที่ใช้โมดูลนี้

ฉันเคยเห็นคำแนะนำบางอย่างจากที่นั่นเพื่อใช้โมดูลที่แตกต่างกันรวมกัน ฉันเปิดให้ข้อเสนอแนะใด ๆ แต่ถ้ามันเกี่ยวข้องกับการติดตั้งมากกว่า 1 หรือ 2 โมดูลและโหลดของการกำหนดค่าฮาร์ดโค้ดกำหนดบริบทเฉพาะก็อาจจะไม่ช่วยมากเกินไปในกรณีนี้


1
ฉันคิดว่าฉันเคยเห็น ... หัวข้อที่คล้ายกันมีแนวคิดเกี่ยวกับการใช้กฎเพื่อสร้างรายการที่ใช้ taxonomy ในเมนู แต่นั่นก็ดูไม่เหมาะเช่นกัน
Mołot

ถ้าฉันเข้าใจถูกต้องคุณดูเหมือนว่าโมดูลนี้drupal.org/project/taxonomy_treemenuมันสามารถรวมเข้ากับเมนูที่ดี แต่สำหรับ D6
Bala

คุณจำเป็นต้องมีรายการเมนูจริงหรือเป็นไปได้หรือไม่ที่จะเพิ่มโครงสร้างของคำศัพท์อนุกรมวิธานลงในเมนูเมื่อมีการแสดงผล
rooby

ขอบคุณ @Bala ต้องการโซลูชัน D7
Clive

1
คลีฟฉันมีหนึ่งข้อเสนอแนะ อย่างที่ฉันรู้ว่าคุณสามารถสร้างเมนู taxonomu โดยมีชื่อคำศัพท์รวมอยู่แล้วเพียงแค่เพิ่มลิงค์เมนูอื่น ๆ ลงในเมนูที่สร้างขึ้นโดยตรง รายการ Taxonomy อาจได้รับการอัปเดตโดยอัตโนมัติ ... ฉันไม่ทราบว่าจะใช้งานได้หรือไม่ลองดู
milkovsky

คำตอบ:


13

ตัวเลือกก) นอกจากฉันเข้าใจผิดคุณไม่สามารถเลือกว่าจะให้เมนู Taxonomy (ตำแหน่งเมนู) ของคุณถูกสร้างขึ้นหรือไม่? ปัญหาเดียวที่ฉันคิดว่าคุณอาจได้รับจากสิ่งนี้คือฉันคิดว่าคุณต้องสร้างเมนูใหม่ทุกครั้งที่มีการอัปเดตอนุกรมวิธาน

ตัวเลือก b) ฉันได้ทำบางสิ่งที่มีเหตุผลคล้ายกับสิ่งนี้บนเว็บไซต์ของฉันฉันใช้โมดูลมุมมองเมนูเพื่อให้ฉันใส่มุมมองลงในเมนูหลักของฉัน

หากคุณสร้างมุมมองใหม่ซึ่งแสดงรายการคำศัพท์ทางภาษีทั้งหมดของคุณในฐานะบล็อกแสดงให้ใช้การกรอง / ดัดแปลงเพิ่มเติมในมุมมองหากจำเป็น (คุณอาจไม่ใช่ แต่ในตัวอย่างของฉันที่ฉันต้องการ) จากนั้นเมื่อคุณเพิ่มลิงค์ใหม่ไปยังเมนูหลักของคุณคุณสามารถเลือกที่จะใช้มุมมองมากกว่าที่จะลิงค์ จากตรงนั้นคุณเลือกมุมมองที่คุณต้องการใช้เลือกรายการเมนู 'หมวดหมู่' เป็นพาเรนต์และบันทึก (หลังจากบันทึกคุณจากนั้นต้องเปิดใช้งานในเมนูซึ่งดูเหมือนจะเป็นบั๊กกับโมดูลเอง)

ฉันไม่สามารถรับประกันได้ว่านี่จะเป็นทางออกที่ดีที่สุดสำหรับคุณ แต่ใช้ได้เมื่อฉันเพิ่งทดสอบ


1
ใช่กลายเป็นว่าฉันค่อนข้างงี่เง่า - Taxonomy Menu มีฟังก์ชั่นที่แน่นอนนี้อยู่ภายใน (ตัวเลือกของคุณก) เมนูเฉพาะที่ฉันกำลังทำอยู่นั้นค่อนข้างเล็กและหมวดหมู่จะไม่เปลี่ยนแปลงบ่อยนักดังนั้นการสร้างใหม่ก็ไม่เป็นปัญหา ขอบคุณมากสำหรับการตรวจสุขภาพ
Clive

3

Menupolyมี API สำหรับ "เมนูต้นไม้ที่มา" ฉันไม่เคยใช้สิ่งนี้เพื่อสิ่งอื่นนอกจากลิงค์เมนูดังนั้นอาจมีปัญหาที่เราต้องแก้ไขระหว่างทาง แต่มีสถาปัตยกรรมพื้นฐานอยู่ที่นั่น

ถ้าคุณไปเส้นทางนี้คุณจะ

  • ใช้เมนูหลักที่มีอยู่ของคุณโดยไม่มีลิงก์คำศัพท์ทางภาษีนอกเหนือจากหน้า "หมวดหมู่"
  • สร้างแผนภูมิอนุกรมวิธานของคุณโดยอิสระ
  • เขียน "แหล่งที่มาของเมนูต้นไม้" ที่กำหนดเองซึ่งดึงมาจาก menu_links ตามปกติ แต่เมื่อพบคำศัพท์อนุกรมวิธานมันจะดึงมาจากอนุกรมวิธานแทน
    ดังนั้นคุณต้องตรวจสอบได้ว่าลิงก์ "หมวดหมู่" นั้นเกี่ยวข้องกับอนุกรมวิธาน
  • หากลิงก์เมนูเกี่ยวข้องกับอนุกรมวิธานและในขณะเดียวกันก็มีเมนูย่อยปกติคุณต้องผสมลูกสองประเภทเข้าด้วยกัน

เส้นทางนี้อาจใช้งานได้ แต่อาจมีประโยชน์สำหรับผู้อื่นและอาจมีความสวยงามและสามารถใช้ซ้ำได้มากกว่าตรรกะเฉพาะไซต์ของคุณ

ขณะนี้ไม่ได้มีเพียง "แหล่งกำเนิดเมนูต้นไม้เท่านั้น" อยู่ด้วยดังนั้นอาจเป็นขั้นตอนแรกที่สมเหตุสมผลก่อนเริ่มด้วยปลั๊กอินผสม


สิ่งนี้ถูกกล่าวว่าคำตอบที่ได้รับการยอมรับโดย Andrew Morris อาจดีพอสมควร และมันก็ทำงานน้อยลงสำหรับฉัน :) ยังต้องการโพสต์สิ่งนี้สำหรับทุกคนที่อาจเห็นว่ามีประโยชน์
donquixote

V. น่าสนใจขอบคุณ คำตอบที่ได้รับการยอมรับคือการทำงานได้ดี แต่ฉันสนใจที่จะรับการแก้ปัญหาด้วยรหัสเช่นกัน ฉันสามารถสันนิษฐานได้ไหมว่ามันเป็นหนึ่งในโมดูลของคุณที่สร้างขึ้นจากความดีของ PSR-0? :)
คลีฟ

อันนี้ใช้โหมดความเข้ากันได้กับ PHP 5.2 ของ xautoload ซึ่งคล้ายกับ PEAR แต่มีไดเรกทอรีตื้น ดังนั้นไม่อนุมัติ PSR ผมอาจจะไป PSR-0 บางวัน ..
donquixote

แม้ว่าฉันจะสนใจ PSR-X มาก (ซึ่งอาจไม่เคยเข้าสู่ D8, เศร้า)
donquixote

2

เมนูเมโทรจะทำตามความต้องการของคุณและแม้จะมีสกินในตัวและสามารถสร้างของคุณเองซึ่งทำหน้าที่เหมือนเมนูที่ดี พร้อมด้วยโมดูลนี้คุณสามารถเลือกรายการย่อย ๆที่มีความลึกใด ๆ จากเมนูหรืออนุกรมวิธานและฉันไม่ได้ใช้แบบนี้มาก่อน

เข้ากันได้กับหน้าจอสัมผัส (iPad, iPhone และอื่น ๆ )

ป้อนคำอธิบายรูปภาพที่นี่


2

คุณสามารถใช้โมดูลเมนู Om Maxi ได้เช่นเดียวกัน มันจะช่วยให้ผู้ดูแลระบบสามารถสร้างเมนูที่มีบล็อกที่คุณต้องการเป็นสิ่งที่แนบมาโมดูลเช่นมุมมองสไลด์โชว์เมนูผู้ใช้เมนูดีแท็บด่วนและบล็อกที่กำหนดเองพร้อมตารางรายการรูปภาพวิดีโอ ฯลฯ

คุณสามารถสร้างเมนูแยกโดยใช้เมนูTaxonomyและสามารถแนบเมนูนี้เป็นลิงค์ย่อยไปยังเมนูที่สร้างโดยเมนู om maxi

ขอบคุณ


2

ฉันเพิ่งทำสิ่งที่คล้ายกันสำหรับเมนูหมวดหมู่ผลิตภัณฑ์ นี่เป็นเพียงระดับ 1 ลึก แต่สามารถแก้ไขได้ง่ายเพื่อแสดงระดับต่อไป

/**
 * Implements theme_menu_link().
 */
function THEME_menu_link__main_menu($variables) {

  $sub_menu = '';
  $element = $variables['element'];
  $menu_string = $element['#title'];

  if (module_load_include('inc','pathauto','pathauto') !== FALSE) {
    $menu_string =  pathauto_cleanstring($menu_string);
  }

  if ($menu_string == 'categories') {
    $sub_menu = get_categories_menu();
  }

  if ($sub_menu) {
    $element['#attributes']['class'][] = 'haschildren';
  }

  $output = l($element['#title'], $element['#href'], $element['#localized_options']);
  return '<li' . drupal_attributes($element['#attributes']) . '>' . $output . $sub_menu . "</li>\n";
}

function get_categories_menu() {

  $current_category = arg(2); // Get current category from path
  $volcab = taxonomy_vocabulary_machine_name_load('product-categories');
  $tree = taxonomy_get_tree($volcab->vid,0,1);

  $output = '<ul class="menu product-category">';
  foreach ($tree as $term) {
    $safe_term = pathauto_cleanstring($term->name);
    $class = ($current_category==$safe_term) ? ' class="active"' : '';
    $output .= '<li><a' . $class . ' href="/drupal//path/to/' . $safe_term . '">' . $term->name . '</a></li>';
  }
  $output .= '</ul>';

  return $output;
}

ฟังก์ชั่น get_category_menu นั้นดีกว่าแบบบล็อก แต่แสดงที่นี่เป็นฟังก์ชันอื่นใน template.php เพื่อความสะดวก

หวังว่ามันจะช่วยหรืออย่างน้อยก็เป็นขั้นตอนต่อการแก้ปัญหา

พอล

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