قائمة طعام
مجاني
التسجيل
الصفحة الرئيسية  /  إنترنت/ تغيير القائمة العلوية. PdoMenu - إنشاء قائمة في القائمة الرأسية MODX Modx

تغيير القائمة العلوية. PdoMenu - إنشاء قائمة في القائمة الرأسية MODX Modx

مقتطف إنشاء القائمة. يمكن أن يحل محل Wayfinder ، ويسمح بمزيد من المرونة في تحديد المعلمات.

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

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

خيارات

بشكل افتراضي ، يقبل pdoMenu معلمات pdoTools العامة وبعض المعلمات الخاصة به:

اسم تقصير وصف
& الآباء المورد الحالي قائمة الآباء لنتائج البحث ، مفصولة بفواصل. إذا وضعت & الوالدين = `0`- العينة غير محدودة. إذا بدأ معرّف الوالدين بواصلة ، فسيتم استبعاده وأبنائه من التحديد.
& مستوى 0 (غير محدود) تم إنشاء مستوى القائمة.
& مصادر قائمة الموارد المراد عرضها في النتائج ، مفصولة بفواصل. إذا بدأ معرف المورد بواصلة ، فسيتم استبعاد هذا المورد من التحديد.
& القوالب قائمة قوالب لتصفية النتائج ، مفصولة بفواصل. إذا بدأ معرف القالب بواصلة ، يتم استبعاد الموارد الموجودة به من التحديد.
& أين مصفوفة بتشفير JSON من معاملات الجلب الإضافية.
& عرض 0 تفعيل عرض عقد بدء القائمة. مفيد عند تحديد أكثر من والد واحد.
& سياق الكلام تقييد الاختيار حسب سياق المورد.
& أظهر المخفي 0 إظهار الموارد المخفية في القائمة.
& إظهار غير منشورة 0 إظهار الموارد غير المنشورة.
& معاينة غير منشورة 0 قم بتمكين عرض الموارد غير المنشورة إذا كان لدى المستخدم إذن للقيام بذلك.
& إخفاء القوائم الفرعية 0 إخفاء فروع القائمة غير النشطة.
& تحديد قائمة الحقول المراد تحديدها ، مفصولة بفواصل. يمكنك تحديد سلسلة JSON مع مصفوفة ، على سبيل المثال & select = `(" modResource ":" id ، pagetitle ، content ")`
& صنف حسب Menuindex أي حقل مورد للفرز ، بما في ذلك معلمة TV ، إذا تم تحديده في المعلمة & includeTVs، على سبيل المثال & Sortby = `(" tvname ":" ASC "،" pagetitle ":" DESC ")`... يمكنك تحديد سلسلة JSON بمصفوفة من عدة حقول. للفرز العشوائي ، حدد & sortby = `RAND ()`
& فرز ASC اتجاه الفرز: تنازلي أو تصاعدي. إذا تركت المعلمتين & Sortby و & sortdir فارغة ، فسيتم إجراء الفرز بترتيب الموارد في & مصادر.
& حد 0 الحد من عدد نتائج العينة.
& عوض 0 تخطي النتائج من البداية. يجب أن تستخدم جنبًا إلى جنب مع المحدد صراحةً & حد
والتحقق من الأذونات حدد الأذونات التي يجب على المستخدم التحقق منها عند عرض الموارد ، على سبيل المثال & checkPermissions = `القائمة`.
& عد الأطفال 0 حساب دقيق لعدد الموارد التابعة لكل فئة وعرضها في العنصر النائب [[+ الأطفال]]. يقوم بعمل استعلامات إضافية لقاعدة البيانات ، لذلك يتم تعطيلها افتراضيًا.
& toPlaceholder إذا لم يكن فارغًا ، فسيحفظ المقتطف جميع البيانات في عنصر نائب بهذا الاسم بدلاً من عرضها على الشاشة.
& plPrefix wf. بادئة العناصر النائبة الموضوعة.
& إظهار السجل 0 إظهار معلومات إضافية حول عمل المقتطف. فقط لأولئك المصرح لهم في سياق "المونسنيور".
& وضع سريع 0 وضع معالجة القطع السريع. سيتم قطع جميع العلامات الأولية (الشروط والمقتطفات وما إلى ذلك).
& مخبأ 0 ذاكرة التخزين المؤقت لنتائج المقتطف.
& cacheTime 3600 وقت صلاحية ذاكرة التخزين المؤقت بالثواني.
& مخطط -1 يتم تمرير مخطط تشكيل عنوان url إلى modX :: makeUrl () ، لذلك هناك حاجة إلى الخيارات الممكنة. يستبدل نوع uri الخاص قيمة uri للمورد دون تشغيل الوظيفة.
& useWeblinkUrl 1 إنشاء ارتباط على أساس فئة الموارد.
& rowIdPrefix معرف البادئة = "" لتعيين المعرف في المقطع.
& هنا معرف المورد الحالي للقائمة التي تم إنشاؤها. تحتاج إلى تحديده فقط إذا كان البرنامج النصي نفسه يعرفه بشكل غير صحيح ، على سبيل المثال ، عند عرض قائمة من جزء من مقتطف آخر.
& includeTVs قائمة معلمات التلفزيون للاختيار ، مفصولة بفواصل. على سبيل المثال & includeTVs = `الإجراء ، الوقت`سيعطي العناصر النائبة [[+ إجراء]] و [[+ الوقت]].
وتجهيز التلفزيونات قائمة معلمات التلفزيون ، مع ملفات من مصادر الوسائط ، والتي يلزم إنشاء مسارات كاملة لها. إذا قمت بتثبيت ملفات & تحضير التلفزيونات = `1`، جميع أجهزة التلفزيون المحددة في & includeTVs.
و processTVs قائمة معلمات التلفزيون المراد معالجتها وعرضها وفقًا لإعداداتها في مدير النظام. إذا قمت بتثبيت ملفات & processTVs = `1`، جميع أجهزة التلفزيون المحددة في & includeTVs... يبطئ العمل.
& tvPrefix بادئة لمعلمات التلفزيون.

معلمات القالب

تحدد هذه المعلمات الأجزاء التي تحتوي على قوالب لإنشاء القوائم.

اسم وصف
& tplOuter جزء من تصميم كتلة القائمة بأكملها. الافتراضي:INLINE
    [[+ غلاف]]
& tpl جزء من تصميم عنصر القائمة. إذا لم يتم تحديده ، فستتم طباعة محتوى حقول الموارد على الشاشة. الافتراضي:INLINE
  • [[+ عنوان القائمة]] [[+ غلاف]]
  • & tpl هنا جزء من تصميم عنصر القائمة الحالي.
    & tpl ابدأ جزء من تسجيل العنصر الجذر ، بشرط أن يتم تضمينه & عرض... الافتراضي:INLINE

    [[+ عنوان القائمة]]

    [[+ غلاف]]
    & tplParentRow جزء من تصميم الوالد الذي له أحفاد لا يتطابق مع شروط & tplCategoryFolder. على سبيل المثال:INLINE
    & tplParentRowHere جزء من تصميم المستند الحالي ، إذا كان يحتوي على توابع.
    & tplParentRowActive جزء من تسجيل الوالدين مع أحفادهم في فرع القائمة النشط.
    & tplCategoryFolder قطعة خاصة للفئة. تعتبر الفئة أصلًا لها أطفال ، ولديها نموذج فارغ أو rel = "category" في الحقل link_attributes.
    & tplInner جزء من تصميم الكتلة الكاملة لعناصر القائمة الفرعية. إذا كان فارغًا ، فسيتم استخدامه & tplOuter... على سبيل المثال:INLINE
    & tplInnerRow جزء من تسجيل عنصر فرعي من القائمة. على سبيل المثال:INLINE
    & tplInnerHere جزء من تسجيل العنصر الفرعي النشط في القائمة.

    معلمات فئة CSS

    تحدد هذه المعلمات قيمة العناصر النائبة [[+ classnames]] و [[+ classnames]] لعناصر القائمة المتنوعة. يعرض العنصر النائب [[+ classnames]] اسم الفئة فقط بدون سمة فئة = ""، على عكس العنصر النائب [[+ فئات]].

    أمثلة على

    إخراج القائمة العادي من جذر الموقع إلى مستوى واحد:

    []

    الإخراج باستثناء الآباء المحددين والتحقق من أذونات المستخدم:

    []

    عرض قائمة من والدين في وقت واحد ، مع إظهار نقاط الجذر:

    []

    عرض مستويين من الموارد ، مع حساب عدد الموارد المتداخلة:

    [] `& tplParentRow =` @ INLINE

  • [[+ عنوان القائمة]] ([[+ الأطفال]])
  • [[+ مجمّع]] `& countChildren =` 1`]]



    وايفيندريعمل على تنظيم قوائم الروابط لمودكس. بفضل دعم القوالب ، يتيح لك عرض القوائم بأي شكل ضروري:
    • قائمة في شكل قائمة ، وجدول ، وصور ، وأيقونات ، إلخ.
    • القوائم الثابتة
    • قوائم ذات تأثيرات مختلفة (قائمة منسدلة ، قائمة منسدلة ، إلخ.)
    • خريطة الموقع
    مثال على الاتصال:


    & rowTpl = `rowTpl`
    & extraTpl = `OuterTpl`
    & hereClass = `active`
    & rowClass = `eNav_li`]]

    معلمات المقتطف:

    & startId- معرف الصفحة الرئيسية ، إذا حددت 0 ، فسيكون من جذر الموقع. الافتراضي هو معرف الصفحة النشطة

    & عرض - إظهار المستند مع startId في عنوان القائمة ، خطأ افتراضي

    & مستوى- عمق التداخل ، افتراضيًا 0 - جميع المستويات

    & حد- تحديد عدد الصفحات في الإخراج (الافتراضي 0 - بلا حدود)

    & تجاهل مخفي- تجاهل مربع الاختيار في صفحة "إظهار في القائمة" ، على سبيل المثال إذا حددت 1 ، فسيتم عرض جميع الصفحات. القيمة الافتراضية هي 0. يتم فقط عرض الصفحات التي تم تحديد مربع الاختيار "إظهار في القائمة"

    & فتاه - اسم البديل للنتائج المعروضة مباشرة. الافتراضي هو 0.

    & تصحيح- وضع التصحيح (الافتراضي 0)

    & إخفاء القوائم الفرعية - توسيع القائمة الفرعية النشطة فقط (الافتراضي 0)

    & إزالة خطوط جديدة- يزيل حرف تغذية السطر عند الإخراج (افتراضي 0)

    & textOfLinks- لاسم ارتباط القائمة. الخيارات الممكنة:عنوان القائمة ، المعرف ، عنوان الصفحة ، الوصف ، الأصل ، الاسم المستعار ، العنوان الطويل ، النص الداخلي. تقصيرعنوان القائمة

    & titleOfLinks- للحصول على عنوان ارتباط القائمة الخيارات:عنوان القائمة ، المعرف ، عنوان الصفحة ، الوصف ، الأصل ، الاسم المستعار ، العنوان الطويل ، النص الداخلي. تقصيرعنوان الصفحة

    & rowIdPrefix- يحدد id (rowIdPrefix + docId) لكل عنصر. الافتراضي 0

    & تشمل المستندات- معرف المستندات مفصولة بفواصل التي سيتم تضمينها في القائمة (غير محدد بشكل افتراضي)

    & استبعاد المستندات - معرف المستندات مفصولة بفواصل ، والتي سيتم استبعادها من القائمة (الافتراضي 0)

    & السياقات- سياق لتوليد القائمة. الافتراضي هو الحالي.

    & startIdContext - معرّف السياق الذي يتم أخذ المستندات منه لتشكيل النتيجة.

    & التكوين - ملف PHP خارجي لتخزين تكوين Wayfinder (مثال: core / المكونات / wayfinder / configs).

    & مخطط - تنسيق لتوليد URL. القيم الممكنة (بناءً على استدعاء makeURL API):

    1: (افتراضي) URL ذو صلة بـ site_url ؛

    0: انظر http ؛

    1: انظر https ؛

    كامل: عنوان URL مطلق يبدأ بـ site_url ؛

    abs: عنوان URL مطلق يبدأ بـ base_url ؛

    http: عنوان URL مطلق ، تم إجباره على مخطط http ؛


    https: عنوان URL مطلق ، تم إجباره على مخطط https.

    & صنف حسب - المجال الذي يتم من خلاله الفرز. (إفتراضي Menuindex)

    الخيارات هي:

    هوية شخصية،عنوان القائمة ، عنوان الصفحة ، النص الداخلي ، menuindex ، المنشور ، hidemenu ، الأصل ، isfolder ، الوصف ، الاسم المستعار ، العنوان الطويل ، النوع ، القالب

    & امر ترتيب- ترتيب الفرز."ASC" أو "DESC". افتراضي ASC

    & أين - معلمات مرشح نمط JSON (تطابقات أين في MySQL)... على سبيل المثال ، عندما تريد إخفاء مدونة أو أخبار من إضافة المقالات: & where = `[(" class_key :! = ":" article ")]`
    أمثلة:
    إخراج المجلدات فقط: & where = `isfolder = 1

    & هنا - حدد المعرف الحالي لاستخدامه في المقتطف. استخدم القيمة [[* id]] إذا تم تحديد القالب باستخدام المعلمة hereTpl ولم يتم تطبيق activeRowParentTpl بشكل صحيح في عنصر القائمة. بشكل افتراضي ، المعرف الحالي.
    تحتاج إلى تحديده فقط إذا كان البرنامج النصي نفسه يعرفه بشكل غير صحيح ، على سبيل المثال ، عند عرض قائمة من جزء من مقتطف آخر.

    & هنا - يتم استخدام نموذج hereTpl عند عرض العنصر الحالي في القائمة.
    العناصر النائبة المحتملة:
    [[+ wf.classes]] - مكان لتحديد فئة CSS المستخدمة (بما في ذلك class = "")
    [[+ wf.classnames]] - يحتوي فقط على اسم فئة CSS (لا يشمل class = "")
    [[+ wf.link]] - عنوان (href) للارتباط
    [[+ wf.title]] - نص عنوان الرابط
    [[+ wf.linktext]] - نص عنوان الارتباط
    [[+ wf.wrapper]] - مكان لعرض القائمة الفرعية
    [[+ wf.id]] - عرض معرف فريد (معرف)
    [[+ wf.attributes]] - عرض سمات ارتباط إضافية
    [[+ wf.docid]] - معرف المستند للعنصر الحالي
    [[+ wf.subitemcount]] -عدد العناصر في المجلد
    [[+ wf.description]] - يعرض قيم حقل الوصف
    [[+ wf.introtext]] - يعرض قيم حقل النص الداخلي

    نموذج نموذج: [[+ wf.linktext]] [[+ wf.wrapper]]

    معلمات القالب

    تحدد هذه المعلمات الأجزاء التي تحتوي على قوالب ستولد مخرجات Wayfinder.

    في الإصدار الحالي من Wayfinder for MODX Revolution ، يمكنك الوصول إلى التلفزيون المخصص الخاص بك باستخدام العناصر النائبة لبادئة wf. على سبيل المثال [[+ my_TV]]

    في وقت كتابة هذا التقرير ، سيتم إرجاع قيم التلفزيون الأصلية فقط - لن يتم تنسيقها. على سبيل المثال ، إذا كان التلفزيون الخاص بك عبارة عن صورة - فإن الاستخدام المعتاد لمثل هذا التلفزيون داخل القالب الخاص بك سيعيد العلامة الكاملة للصورة ، ولكن داخل نموذج Wayfinder - سيتم إرجاع المسار إلى الصورة فقط.

    إذا كنت تريد التعامل مع التلفزيون ، فيمكنك القيام بذلك عن طريق استدعاء مقتطف داخل قالب صف Wayfinder (& rowTpl. على سبيل المثال ، يتم تسمية صورة التلفزيون الخاصة بك أيقونةوعادة ما يتم استخدام الكود التالي للإخراج في القالب:

    ... ...

    ولكن نظرًا لأن ذلك لن يسمح لك بالتعامل مع التلفزيون ، فأنت بحاجة إلى استبداله بـ:

    ... ...

    والآن نضع كود PHP التالي داخل مقتطف processTV:

    getObject ("modResource"، $ myId)؛ return $ doc-> getTVValue ($ myTV) ؛

    نتيجة لذلك ، يتم إرجاع صورة تليفزيونية تمت معالجتها بالكامل.

    & خارجي

    اسم القطعة التي تحتوي على قالب الحاوية الخارجية.

    العناصر النائبة المتوفرة:

    • wf.classes - يعرض الفئات المأخوذة من مجموعة من معلمات Wayfinder (بما في ذلك سمة class = "")
    • wf.classnames - عرض أسماء الفئات (بدون class = "")
    • wf.wrapper - يعرض المحتوى الداخلي (الصف).
      [[+ wf.wrapper]]

    تحتوي المعلمة & innerTpl على نفس مجموعة العناصر النائبة مثل & OuterTpl.

    & rowTpl

    اسم مجموعة يحتوي على نموذج لعناصر صفوف القائمة.

    العناصر النائبة المتوفرة:

    • wf.classes - إخراج الفئة (بما في ذلك السمة class = "")
    • wf.classnames - عرض الفئات المقابلة (بدون class = "")
    • wf.link - قيمة السمة href = "" لارتباط القائمة
    • wf.title - اسم نص العنوان للارتباط من الحقل المحدد في المعلمة & titleOfLinks
    • wf.linktext - نص الرابط النشط المحدد في الحقل الذي تم تمريره في المعلمة & textOfLinks
    • wf.wrapper - يعرض المحتوى الداخلي ، مثل قائمة فرعية
    • wf.id - يعرض المعرف الفريد للسمة. تحتاج إلى تحديد المعلمة & rowIdPrefix لكي يتلقى هذا العنصر النائب قيمة. القيمة هي بادئة docId.
    • wf.attributes - لطباعة ارتباط السمة للعنصر الحالي
    • wf.docid - معرف المستند للعنصر الحالي
    • wf.description - وصف العنصر الحالي
    • wf.level - مستوى التداخل الحالي

    مثال على الاستخدام:

    [[+ wf.linktext]] [[+ wf.wrapper]]

    خيار اخر:

  • [[+ wf.linktext]] - [[+ wf.description]] [[+ wf.wrapper]]

  • أمثلة على

    مستوى اول


    [[! Wayfinder؟ & startId = `0` & المستوى =` 1`
    & rowTpl = `rowTpl`
    & extraTpl = `OuterTpl`
    & hereClass = `active`
    & rowClass = `eNav_li`]]

    كود مقطع خارجي



      [[+ wf.wrapper]]

    كود قطعة RowTpl



      [[+ wf.wrapper]]

    المستوى الثاني (في هذا المثال ، كانت عناصر القائمة والقائمة الفرعية في نفس المستوى بشكل مرئي

    [[! Wayfinder؟ & startId = `0` & المستوى =` 2`
    & rowTpl = `rowTplFooterMenu`
    & OuterTpl = `externalTplFooterMenu`
    & innerTpl = `innerTplFooterMenu`
    & innerRowTpl = `innerRowTplFooterMenu`
    & hereClass = `active`]]

    كود قطعة خارجية OuterTplFooterMenu



    [[+ wf.wrapper]]

    صف كود القطعة




    • [[+ wf.title]]


    • [[+ wf.wrapper]]

    كود القطعة innerTplFooterMenu

    [[+ wf.wrapper]]

    كود القطعة innerRowTplFooterMenu



  • [[+ wf.title]]


  • لكن هذا ليس لنا ؛).

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

    سيفترض السرد الإضافي أن القارئ لديه معرفة قليلة ببرمجة PHP. من الناحية النظرية ، سيتمكن الأشخاص الذين لا يفهمون الكود على الإطلاق من نسخ الكود وإعادة إنتاج جميع الخطوات التي ستتم مناقشتها أدناه. ومع ذلك ، قد يكون من الأفضل لهم استخدام المقتطفات الجاهزة على غرار ما سبق ، لأنها توفر مجموعة من الفرص للتكوين الخارجي دون الدخول في الكود الرئيسي.

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

    لذا ، دعونا نلقي نظرة على ما لدينا مرة أخرى. نظرًا لوجود عدد غير قليل من أجزاء البرامج المختلفة في موقعنا ، وتحتاج إلى البدء بشيء ما ، لذلك سنقوم ببرمجة ...

    القائمة العلوية

    أعني بالمصطلح "القائمة العلوية" مجموعة من الروابط إلى الصفحات أعلى الموقع (انظر الصورة أدناه):

    سأصف المثال الأول لإنشاء مقتطف بتفصيل كبير ، في المستقبل سأركز بشكل أساسي على التفاصيل الأكثر أهمية.

    لنقارن مع شجرة موقعنا في نظام الإدارة ، والتي بنيناها في المقالة السابقة:

    كما ترى من الشكل ، تم تمييز أربعة مستندات في شجرة الموقع (أي "مدونة" و "حول المؤلفين" و "صور" و "تعليقات") ، والتي ستنشئ لاحقًا روابط في القائمة العلوية.

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

    وهكذا في المقال السابق قمنا بإعداد القائمة العلوية في نظام التحكم.

    الآن دعنا ننتقل إلى مسألة عرض أعمالنا مباشرة على الموقع.

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

    دعنا ننتقل إلى نظام الإدارة ، ونفتح علامة التبويب "الموارد" -> "إدارة الموارد" -> علامة التبويب "المقتطفات" وانقر على رابط "مقتطف جديد". في حقل "اسم المقتطف" ، أدخل "TopMenu" بدون علامات اقتباس وحفظ الآن مقتطفًا فارغًا بدون رمز. بعد الحفظ ، سنرى اسم المقتطف الخاص بنا في علامة التبويب "المقتطفات".

    دعني أذكرك أنه في نموذجنا ، قمنا بنقل القائمة العلوية إلى الجزء "TOPMENU". بدّل إلى علامة التبويب "القطع" وافتح القطعة "". سنرى في محتويات هذا الجزء الكود التالي:


    • مدونة او مذكرة

    • عن المؤلفين

    • صورة فوتوغرافية

    • استجابة

    هذا الرمز هو ما يخلق قائمتنا. دعنا نعلق عليها ونضيف استدعاء إلى مقتطف "TopMenu" في المقطع:


    []

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

    في هذه الحالة ، تشير البنية [] إلى وجود مكالمة مخبأمقتطف ، أي استدعاء إجراء فرعي ديناميكي ، سيتم حساب نتيجته وتنفيذها مرة واحدة ، وبعد ذلك عند تحميل الصفحة التي يُطلق عليها هذا المقتطف ، لن تتغير النتيجة ، حيث النداء المتكرر للمقتطف لم يعد يحدث. وبالتالي ، فإننا نحفظ موارد خادم الويب الخاص بنا (وهذا مهم جدًا دائمًا مع ارتفاع حركة المرور إلى المورد).

    ومع ذلك ، هناك حالات تحتاج فيها إلى إعادة تنفيذ كود المقتطف طوال الوقت ولا يمكنك تخزين النتائج مؤقتًا. في مثل هذه الحالات ، يتم استخدام البنية [! SnippetName!] ، والتي ستفرض دائمًا تنفيذ المقتطف بدون تخزين مؤقت. على سبيل القياس ، يسمى هذا البناء بالمكالمة غير قابل للتسجيلمقتطف.

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

    دعنا نعود إلى علامة التبويب "المقتطفات" ، ونفتح مقتطف "TopMenu" الذي تم إنشاؤه ونحاول اختبار قدراته ... الصبر ، القراء المتقدمون ، ليس الجميع على دراية بهذه التفاصيل.

    أولاً ، لنكتب أبسط كود (كود PHP عادي):

    صدى "اختبار ..." ؛
    ?>

    قبل الحفظ ، حدد "متابعة التحرير" ، منذ ذلك الحين سيتعين علينا تغيير محتوى المقتطف الخاص بنا أكثر من مرة ، وبعد ذلك سنحفظ المقتطف. دعنا نحدث صفحة الموقع ونرى مكان القائمة العلوية ... حسنًا ، لنقول الحقيقة ، للوهلة الأولى لن نرى أي تغييرات تقريبًا ، باستثناء الخلفية الزرقاء الموسعة قليلاً للقائمة. اضغط على "CRTL + A" لتحديد كل النص على صفحة الموقع ، وسنرى أن المقتطف الخاص بنا لا يزال يعرض النص "اختبار ..." في مكان القائمة ، فقط لون النص يتطابق مع لون الخلفية.

    دعنا نغير كود المقتطف إلى ما يلي:

    صدى صوت " اختبارات ...";
    ?>

    يمكننا الآن أن نرى بوضوح أن المقتطف الخاص بنا يعمل وحتى (!) يعرض بعض النصوص. حسنًا ، هذا جيد ، لكنه ليس كافيًا لمهمتنا ، حيث يجب علينا التأكد من أن المقتطف الخاص بنا يعرض روابط من نظام التحكم ، وبنفس كود HTML تمامًا الذي علقنا عليه في مقطع "TOPMENU".

    ومرة أخرى ، القليل من الإلهاء ...

    تم بناء نظام علاقات المستندات بالكامل في MODx وفقًا لمبدأ: كل "مستند أصلي" يحتوي من صفر إلى العديد من "المستندات الفرعية" ("الأصل" -> "الأطفال").

    لكل مستند في قاعدة بيانات MODx معرف فريد خاص به - هذا هو الرقم الذي نراه بين قوسين في شجرة الموقع بجوار كل مستند.

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

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

    لمعرفة ما تحدثنا عنه للتو ، افتح phpMyAdmin ، وحدد قاعدة البيانات الخاصة بك وابحث عن (PREFIX) جدول site_content (PREFIX) ، حيث (PREFIX) هي البادئة التي أدخلتها أثناء التثبيت. سترى العديد من الحقول التي تخزن بيانات مستند معينة ، بما في ذلك "المعرف" - معرف فريد ، و "الأصل" - رقم المستند الأصلي ، و "عنوان الصفحة" - عنوان الصفحة ، وغيرها.

    لذلك ، باستخدام هذه المعلومات حول مبدأ تخزين المستندات وربطها في MODx ، يمكننا فهم كيفية الحصول على البيانات اللازمة لعرض روابط القائمة العلوية: نحتاج إلى العثور في قاعدة البيانات على جميع المستندات الموجودة في جذر شجرة الموقع ، أي لها قيمة صفرية في الحقل "الأصل".

    باستخدام لغة SQL ، يتم وصف استعلام مشابه مثل هذا (يمكنك محاولة إدخال هذا الاستعلام في حقل إدخال SQL في phpMyAdmin ، بعد استبدال "modx_" بالبادئة الخاصة بك):

    تحديد *
    من "modx_site_content"
    حيث "الوالد" = 0 ؛

    ومع ذلك ، فإن مثل هذا الطلب سيعيد لنا تمامًا جميع المستندات من جذر الموقع ، وهذا ليس صحيحًا تمامًا ، بناءً على المهمة الرئيسية - لعرض الروابط فقط لتلك المستندات التي تحتوي على:

    • حالة النشر (في قاعدة البيانات ، يكون الحقل "منشور" مسؤولاً عن هذا العنصر ، حيث تعني القيمة = 1 أن المستند قد تم نشره ، والقيمة = 0 - غير منشور).
    • غير محذوف (الحقل "محذوف" ، حيث يتم حذف الرقم 1 ولا يتم حذف 0) ،
    • والتي تحتوي على مجموعة خيارات "إظهار في القائمة" (حقل "hidemenu" ، حيث 1 - للاختباء ، و 0 - للعرض في القائمة).

    بالإضافة إلى ذلك ، مع المضي قدمًا قليلاً ، سنقوم على الفور بفرز المستندات حسب معلمة "الموضع في القائمة" ، والتي ستحدد موضع كل رابط في قائمتنا.

    حسنًا ، من وجهة نظر SQL ، هذه ليست مهمة صعبة على الإطلاق ويتم حلها على النحو التالي:

    تحديد *
    من "modx_site_content"
    حيث "النشر" = 1
    و "الأصل" = 0
    و "المحذوفة" = 0
    و "hidemenu" = 0
    ترتيب حسب `menuindex` ASC ؛

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

    دعنا نستخدم إحدى وظائف API المذكورة "getDocumentChildren" في المقتطف الخاص بنا. تتلقى الوظيفة "getDocumentChildren" البيانات التالية كمعلمات:

    • معرف $ - رقم المستند الأصلي ،
    • نشط $ - حدد فقط المستندات المنشورة أو غير المنشورة (1 أو 0 ، على التوالي) ،
    • حذف $ - حدد فقط المستندات المحذوفة أو غير المحذوفة (1 | 0) ،
    • الحقول $ - الحقول التي تم تحديدها من قاعدة البيانات ،
    • أين هي الشروط الخاصة ، أي. شرط أين في استعلام SQL ،
    • فرز $ - الحقل الذي يتم من خلاله فرز النتائج
    • الاتجاه $ - اتجاه الفرز ، يمكن أن يكون ASC أو DESC ، أي الفرز من الأدنى إلى الأعلى أو العكس
    • حد $ - طلب الحد ، أي شرط الحد في استعلام SQL

    النتائج بالدولار الأمريكي = modx-> getDocumentChildren (
    معرف $ = 0 ،
    نشط $ = 1 ،
    $ المحذوفة = 0 ،
    $ حيث = "hidemenu = 0" ،
    نوع $ = "menuindex" ،
    دير = "ASC" ،
    حد دولار
    );

    مطبعة ("

    Foreach (نتائج $ كـ $ key => $ value) (
    print_r (القيمة $) ؛
    }

    مطبعة ("");
    ?>

    احفظ المقتطف وقم بتحديث الصفحة. كنتيجة لتنفيذ مقتطف "TopMenu" المحدث ، سترى قائمة بالمصفوفات وقيمها مرتبة حسب قيم حقل "menuindex" من أدنى قيمة إلى أعلى. حاول تغيير المعامل $ dir = "ASC" إلى $ dir = "DESC" - نتيجة لذلك ، ستتم إعادة بناء المصفوفات وسيتم عرض المستند ذي القيمة الأعلى للحقل "menuindex" كأول مستند.

    ربما يكون من الواضح للمبرمجين المتمرسين أن النتيجة التي تم الحصول عليها توفر بالفعل كل ما تحتاجه لإنشاء قائمة جاهزة تحتوي على روابط. حسنًا ، كل شيء تقريبًا. على أي حال ، سأستمر: سنعيد كتابة كود PHP لنقترب قدر الإمكان من النتيجة المرجوة.

    النتائج بالدولار الأمريكي = modx-> getDocumentChildren (
    معرف $ = 0 ،
    نشط $ = 1 ،
    $ المحذوفة = 0 ،
    "المعرف ، عنوان الصفحة ، المنشور ، menuindex ، المحذوفة ، hidemenu ، menutitle" ،
    $ حيث = "hidemenu = 0" ،
    نوع $ = "menuindex" ،
    دير = "ASC" ،
    حد دولار
    );

    العناصر $ = "" ؛
    الناتج $ = "" ؛

    Foreach (نتائج $ كـ $ key => $ value) (
    العناصر $. = "


  • ". $ value [" pagetitle "]."
  • \ ن "؛
    }

    إذا ($ items! = "") (
    الناتج $ = "

      \ ن "؛
      الناتج $. = $ items؛
      الناتج $. = "
    \ ن "؛
    }

    إرجاع الناتج $؛

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

    لنحفظ رمز المقتطف الجديد ونقوم بتحديث الصفحة. نتيجة لتنفيذ الكود ، سنرى عمليًا ما أردنا الحصول عليه:

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

    ولكن هذا ليس كل شيء. ربما لاحظ الكثيرون بالفعل وجود روابط ، لكن لا توجد روابط ... مفارقة :). يعني يتم عرض اسماء المستندات بالقائمة لكن الروابط المؤدية اليها لا تعمل. هذا أمر منطقي ، لأنه أثناء وجوده في رمز الروابط يتم عرض "#" بدلاً من المسارات الحقيقية.

    لحل هذه المشكلة ، تحتاج إلى التعرف على ميزة أخرى مفيدة للغاية لـ MODx: يمكن الحصول على عنوان أي صفحة داخلية بالموقع باستخدام الإنشاء التالي [~ id ~] ، حيث يكون id هو الرقم الفريد للمستند المطلوب ، بمعنى آخر نفس الرقم المشار إليه بين قوسين بجوار اسم كل مستند في شجرة الموقع. وبالتالي ، بإضافة مثل هذا البناء [~ 1 ~] في محتوى القالب / القطعة / الصفحة ،

      • index - الاسم المستعار لوثيقة "Blog" ، إذا أدخلنا "index" كاسم مستعار للمستند ، أو
      • 1.html ، إذا لم ندخل أي شيء في حقل "الاسم المستعار" لوثيقة "المدونة"
    • إذا تم تعطيل الروابط الودية ، فسنرى index.php؟ id = 1

    دعنا نعيد كتابة المقتطف باستخدام هذه المعلومات:

    النتائج بالدولار الأمريكي = modx-> getDocumentChildren (
    معرف $ = 0 ،
    نشط $ = 1 ،
    $ المحذوفة = 0 ،
    "المعرف ، عنوان الصفحة ، المنشور ، menuindex ، المحذوفة ، hidemenu ، menutitle" ،
    $ حيث = "hidemenu = 0" ،
    نوع $ = "menuindex" ،
    دير = "ASC" ،
    حد دولار
    );

    العناصر $ = "" ؛
    الناتج $ = "" ؛

    Foreach (نتائج $ كـ $ key => $ value) (
    العناصر $. = "


  • ". $ value [" pagetitle "]."
  • \ ن "؛
    }

    إذا ($ items! = "") (
    الناتج $ = "

      \ ن "؛
      الناتج $. = $ items؛
      الناتج $. = "
    \ ن "؛
    }

    إرجاع الناتج $؛

    لذلك قمنا بتغيير # إلى [~ ". $ Value [" id "]." ~] ، أي. في الواقع ، لكل مستند من المصفوفة ، يتم استبدال معرّفها الفريد داخل بنية [~ id ~]. نتيجة لذلك ، نحصل على قائمة بها روابط عمل.

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

    لتحقيق ذلك ، سنكشف مرة أخرى أسرار MODx CMS :). المخفية في واجهة برمجة التطبيقات هي وظيفة $ modx-> documentIdentifier ، والتي ترجع قيمة المعرف الفريد للصفحة الحالية. سنحتاجها لتحديد الصفحة النشطة وتحديدها في القائمة:

    النتائج بالدولار الأمريكي = modx-> getDocumentChildren (
    معرف $ = 0 ،
    نشط $ = 1 ،
    $ المحذوفة = 0 ،
    "المعرف ، عنوان الصفحة ، المنشور ، menuindex ، المحذوفة ، hidemenu ، menutitle" ،
    $ حيث = "hidemenu = 0" ،
    نوع $ = "menuindex" ،
    دير = "ASC" ،
    حد دولار
    );

    $ cid = $ modx-> documentIdentifier؛

    العناصر $ = "" ؛
    الناتج $ = "" ؛

    Foreach (نتائج $ كـ $ key => $ value) (
    إذا (قيمة $ ["id"] == $ cid) (
    $ active = "id = \" active \ ""؛
    }
    آخر (
    نشط $ = "" ؛
    }
    العناصر $. = "
    ". $ value [" pagetitle "]."
    \ ن "؛
    }

    إذا ($ items! = "") (
    الناتج $ = "

      \ ن "؛
      الناتج $. = $ items؛
      الناتج $. = "
    \ ن "؛
    }

    إرجاع الناتج $؛

    حسنًا ، كيف تعمل؟ حدث!

    لكنك لم تعتقد أن الأمر انتهى ، أليس كذلك؟ وهي محقة في ذلك. وضعنا لأنفسنا أعلى شريط ، ونريد استخدام أقصى إمكانيات MODx. لذلك ، هناك تفاصيل صغيرة أخرى فاتناها.

    دعنا نلقي نظرة فاحصة على أسماء الحقول التي نطلبها باستخدام وظيفة getDocumentChildren: "معرف ، عنوان الصفحة ، منشور ، menuindex ، محذوف ، hidemenu ، menutitle". من بينها هناك مجال مثل "عنوان القائمة". كما يوحي الاسم ، يمكن تخزين هذا الحقل عنوان القائمة... يحتوي نظام التحكم أيضًا على حقل إدخال "عنصر القائمة". هذا الحقل اختياري. ومع ذلك ، فإن المنطق هو أنه إذا تم ملء هذا الحقل ، فيجب علينا استبدال نص الرابط في القائمة بالنص الذي أدخله المستخدم. حسنًا ، لنفعل ذلك على النحو التالي:

    /********************************
    العنوان: TopMenu
    الغرض: عرض القائمة العلوية
    المشروع: Demosite MODx
    ********************************/

    النتائج بالدولار الأمريكي = modx-> getDocumentChildren (
    $ id = 0 ، // معرّف المستند الأصل
    $ active = 1، // حدد المستندات المنشورة فقط
    $ المحذوفة = 0 ، // حدد المستندات غير المحذوفة فقط
    "المعرف ، عنوان الصفحة ، المنشور ، menuindex ، المحذوفة ، hidemenu ، menutitle" ، // حدد الحقول من قاعدة البيانات
    $ حيث = "hidemenu = 0"، // حدد فقط تلك المستندات التي تريد نشرها في القائمة
    $ Sort = "menuindex" ، // فرز المستندات حسب حقل menuindex
    $ dir = "ASC" ، // فرز المستندات بترتيب تصاعدي
    $ Limit = "" // لم نضع أي قيود (المعلمة LIMIT في استعلام SQL)
    );

    $ cid = $ modx-> documentIdentifier؛ // احصل على معرف الصفحة الحالية

    العناصر $ = "" ؛
    الناتج $ = "" ؛

    Foreach (نتائج $ كـ $ key => $ value) (
    إذا (قيمة $ ["id"] == $ cid) (
    $ active = "id = \" active \ ""؛
    }
    آخر (
    نشط $ = "" ؛
    }
    إذا (قيمة $ ["menutitle"]! = "") (
    $ title = قيمة $ ["menutitle"]؛
    }
    آخر (
    $ title = قيمة $ ["pagetitle"] ؛
    }
    العناصر $. = "
    ". $ title."
    \ n "؛ // جمع عناصر القائمة
    }

    // إذا تم العثور على عنصر قائمة واحد على الأقل ،
    // إنشاء كود HTML للقائمة
    إذا ($ items! = "") (
    الناتج $ = "

      \ ن "؛
      الناتج $. = $ items؛
      الناتج $. = "
    \ ن "؛
    }

    // إرجاع نتيجة المقتطف
    إرجاع الناتج $؛

    حاول الآن إدخال بعض النص في حقل الإدخال "عنصر القائمة" لأي مستند ... هل يعمل كل شيء؟ رائع!

    ملحوظة: ربما يفاجأ بعض القراء أنه عند النقر فوق الروابط الموجودة في قائمتنا ، لا يتغير محتوى الصفحات ، على الرغم من أنه يبدو ، بناءً على المسار في عنوان المتصفح ، أننا ننتقل إلى صفحات جديدة .. صدقوني هذا طبيعي تماما لان تستخدم جميع الصفحات حاليًا نفس القالب تمامًا. في هذا النموذج ، في الواقع ، جعلنا القائمة العلوية ديناميكية فقط حتى الآن ، وتبقى جميع التفاصيل الأخرى دون تغيير. بالتأكيد سنتعامل مع هذا لاحقًا ، لكن في الوقت الحالي - لا داعي للذعر ؛).

    استنتاج:

    لذلك ، توصلت مقالة أخرى إلى استنتاجها المنطقي.

    نتائج التعلم:

    • حاولنا فهم الغرض من بعض حقول الإدخال لوثائق MODx وفحصنا تخزين هذه المعلومات في قاعدة البيانات ؛
    • اكتشف المزيد حول تركيبات MODx الخاصة الجديدة: []، [! SnippetName!]، [~ Id ~]؛
    • تعرفت على مدى توفر واجهة برمجة تطبيقات خاصة واستخدمت بعض وظائف واجهة برمجة التطبيقات ؛
    • وبناءً على هذه المعرفة ، أنشأنا مقتطفنا الجديد في MODx!

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

    لذلك ، تتمثل إحدى المهام الرئيسية لمسؤول الموقع في إنشاء قائمة ديناميكية بحيث يمكن تنفيذ جميع الإجراءات لتحرير بنية القائمة من اللوحة الإدارية.

    يمكن القيام بذلك باستخدام أدوات MODx الخاصة - المقتطفات.

    مقتطفهو كود php يعمل في قالب MODx ويسمح لك بعرض المعلومات من قاعدة بيانات CMS.

    المقتطفات مقسمة إلى نوعين:

    • مخبأ
    • غير قابل للتخزين المؤقت.

    اختلافهم في تصميم المكالمة. لذلك ، على سبيل المثال ، إذا كان لدينا مقتطف يحمل الاسم "SNIPNAME" ، فعندئذٍ مع استدعاء غير مخبأ ، سيبدو الهيكل كما يلي:

    [! SNIPNAME!]

    مع نسخة مخبأة ، سيبدو كما يلي:

    []

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

    السمة الثانية المهمة للمقتطفات هي - خيارات اضافية، والتي يمكن ضبطها مباشرة عند استدعاء هذا البناء. يبدو الرسم التخطيطي كما يلي:

    [! SnippetName؟ & المعلمة 1 = `قيمة المعلمة` & المعلمة 2 =` قيمة المعلمة`!]

    لافتة "؟" - يعطي النظام إشارة بأنه متبوع بمعلمات يجب تطبيقها على المقتطف. والمقتطفات نفسها مفصولة بعلامة "&" ، والقيم محاطة بعلامات اقتباس خلفية. إذا وضعت الاقتباسات الخاطئة ، فلن ينجح شيء.

    كيف يمكنك تخصيص العرض الديناميكي لهيكل القائمة؟

    لعرض القائمة في MODx ، سنستخدم مقتطفًا:

    [! Wayfinder!]

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

    منذ الآن النقطة الأصلية هي "Main" مع القيمة id = 1. ثم يجب أن تبدو البنية كما يلي:

    باستخدام هذا البناء ، يمكنك إخراج القائمة من العناصر الفرعية. دعونا نضع هذا موضع التنفيذ.

    نذهب إلى قسم "العناصر" - "إدارة العناصر" - علامة التبويب "القطع". نختار مقطع "HEADER" ونجد فيه الكود المسؤول عن عرض القائمة.

    الصفحة الرئيسية

    • الصفحة الرئيسية
    • معلومات عنا
    • خدمات
    • المشاريع
    • حلول
    • وظائف
    • مقالات
    • جهات الاتصال

    دعنا ندخل بناء المقتطف أعلاه بدلاً من هذا الرمز:

    [! Wayfinder؟ & startId = `1`!]

    كما ترى ، القائمة متصلة ، يتغير عنوان url في شريط العناوين ، على الرغم من بقاء القالب كما هو ، سنقوم بإصلاحه في الدروس التالية.

    ولكن هناك نوعان من المشاكل:

    1.) لم يتم تمييز عنصر القائمة النشط.

    2.) لا يوجد عنصر قائمة "الصفحة الرئيسية".

    دعونا نصلح هذه العيوب.

    نقوم بتوصيل عنصر القائمة النشط

    بشكل افتراضي ، يشكل مقتطف Wayfinder عنصر القائمة النشط مع الفئة "النشطة". لذلك لا يتعين علينا إضافة نص برمجي إضافي ، ولكن فقط قم بتغيير الفصل في ملف css. للقيام بذلك ، انتقل إلى المجلد الذي يحتوي على نموذجنا - /assets/templates/retina/css/style.css. يرجى ملاحظة أن اسم المجلد الخاص بمجلد القالب قد يختلف بالنسبة لك ، كل هذا يتوقف على الاسم الذي أدخلته في الدروس الأولى. افتح هذا الملف وابحث عن سطر به أنماط لعنصر القائمة النشط. لدي هذا السطر - 190 ، وهنا الكود نفسه:

    #navigation a.nav-btn (margin-bottom: 15px؛ text-decoration: none؛ padding: 0 36px 0 10px؛ line-height: 30px؛ display: block؛ background: url (images / navigation.png) تكرار x 0 0 ؛ الارتفاع: 30 بكسل ؛ الموضع: نسبي ؛)

    استبدل الفئة ".nav-btn" بكلمة "active".

    نربط "المنزل"

    وهكذا ، كما تفهم ، قمنا بإزالة العناصر التابعة من عنصر القائمة "الصفحة الرئيسية". لسحب هذا العنصر نفسه ، نحتاج إلى أن تكون قائمتنا بأكملها في نفس مستوى التداخل.

    أولاً ، نتحقق مما إذا كان الوصول إلى المجلد الجذر مفتوحًا أم لا. للقيام بذلك ، انتقل إلى قسم "الأدوات" - "التكوين" - علامة التبويب "المستخدمون". في ذلك نجد المعلمة - " السماح بالوصول إلى المجلد الجذر"وقم بتعيين القيمة على" نعم ".

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

    بعد النقر ، تحتاج إلى تحديد عنصر القائمة الأصل في العمود الأيسر من المواد ، نختار مجلد الحصان. انظر لقطة الشاشة أدناه.

    اضغط عليها واحفظ مقالتنا. يجب أن تتحرك المادة نفسها بمستوى واحد مع "الرئيسي".

    يجب أن يتم هذا الإجراء مع جميع الفقرات الفرعية. يجب أن يكون لديك الهيكل التالي.

    إذا قمت بتحديث صفحة موقعك الآن ، فستختفي قائمتك. هذا بسبب تغيير معرف الفئة الأصل. دعونا نعدله. للقيام بذلك ، انتقل إلى قسم "العناصر" - "إدارة العناصر" - علامة التبويب "القطع". حدد مقطع "HEADER" وابحث عن الرمز فيه:

    [! Wayfinder؟ & startId = `1`!]

    والتغيير إلى:

    هذا كل شيء ، القائمة جاهزة تمامًا وتتوافق مع النموذج.

    إذا لاحظت ، يمكنك أن ترى من القالب أنه في التذييل لدينا قائمة تكرر بالضبط عناصر الخيار الذي أنشأناه للتو. لذلك ، أقترح تصحيح هذه الكتلة على الفور أيضًا. للقيام بذلك ، انتقل إلى قسم "العناصر" - "إدارة العناصر" - علامة التبويب "القطع" حدد القطعة "FOOTER". نجد فيه الكود المسؤول عن عرض القائمة السفلية ، وبدلاً من ذلك نقوم بإدخال البنية المألوفة بالفعل.

    [! Wayfinder؟ & startId = `0`!]

    إليك ما يجب أن تحصل عليه.

    هذا كل شيء لهذا اليوم. إذا كان لديك أي أسئلة ، اكتبها في التعليقات ، سأحاول الإجابة عليها. حتى الدروس القادمة.

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

    خلق ديناميكية القائمة في MODXسنستخدم المقتطف PdoMenuمن العبوة pdoTools... تحقق من الوثائق الأساسية قبل أن تبدأ.

    وثائق PdoMenu

    خيارات

    معلمات القالب

    معلمات فئة CSS

    أمثلة رسمية


    يمكنك قراءة الوثائق الرسمية هنا. الآن دعنا نلقي نظرة على مكالمات القائمة الأكثر شيوعًا.

    استدعاء PdoMenu

    الخيار 1... بدلا من هذه القائمة الثابتة استدعاء مقتطف pdoMenu، لهذا في شجرة الموارد ، في علامة التبويب " العناصر"في قسم المقتطفات قم بتوسيع الفرع pdoTools، ثم انقر فوق قائمةانقر بزر الماوس الأيسر (لا تترك الزر) واسحب هذا المقتطف إلى المكان الذي تريد استدعاء القائمة فيه ، ثم في النافذة التي تفتح ، املأ المعلمات الضرورية وانقر فوق " يحفظ«.

    الخيار 2... نحن فقط نكتب المكالمة يدويًا.

    أمثلة نموذجية

    قائمة عادية من مستوى واحد

    على سبيل المثال ، لدينا القائمة الأكثر شيوعًا ، مع ترميز html التالي.

    حصلنا على الكود التالي مع استدعاء القائمة:

    • & الوالدين = `0` - قائمة بالآباء (في حالتي ، لا أقوم بتقييد الاختيار ، لأنني سأعرض صفحات معينة فقط على أي حال) ؛
    • & المستوى = `1` - مستوى التداخل (في هذه الحالة ليس كذلك) ؛
    • & الموارد = `2،3،4،5` - قائمة بالموارد التي سيتم عرضها في القائمة ؛
    • & firstClass = `0` - فئة لعنصر القائمة الأول (ليس أيًا منها) ؛
    • & lastClass = `0` - فئة عنصر القائمة الأخير (ليس أيًا منها) ؛
    • & externalClass = `top-menu` - فئة غلاف القائمة (مستبدلة بـ ul) ؛
    • & hereClass = `current-menu-item` - فئة عنصر القائمة النشط (المستبدلة بـ li) ؛
    • & rowClass = `menu-item` - فئة صف قائمة واحد (مستبدلة بـ li).

    قائمة تمهيد مخصصة من مستويين

    يبدو رمز html الثابت كما يلي:

    سيكون كود الإخراج الخاص به كما يلي:

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

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