كيف تجعل قوالب بلوجر تدعم أكثر من شكل للمواضيع.

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

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

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

أي أداة بشكل عام تتضمن وسم 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) للقيام بالمهمة.

الآن بعد أن قمنا بتعريف التخطيطات الخاصة بنا وحددنا الحقل الذي بناءا عليه سنظهر شكل معين سنقوم يإستدعاء التخطيط المطلوب وفي هذه النقطة سننتقل لل "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 بشكل إفتراضي.

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

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

[1]

http://v5blogger.blogspot.c...
يرجى الدخول لحسابك أو تسجيل حساب لتستطيع إضافة تعليق
حساب جديد دخول

التعليقات

benhachemidriss

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

Infinyteam

شكرا لأنك ذكرت هذا الامر رغم انك سبقتني لذلك فحاليا انا اجهز دورة فيديو وبها درس حول هذا الامر وتقريبا مصدري الرئيسي في بلوجر هو هذا الموقع والذي سأشاركه مع الجميع اليوم :

اتمنى ان يستفيد منه الاخرين، بالتوفيق لنا ولك :)

معك أسامة .)

تقديم المعلومات ليس سباق لذا لايهم من سبق الآخر بقدر مايهم أن يستفيد الأخرون من المعلومة فيمكن أن أسبقك لهذا الأمر اليوم وتسبقني في أمر آخر غدا وهكذا. بالتوفيق لك في الدورة فأنا أيضا أريد البدأ في الدورة التي وعدتهم بها السنة الفائتة ولكن لم أجد الوقت لذلك يبدوا أنك ستسبقني في هذا الأمر هههه.

Infinyteam

نعم فعلا ليس سباق، المهم ان يستفيد الجميع وان لا نحتكر المعلومة :) بخصوص الدورة لقد بدأتها فعلا في اليوتيوب اول 7 دروس حول ال JSON FEED نالت استحسان الكثير ولله الحمد لكن توقفت هذه الايام الى حين اقتناء مايكروفون من اجل تحسين جودة الصوت :)

مبرووك القالب الجديد Nanomag، بالتوفيق لك في المبيعات صديقي!

الفيديوهات التي أشرح فيها كيفية التعامل مع NanoMag سجلتها من خلال مايكروفون عادي وكانت الجودة لابأس بها، بالتوفيق لك أيضا.

نحن في المتابعة

كان لي تصور مشابه ولكن لم أستطع تطبيقه لأنه لا يمكن تمرير بيانات بين ادوات بلوجر بدون جافاسكريبت وهذا ما لم أكن أريده أو لم أرى به أي جديد يضيفه،

أحسنت بإستعمالك لحقول أداة blog :)

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