تفصل جميع المرشحات المكشوفة في دروبال مع بعضها البعض وجعل كل مرشح مكشوف ككتلة منفصلة

StackOverflow https://stackoverflow.com/questions/3602063

سؤال

لقد قمت بإنشاء نوع محتوى مخصص واستخدام Views2 لإنشاء وجهات نظر مختلفة. لقد استخدمت تصنيفًا (لدي 4 شروط ، على سبيل المثال "أ", "ب", "ج" و "د") للحصول على تصنيف أوسع لنوع المحتوى هذا. هناك 4 تصنيفات أخرى تتوافق مع كل من الشروط المذكورة أعلاه "أ", "ب", "ج" و "د" اتصل "تصنيف أ", "تصنيف ب", "التصنيف" و "التصنيف" التي تستخدم لزيادة تصنيف هذا النوع من المحتوى في فئة معينة (قل "أ" أو "ب" إلخ.). الفئة الفرعية "تصنيف أ" مرئي في نموذج تحرير العقدة فقط إذا كانت فئة أوسع "أ" تم الإختيار. مماثل هو الحال مع "ب", "ج" و "د" التصنيفات. الآن في عرض صفحتي ، استخدمت شروط التصنيف "أ", "ب", "ج" و "د" كحجيلاتي الأولى لعنوان URL. وبالتالي عنوان URL التالي

www.example.com/A

يوفر جميع أنواع المحتوى المخصص المنشورة من "الفئة A". ستكون الحالات المماثلة لـ "الفئة B" ، "الفئة C" إلخ. التصنيف-A "،" التصنيف-B "،" التصنيف-C "و" التصنيف-D ". الآن أود أن أعرض مرشحًا واحدًا فقط على كل نوع من "عرض الصفحة" ؛ أي
مرشح المقابل لـ "التصنيف-أ" على www.example.com/A عرض الصفحة
مرشح المقابل لـ "التصنيف-ب" على www.example.com/B عرض الصفحة
مرشح المقابل لـ "التصنيف-C" على www.example.com/c عرض الصفحة الخ.

إذا قمت بتكوين الإعداد الأساسي للعرض لإظهار المرشح في كتلة منفصلة ، فإن كتلة التصفية تحتوي على جميع زر تطبيق المرشحات الأربعة. لكنني أريد أن أعرض مرشحًا واحدًا فقط (استنادًا إلى الوسيطة الأولى لـ URL) مع زر تطبيق.

في الواقع ، أود فصل جميع المرشحات المكشوفة مع بعضها البعض وجعل كل مرشح مكشوف ككتلة منفصلة يمكن تعيينها في منطقة قالب.هل من الممكن تحقيق ذلك عن طريق العلم (كل عنصر محدد في نموذج المرشحات المكشوفة لديه "معرف" مختلف)؟ وإلا فإن الخيار الوحيد المتبقي معي هو إنشاء أنواع محتوى منفصلة لكل فئة "أ", "ب", "ج" و "د", ، وهو ليس حلاً عمليًا إذا كان عدد الفئات كبيرًا.

كيف يمكنني تحقيق هذا؟

شكرا مقدما لردكم !!

هل كانت مفيدة؟

المحلول

1. سوبر بقعة

حسنًا ، تتمثل الطريقة التي تتمثل في إلقاء نظرة على كيفية تعديل طرق العرض لتصريح المرشحات المعرضة المختلفة في كتل مختلفة ، وربما تحددها إعداد كتلة دلتا في التكوين لكل مرشح. سيكون ذلك أنيقًا.

2. حفر مبالغة/زائدة/fapi-hook_block ()

احصل على الكتلة المكشوفة ، ثم استخدمها hook_form_alter() لإخفاء المرشحات التي تريد وضعها على كتلة مختلفة. ثم قم بإنشاء كتل جديدة برمجيًا في وحدة نمطية جديدة (أو إذا كان عليك تمامًا ، وحدة تصفية PHP وكتلة مخصصة من خلال واجهة المستخدم الرسومية). في تلك الوحدة ، قم بتكرار عناصر النموذج التي تحتاجها في تلك الكتلة ، بما في ذلك المرشح المكشوف الفريد. من المفيد أن تتذكر أن المرشحات المكشوفة لا تهتم بالنموذج. إنهم يهتمون بـ Querystring. يمكنك كتابة وسائط التصفية الخاصة بك في عنوان URL إذا لزم الأمر.

3. التعديل الشرطي

قم بتنفيذ hook_form_alter () للنموذج المعروض في المرشح المكشوف. لتحديد هذا النموذج ، ستحتاج أولاً إلى الحصول على المعرف لـ views_exposed_form (لست متأكدًا من ذلك) ثم احصل على تحديد أكثر تحديدًا من صفيف النماذج لاستهداف هذا النموذج المكشوف فقط. (ستحتاج إلى هذا للنهج رقم 2 على أي حال).

الآن بعد أن حصلت على ذلك ، يمكنك القيام بأمرين. أولاً ، ضع في اعتبارك أنه إذا كنت عدوانيًا بشأن التخزين المؤقت لهذه الكتلة بطريقة gbal ، فسوف ينهار ذلك. ذاكرة التخزين المؤقت لكل صفحة ، أو في أي تفاصيل تنوي تغيير الكتلة. لكل مرشح تريد إخفاءه ، سوف تضع بعض المنطق في $form['#access'] لذلك يمكن لـ Drupal أن تنظر إلى عنصر النموذج ، وإلقاء نظرة على الصفحة التي يتم تشغيلها ، وإخفاء عنصر النموذج هذا لأنه ليس قيد الاستخدام.

إذا صادفك أن تعتمد على مسار الصفحة الحالي ، فقد تفعل شيئًا كهذا:

$form['taxonomy_b_filter']['#access'] = arg(0) == 'section';

هذا يخبر Drupal بإخفاء عنصر "التصنيف uxonomy_b_filter" الخيالي إذا بدا مسار الصفحة الحالي http://example.com/section.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top