السلام عليكم ورحمة الله وبركاته.

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

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

أي أداة بشكل عام تتضمن وسم b:includable بحيث يكون كود الأداة على الشكل التالي:

<b:widget (الخصائص)>

    <b:includable id='xxx' var='xxx'>
      هنا يكون المحتوى        
    </b:includable>

</b:widget>

من الضروري أن تحتوي الأداة على b:includable له معرف main وهو الذي يتضمن محتواها الأساسي، يمكن أن تتضمن هذه الأخيرة على b:includables أخرى تساعد الرئيسي على معالجة البيانات وتمريرها له، كمثال على ذلك نجد أداة Blog، إذا ماكنت تطور قوالب بلوجر فأنت في الغالب ترى أنها مليئة بوسوم b:includable أول واحد هو الذي لديه معرف main وكما سبق وأشرت فهو أساسي والأخرى كل لها دور فمثلا هناك المسؤولة عن إضافة المواضيع التالية والسابقة (nextprev) وهناك الخاصة بمشاركة المواضيع (shareButtons) إلخ ويتم إستدعاؤها في أول وسم الذي ذكرنا أنه الرئيسي على حسب الحاجة إليها.

<b:widget id='Blog1' locked='true' title='المواضيع' type='Blog'>

    <b:includable id='main' var='top'>  
        هنا يكون المحتوى الأساسي   
    </b:includable>

    <b:includable id='nextprev'>
        هنا يكون محتوى المواضيع التالية/السابقة     
    </b:includable>

    <b:includable id='shareButtons' var='post'>
        هنا يكون محتوى أزرار المشاركة  
    </b:includable>

    .
    .
    .

</b:widget>

يمكن أن يحتوي ال "b:includable" على الخصائص التالية:

id: (ضروري) معرف فريد يمكن أن يحتوي أرقام وحروف. var: (إختياري) معرف يمكن أن يحتوي على أرقام وحروف، من أجل الإشارة للبيانات في هذه الأداة.

عندما تبدأ الأداة في الإشتغال فإن ال "includable" الرئيسي يجلب البيانات، يممرها لل "includables" الأخرى من أجل معالجتها وبعد ذلك يتم إرجاع النتيجة للرئيسي لإظهارها وذلك من خلال إستدعائها بالشكل التالي:

 <b:include name='includable id' data='variable'/>

يمكن أن يحتوي ال "b:include" على الخصائص التالية:

name: (ضروري) معرف فريد مكون من حروف وأرقام. data: (إختياري) تعبير أو جزء من البيانات التي تريد تمريرها لقسم ال "b:includable". قيمة هذه الخاصية هي التي تمر لخاصية var في ال "b:includable". cond: (إختياري) تعبير شرطي يجعل الإستدعاء لايتم إلا إذا تحقق. الأمر شبيه بخاصية cond في b:if.

يمكن أن تتخيل ماتطرقنا له على أن ال "b:includable" الرئيسي هو البرنامج الرئيسي في حين أن ال "includables" الأخرى مثل الوظائف functions بحيث يكون ال "b:includable" هو تعريف للوظيفة و ال "b:include" هو المسؤول عن إستدعائها. ال "includables" تأتي في متناول اليد في حال كان لديك كود يتكرر عدة مرات فعوض أن تقوم بتكراره فأنت تعرفه داخل ال "b:includable" وتستدعيه متى ما أردته، الأمر بهذه البساطة.

بعد قراءة هذا الشرح عن ال "includables" فأظن أن الفكرة التي أريد تطبيقها بدأت تظهر لكم. أول شيء سنقوم به هو أننا سنعرف 2 b:includables في أداة Blog بالشكل التالي:

<b:widget id='Blog1' locked='true' title='المواضيع' type='Blog'>

    <b:includable id='layout1' var='post'>  
         هنا المحتوى الخاص بالتخطيط الأول            
    </b:includable>

    <b:includable id='layout2' var='post'>
          هنا المحتوى الخاص بالتخطيط الثاني               
    </b:includable>

</b:widget>

بعد تعريفنا لل "b:includables" (كما تلاحظون فقد إكتفيت بإثنين وجعلت المحتوى تابث، ولكن المهم هو أن تفهم الفكرة حتى يمكنك العمل بها ولم لا تطويرها أكثر) سنمر الآن لإستدعائهم بناء على إختيار المستخدم وفي هذه الحالة يمكنك أن تستعمل الوسوم الشرطية b:if ولكني إخترت إستعمال b:switch[1]، لكن قبل هذا يجب علينا تحديد أين سيقوم المستخدم بإختيار نوع التخطيط وقررت الإستفادة من حقل (Links to this post) للقيام بالمهمة.

https://i.suar.me/nMBw/l

الآن بعد أن قمنا بتعريف التخطيطات الخاصة بنا وحددنا الحقل الذي بناءا عليه سنظهر شكل معين سنقوم يإستدعاء التخطيط المطلوب وفي هذه النقطة سننتقل لل "b:includable" الرئيسي وقد سبق وذكرت السبب و داخل حلقة تكرار المواضيع المتواجدة داخله سنزيل الإستدعاء الإفتراضي الخاص ببلوجر الذي يكون على الشكل التالي:

<b:include data='post' name='post'/>

وسنستبدله بال "b:switch" الخاصة بنا ليصير بالشكل الآتي:

 <b:switch var='data:top.backlinkLabel'>
     <b:case value='layout1' />
          <b:include data='post' name='layout1' />
      <b:case value='layout2' />
          <b:include data='post' name='layout2' />
      <b:default/>
          <b:include data='post' name='layout1' />
  </b:switch>

الكود أعلاه يقوم بالتحقق من قيمة الحقل الذي ذكرنا سابقا وبناءا عليها يقوم بإستدعاء تخطيط معين وفي حال لم يدخل المستخدم أي شيء أو أخطأ في كتابة الإسم فيتم إستدعاء التخطيط الأول layout1 بشكل إفتراضي.

هذه صور من مدونة تجريبية بعد تطبيق الشرح عليها وكما تلاحظون تم تكرار الجملة ثلاث مرات لأنها تحتوي على ثلاث مواضيع.

https://i.suar.me/lgwN/l

https://i.suar.me/qzwg/l

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

[1] http://v5blogger.blogspot.com/2016/07/blogger-switch.html