لنفترض أن لديك الصفحات التالية في شجرة قائمة:
أنا أبحث عن طريقة لإنشاء طريقة عرض سيتم تضمينها في صفحة المشروع (الأصل) والتي ستعرض صورة وعنوان ونص (ملخص) من الصفحات الفرعية.
يتم تعريف العلاقة بين الوالدين والأطفال في شجرة القائمة.
أعلم أنه يمكنني استخدام مرجع العقدة ، ولكن هذا يعني أنه في كل مرة يقوم فيها شخص ما بإنشاء صفحة ، سيتعين عليه تحديد علاقة القائمة ثم علاقة مرجع العقدة.
أعلم أيضًا أنه يمكنني إنشاء نوع محتوى آخر ولكن أعتقد أن هذا مبالغ فيه حيث تبدو جميع صفحات المحتوى متشابهة.
أحد الحلول هو استخدام مصطلحات التصنيف لتحديد العلاقات ثم استخدام وحدة قائمة التصنيف لترجمة علاقات المصطلحات هذه إلى عناصر القائمة. يمكنك بعد ذلك استخدام وحدة الصفحة المخصصة ووحدات السياق للتحكم في المعلومات والمناطق في جميع الصفحات إذا كنت لا تريد استخدام اللوحات.
يمكنك القيام بذلك بالضبط باستخدام Menu Node API و Menu Node Views الوحدات النمطية.
أنشئ طريقة عرض بنوع المحتوى المطلوب ، واختر عامل تصفية سياقي لـ "القائمة: معرف ارتباط القائمة" (لا يتوفر هذا إلا مع الوحدات المذكورة أعلاه مثبتة).
ضمن "عندما لا تكون قيمة الفلتر متاحة" ، حدد "تقديم القيمة الافتراضية" واختر "كود PHP".
سيقوم المقتطف التالي بذلك ، ثم تقوم فقط بكشف كتلة من العرض وأنت هناك:
if (function_exists('menu_node_get_links')){
$node = node_load(intval(arg(1)));
if (isset($node->menu_node_links)){
foreach($node->menu_node_links as $mlid=>$data){
return $mlid;
}
}
}
تسمح Node Hierarchy Module بهذا النوع من العلاقات ، بالإضافة إلى توفير تكامل المشاهدات.
يسمح التسلسل الهرمي للعقد أن تكون العقد تابعة للعقد الأخرى التي تنشئ تسلسلاً هرميًا للمحتوى يشبه الشجرة. تقدم الوحدة:
- 1-انقر فوق إنشاء قوائم هرمية
- فتات الخبز الهرمية
عناوين url الهرمية التلقائية باستخدام Pathauto (ووحدة الرمز المميز)
(على سبيل المثال: q = aboutus/history/البداية).
- إنشاء قوائم هرمية تلقائيًا إذا رغبت في ذلك.
- تكامل المشاهدات الاختيارية.
- اختياري Node تكامل الوصول.
ربما تغير هذا بالنسبة إلى D7/طرق العرض 3 ، ولكنك لست بحاجة إلى أي PHP من أجل تحقيق السلوك المطلوب:
هاهو. إنه لا ينبغي أن يعمل ، ولكنه يعمل.
يعمل بشكل جيد مع العقد فقط ، ولكن ميزة استخدام روابط القائمة عبر التسلسل الهرمي للعقد هي أنك لا تقتصر على بناء التنقل حول العقد. يمكنك حتى تضمين روابط خارجية في وجهة نظرك.
هناك وحدة نمطية جديدة نسبيًا قائمة المشاهدات Node Filter Filter يبدو أنها تفعل ما تريده بالضبط:
تضيف هذه الوحدة مرشحًا سياقيًا إلى طرق العرض التي تقوم باسترداد العقد الفرعية للعقدة وفقًا لبنية القائمة.
إذا كنت تستخدم ترجمة الكيان وترتبط العقدة بقوائم مختلفة ، فإليك تعديل للرمز الذي يرشح اللغة الحالية. أنت بحاجة إلى نسخ هذا كـ PHP لعامل التصفية السياقي (معرف ارتباط القائمة الرئيسية) في طريقة العرض الخاصة بك كما هو موضح في الإجابات الأخرى
if (function_exists('menu_node_get_links')) {
global $language;
$lang = $language->language;
$node = node_load(intval(arg(1)));
if (isset($node->menu_node_links)) {
foreach ($node->menu_node_links as $mlid => $data) {
if ($lang == $data->language) {
return($mlid);
}
}
}
}
الجواب من Emile صحيح ، لكن كان علي أن ألصق الرمز المذكور PHP code in a contextual filter من النوع " القائمة: معرف ارتباط القائمة الرئيسية ".
if (function_exists('menu_node_get_links')){
$node = node_load(intval(arg(1)));
if (isset($node->menu_node_links)){
foreach($node->menu_node_links as $mlid=>$data){
return $mlid;
}
}
}
هل فكرت في استخدام مرجع العقدة لهذا الغرض؟
وبالتالي يمكنك تحقيق نتيجة مشابهة ربما تبحث عنها.
من قائمة انتظار الإصدار من القائمة Node المشاهدات لدينا هذا الحل الجميل:
أدخل الرمز التالي
$menu_item = menu_get_active_trail();
$current_item = array_pop($menu_item);
$menu_item_plid = $current_item['plid'];
return $menu_item_plid;