Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. PHP
Code

لفة Templating النظام الخاص بك في PHP

by
Difficulty:AdvancedLength:LongLanguages:

Arabic (العربية/عربي) translation by Hakima Madani (you can also view the original English article)

دفع حدود علمك PHP مع هذا البرنامج التعليمي المتقدم. تنفيذ تقنيات بما في ذلك البرمجة الموجهة للكائنات، والتعابير العادية، والدالة currying لبناء نظام templating من الصفر.


لماذا أحتاج إلى بناء نظام Templating؟

الإجابة باختصار؟ كنت لا. فلماذا يزعج؟ من أعماق قلبي العبقري غريب الأطوار قليلاً، وأعتقد أن جميع مطوري ينبغي باستمرار دفع أنفسهم لتعلم المفاهيم الجديدة و/أو صعبة. هو ما يجعلنا أكثر ذكاء ويبقى عملنا مثيرة للاهتمام، ويجعل لدينا عبء العمل اليومي يبدو وكأنه أقل من العبء (لأنه، كما تعلمون، نحن الحصول على أكثر ذكاء بكثير). تحقيقا لهذه الغاية، المتداول templating النظام الخاص بك يتيح لك الفرصة لشحذ الخاص بك PHP القطع مع مفاهيم منحنية الدماغ مثل التعبيرات currying وregular expresions. و، يا! أنك قد تجد أن كنت قد وضعت نظام templating لاستخدامها في أحد المشاريع المستقبلية.


الخطوة 1 خطة النظام

"جميع مطوري ينبغي باستمرار دفع أنفسهم لتعلم المفاهيم الجديدة و/أو صعوبة."

قبل أن فقط في الغوص وبدء البرمجة، دعونا معرفة بالضبط ما نحاول القيام به. في بناء هذا النظام قولبة، نأمل في أن:

  1. فصل علامات HTML من البرامج النصية PHP لدينا تماما تقريبا
  2. جعل البيانات من البرامج النصية الخلفي لدينا المصممين أكثر يسرا للواجهة الأمامية
  3. تبسيط الصيانة بتلخيص منطق العرض من منطق تسلسل العمل

ما نحن بحاجة إلى بناء

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

كيف يعمل نظام Templating

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

  1. تحميل إدخالات تحليل كمجموعة كائنات
  2. تحميل ملف القالب المراد استخدامه
  3. فصل رأس وتذييل الصفحة من الحلقة
  4. البحث عن علامات القالب باستخدام التعبيرات العادية
  5. التحقق مما إذا كان القالب الوسم تطابق خاصية في كائن الإدخال
  6. استبدال القالب الوسم مع البيانات خاصية مطابقة

الخطوة 2 مخطط الفئة

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

قم بإنشاء بنية المجلد

أولاً، قم بإنشاء مجلد يحتوي على المشروع الخاص بك. دعا قولبة templating. داخل مجلد المشروع، قم بإنشاء مجلدين جديد: الأصول والنظام. المجلد الأصول سوف تحتوي على القوالب لموقعنا التجريبي. وسيتضمن مجلد النظام فئة Template. داخل مجلد الأصول، قم بإنشاء مجلدين جديد: Templates. تخمين ما يحمل ذلك!

إنشاء الملفات الرئيسية

بعد ذلك، قم بإنشاء index.php في مجلد المشروع الرئيسي. هذا حيث أننا سوف اختبار نظام templating مرة واحدة أنها على استعداد للذهاب، وسنستخدم للتأكد من خطواتنا فردية تعمل على طول الطريق، وكذلك. الآن، ومع ذلك، يمكنك تركه فارغاً. في مجلد النظام، قم بإنشاء ملف PHP جديد يسمى class.template.inc.php. في الداخل، تعريف الفئة، التي سنقوم باستدعاء Template، ونأخذ خطواتنا من أعلاه لإنشاء قائمة مهام:

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


الخطوة 3 تحديد "قالب"

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

ما تود أن ننظر HTML؟

لتعريف قالب لدينا، دعونا نبدأ بالاستهزاء ببساطة حتى إدخال كما قد نراها على صفحة ويب:

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

  • URL—عنوان المادة
  • Title—عنوان المقال
  • Publisher—الموقع الذي نشر المقالة

استخدام البيانات المتغيرة لاختيار نموذج العلامات

استخدام المعلومات التي جمعناها أعلاه، يمكن أن نقرر أننا بحاجة إلى ما مجموعة ثلاثة قالب العلامات للمثال أعلاه.

ولكن نحن لا مجرد استخدام كلمة "title" كعلامة القالب للعنوان؛ ما إذا كان شخص ما يستخدم كلمة "title" في توصيف لها؟ أنه سيسفر عن كل تواجد للكلمة يجري استبدالها بإدخال العنوان – ومن الواضح أن ليس هذا هو السلوك الصحيح. لتجنب هذا الأمر، نحن بحاجة إلى التفاف لدينا نموذج العلامات في شيء أن من غير المحتمل أن تظهر في النص. على سبيل المثال، سوف نستخدم الأقواس المتعرجة ({}).

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


الخطوة 4 تحميل الإدخالات

لأنني أود الحصول على الحق في الداخلية لمحرك templating، لن نذهب لقضاء الكثير من الوقت على إدخالات أنفسهم. أنا ذاهب إلى استخدام Envato API وتنفيذ الخطوات من أجل href = "http://net.tutsplus.com/tutorials/php/display-anything-you-want-from-the-envato-api-using-php/" > باستخدام Envato API من Drew Douglass. فتح index.php في جذر مجلد المشروع الخاص بك وقم بإدراج التعليمة البرمجية التالية.

كما يمكنك أن ترى في التعليقات، نحن استخدام cURL بإرسال طلب إلى Envato API وتخزين البيانات التي تم إرجاعها في ch_data$. ثم، على افتراض تم إرجاع الإدخالات، هذه الإدخالات يتم تحويلها من تنسيق JSON تم إرجاعها في صفيف كائنات. ملاحظة: لمزيد من المعلومات عن PHP الموجه للكائنات ، راجع مقالة Nettuts الخاصة بي عن object-oriented في PHP ، وكتابي Pro PHP و jQuery ، أو شرح سريع لـ OOP على ويكيبيديا. إدخال الكائنات تحتوي على الخصائص التي يمكن أن نستخدمها في أعمالنا قوالب. للاطلاع على هذه البيانات، أضف التعليمات البرمجية جريئة أدناه إلى index.php:

ملاحظة: رمز مقصوص للإيجاز. إذا قمت بتحميل index.php في المستعرض الخاص بك، سوف ترى شيئا مشابهة لما يلي:

خصائص فئة – title، $url، $site$، و posted_at$ – سوف تتوافق مع علامات القالب {title} {url}، {site}، و {posted_at}. سنقوم بالضبط كيف سيعمل قليلاً في وقت لاحق.

ربط الإدخالات إلى نظام Templating

ربما لاحظتم أن الإدخالات لا يجري تحميلها أو تخزينها في فئة Template الحق الآن. هذا بسبب أننا نريد نظامنا templating لتكون متوافقة مع أي مجموعة من الإدخالات، وأنه من السهل جداً أن تأخذ أي مجموعة من الإدخالات من إلى قاعدة بيانات أو خدمة ويب، وتنظيمهم في صفيف من الكائنات. ومع ذلك، نحن بحاجة لتخزين الإدخالات في نظام templating حيث أنها يمكن تحليل. لإبقاء هذا بسيطة لطيفة وبسيطة، وتفتح class.template.inc.php وإنشاء خاصية عامة تسمى entries$. سيقوم هذا بتخزين الإدخالات للتحليل في وقت لاحق.


الخطوة 5 تحميل ملف القالب

خطوتنا التالية هي إنشاء أسلوب الذي سيتم تحميل ملف القالب للتحليل. لأنه يجب تشغيل هذا الأسلوب فقط كجزء من عملية قولبة شاملة، يمكننا أن نجعل هذا الأسلوب الخاص. صالح التالية PEAR naming conventions هذا الأسلوب ()load_template_. وبالإضافة إلى ذلك، نحن بحاجة إلى اثنين من الخصائص الجديدة لتخزين مسار ملف القالب، فضلا عن تحميل القالب، التي سوف نسميها template_file$ و template_$، على التوالي.

ملاحظة: لا تنسى أن ضبط الخاصية entries$ لحساب إضافة template$.

تأكد من وجود الملف

خطوتنا الأولى في تحميل القالب للتأكد من وجود الملف قبل محاولة فتحه. وهذا يساعد على تجنب الأخطاء، وحقاً، أنها مجرد فكرة جيدة للتأكد. سوف نقوم بذلك باستخدام ()file_exists. أيضا، لأن هناك فرصة خارج الأذونات على الملف قد لا تسمح لنا بقراءة محتوياته، نحن بحاجة إلى التحقق من ذلك بشكل جيد باستخدام ()is_readable. لأن نحاول جعل هذا بسيطة بقدر الإمكان، ونحن سوف سيتم إضافة قالب افتراضي في حالة القالب المتوفر غير موجود أو لا يتم تحميل بشكل صحيح لسبب من الأسباب. بعد نحن لقد برزت موقع ملف القالب، يمكننا تحميله في ممتلكاتنا template_$ دولار الخاصة باستخدام ()file_get_contents. في class.template.inc.php، إضافة التعليمة البرمجية التالية جريئة إلى ()load_template_ لتحميل القالب لدينا (أو افتراضي):


الخطوة 6 تحليل القالب

لتوزيع قالب لدينا، نحن بحاجة إلى خطة قائمة بالخطوات التي سيتم القيام بها لمعالجة البيانات بشكل صحيح:

  1. إزالة العلامات بي على غرار أي من القالب
  2. استخراج الحلقة الإدخال الرئيسي من الملف
  3. تعريف regular expressions بحيث تتطابق مع أي علامة القالب
  4. كاري الدالة التي سيتم استبدال العلامات مع إدخال البيانات
  5. استخراج الرأس والتعامل مع نموذج العلامات إذا كانت موجودة
  6. استخراج تذييل الصفحة والتعامل مع نموذج العلامات إذا كانت موجودة
  7. معالجة كل إدخال وإدراج القيم في الحلقة
  8. إرجاع الإدخالات تم تنسيقه مع رأس وتذييل الصفحة

ولكن أولاً، كلمة حول التعبيرات العادية

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

الاستعداد للاختبار

لأغراض الاختبار، سوف نحتاج إلى ثلاثة أشياء:

  1. ملف قالب للاختبار
  2. طريقة لإرجاع الترميز الذي تم إنشاؤه من فئة Template
  3. تعديلات على index.php التي سيتم إخراج العلامات المرجعة

أولاً، دعونا نضع معا في قالب نموذج التي سيتم اختبار كافة الميزات ونحن ذاهبون لبناء في )parse_template_. في /assets/templates، قم بإنشاء ملف جديد يسمى test.inc قالب ويضاف ما يلي:

بعد ذلك، نحن بحاجة إلى تعريف الأسلوب العام لدينا لإنشاء العلامات، التي ستسمى ()generate_markup. ويدعو هذا الأسلوب ببساطة إلى _load_template() و _parse_template() ونواتج علامات HTML الناتجة عن ذلك. الأسلوب ()generate_markup في نهاية المطاف تقبل البيانات الإضافية التي يمكن إدراجها في رأس أو تذييل الصفحة من القالب، حيث سنقوم باستعداد لهذه الميزة، وكذلك عن طريق إضافة وسيطة إلى الأسلوب الذي تم استدعاؤه extra$.

وأخيراً، دعونا تعديل index.php لإخراج القيمة التي تم إرجاعها من ()generate_markup. للقيام بذلك، استخدام require_once لتضمين ملف فئة القالب، ثم إنشاء مثيل له. مع كائن قالب جديد لدينا، يمكننا تحديد اسم ملف Template وصدى نتيجة ()generate_markup إلى المستعرض:

كل ما علينا القيام به الآن مؤقتاً
إخراج محتويات القالب في الجزء السفلي من ()parse_template_ حتى نتمكن من رؤية ما يحدث وكما يمكننا تحليل القالب:

تأكد من أن هذا العمل عن طريق تحميل index.php في المستعرض الخاص بك. فإنه ينبغي أن ينتج ما يلي:

إزالة تعليقات من ملف القالب

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

أولاً، دعونا نركز على regex التي ستستحوذ على مستوى الكتلة التعليقات. ويحتاج هذا إلى تطابق أي سلسلة تبدأ ب /* وتنتهي مع */. الحق في الخروج من البوابة، سيبدو لنا regex هذا:

نظراً لأن محدد regex القياسية شرطة مائلة للأمام (/)، نحن ذاهبون إلى استخدام محدد بديلة للحد من عدد الأحرف هرب المطلوب في أعمالنا regex. علامة الرقم (#) محدد regex صحيحة تماما، على الرغم من أن عادة ما أوصى باستخدام الخط المائل للأمام القياسية للوضوح، وفي بعض الحالات استخدام المعيار يمكن أن تقلل إمكانية قراءة تعبير عادي. مقارنة ما يلي:

إذا نحن إدراج هذا regex في ()parse_template_ كما هو، على الرغم من أنها لا تسفر عن النتائج المرجوة. أضف التعليمات البرمجية جريئة أدناه إلى ()parse_template_ لمعرفة نتيجة لجهودنا regex الحالية:

ملاحظة: لما تبقى من هذه المقالة، سيتم حذف التعليقات دوكبلوك لتوفير مساحة (إلا إذا كانت جديدة). لا يغير الإخراج في المتصفح الخاص بك إذا كنت إعادة تحميل index.php؛ يحدث هذا لأن نحن لم تقم بإضافة حرف البدل مع معدل between أحرف عددها صفر أو أكثر بين تعليق فتح وإغلاق (*.). بالإضافة إلى ذلك، نحن بحاجة إلى مراعاة لحقيقة أن مستوى الكتلة التعليقات عادة متعدد الأسطر، نحن بحاجة إلى إضافة المعدل s لحساب هذا. لدينا regex معدلة يجب أن تبدو مثل هذا:

ضبط هذا في ()parse_template_، ثم إعادة تحميل index.php في المستعرض الخاص بك. يصيح! والناتج:

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

ضبط ()parse_template_، ثم إعادة تحميل index.php. أفضل بكثير!

وبعد ذلك، نحن بحاجة إلى تعليقات مضمنة الهدف (تلك التي بدأت مع اثنين من خطوط مائلة أمامية (//). نظراً لأن هذه ليست متعدد الأسطر، وهذا سوف يكون في الواقع regex الخاصة به بدلاً من توسيع regex التعليق مستوى الكتلة. لهذا regex، نحن بحاجة إلى العثور على أي نص يتبع اثنين من خطوط مائلة أمامية (//). والاستثناء الوحيد لهذه القاعدة هو خطين مائلين إلى الأمام في (//:URL (http بعيد — لاستبعاد هذا، سوف نستخدم النظر للخلف سلبية. التعبير العادي الانتهاء يجب أن تبدو مثل هذا:

هذا إضافة إلى ()parse_template_ بتغيير المتغير comment_pattern$ إلى صفيف مع لدينا regex مستوى الكتلة كبند أول و regex تعليق السطر الثاني:

الآن يتم تجريد التعليقات بشكل صحيح عند يمكنك إعادة تحميل index.php في المستعرض الخاص بك:

الفصل بين رأس وتذييل الصفحة، وحلقة للمعالجة

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

عزل الحلقة الدخول الرئيسية

أولاً، أننا سوف الاستيلاء على الحلقة باصطياد كل المحتوى بين الحلقة {loop} و {loop/} نموذج العلامات. هذا regex سوف مطابقة قالب كامل واستخدام مجموعة التقاط لتحديد التكرار الحلقي:

تعديل ()parse_template_ كما هو موضح في جريئة لاختبار أن يتم استخراج الحلقة الدخول بشكل صحيح:

ملاحظة: لا تنسى تغيير دالة للعودة entry_template$ بحيث يمكنك مشاهدة الإخراج الصحيح. باستخدام ()preg_replace "محل" القالب كله مع قالب حلقة الأسرى فقط، ونحن لقد معزولة بنجاح الحلقة الرئيسية. أنشئ index.php تحديث في المستعرض الخاص بك، وأنت يجب أن راجع ما يلي:

عزل Header

وبعد ذلك، دعونا الحصول على الرأس من القالب. Regex للقيام بهذا سيكون مماثلاً للذي انتزع الحلقة الرئيسية، ولكن هذه المرة نحن ذاهبون لالتقاط المحتوى قبل علامة القالب {loop}. لمطابقة الرأس، نحتاج إلى البدء من بداية القالب والتقاط كل شيء حتى العلامة {loop}. إذ نحن نستخدم ()preg_replace لاستخراج الرأس، نحن بحاجة أيضا لمطابقة كل شيء بعد العلامة {loop}، وكذلك للتأكد من أنه يحصل على إزالته عند حدوث الاستبدال. Regex هذا، عندما يتم الانتهاء من ذلك، يجب أن تبدو مثل هذا:

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

إعادة شحن index.php في المستعرض الخاص بك سيؤدي كما هو متوقع، في رأس البيانات التي يتم عرضها:

عزل تذييل الصفحة

تذييل الصفحة مشابهة جداً للرأس في كيف يتم استخراج، ما عدا هذا الوقت كنت التقاط البيانات بعد {loop/} العلامة والتأكد من أنه لا يطابق قالب كامل باستخدام regex هذا:

قم بتوصيل هذا ()parse_template_ وتعيين أسلوب للعودة إلى المحتوى تذييل مثلما فعلنا مع الرأس باستخدام التعليمات البرمجية جريئة:

إعادة تحميل ملف الفهرس لمشاهدة الإخراج تذييل الصفحة:

تحديد نموذج العلامات مع التعابير العادية

الخطوة التالية في عملية لدينا هو وضع معا regex التي سيتم مطابقة أي علامة القالب حيث أننا يمكن استبدالها بإدخال البيانات. خلافا للآخرين ونحن قد كتبنا، لا ينبغي أن تطابق هذا واحد القالب كله. يجب أن تطابق هذا النمط فقط علامة القالب التي سيتم استبدالها. لإنجاز هذا، يمكننا استخدام الاختزال مطابقة أي حرف كلمة (\w يساوي [A-Za-z0-9_]) ويتطابق مع واحد أو أكثر من الأحرف بين الأقواس المتعرجة. Regex كاملة يبدو مثل هذا:

ونحن سوف تحقق من أن هذا يعمل مجرد قليلاً، ولكن الآن دعونا فقط بتعريف النمط لاحقاً بإضافة التعليمة البرمجية جريئة إلى ()parse_template_:

مع كل من التعبيرات العادية لدينا استعداد لموسيقى الروك، يمكن أن ننتقل إلى المهمة الكبيرة القادمة.


الخطوة 7 الحصول على استعداد لاستبدال علامة القالب: Currying

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

انتظري. ما قلت لك فقط؟

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

إذا أردنا أن استدعاء هذه الدالة عادة، أننا سوف ببساطة قم بما يلي:

ولكن دعونا نقول أن – لأي سبب من الأسباب-أننا بحاجة إلى استدعاء دالة ()add تدريجيا؛ ونحن لا يمكن ببساطة إضافة وسيطة واحدة الآن، وآخر في وقت لاحق (بواسطة استدعاء (add(1). أن إصدار رسالة تحذير:

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

كتابة الأسلوب كرينج

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

كيف Currying تطبيق على نظام Templating؟

الآن قد لا يكون من الواضح كيف كل هذا ينطبق على نظام templating. عندما نصل إلى الخطوة التالية سوف نذهب أكثر من هذا بالتفصيل، ولكن باختصار، نحن بحاجة لتكون قادرة على استدعاء دالة مع حجتين لاستبدال العلامات قالب: وسيطة واحدة هو الإدخال الذي يجب سحب البيانات ، والآخر هو القالب الوسم لتحل محلها. إذ نحن نستخدم التعابير العادية لاستبدال العلامات، نحن بحاجة إلى استخدام ()preg_replace_callback لجعل الاستبدالات. ومع ذلك، نظراً لرد الاتصال الذي تم تمريره إلى هذه الدالة يمكن فقط أن يقبل وسيطة واحدة — النص المتطابق – ونحن بحاجة لتمرير دالة تكرارية بالفعل دخول المخزنة داخله. معنى؟ دعونا نجعل ذلك يحدث!


الخطوة 8 استبدال قالب العلامات مع مطابقة بيانات الإدخال

توجد جميع القطع. الآن نحن بحاجة فقط الربط بين النقاط والحصول عليها القيام به.

كتابة علامة استبدال أسلوب

استبدال العلامات بسيط إلى حد ما بمفردها: اتخاذ النص المتطابق من القالب الوسم وانظر إذا كان خاصية موجودة في الكائن إدخال بهذا الاسم. إذا كان الأمر كذلك، إرجاع البيانات المخزنة في الخاصية المذكورة؛ إذا لا، فقط إرجاع القالب الوسم حتى يمكن رؤية المصمم الذي حدث خطأ (أو، في حالات الحافة، لا كسر السلسلة الفردية التي كانت ملفوفة في الأقواس المتعرجة). هذه الدالة هو الذهاب إلى أن يسمى ()replace_tags، وسيكون ثابت حتى أن كان يمكن تمريرها إلى الدالة كرينج كرد callback. إضافة إلى الفئة Template باستخدام التعليمات البرمجية جريئة أدناه:

ملاحظة: الدعوة إلى ()unserialize في الجزء العلوي من هذا الأسلوب سبب مشكلة مع تمرير كائن من خلال دالة كرينج. ونحن سوف إجراء تسلسل الكائن في الخطوة التالية.

تعديل قالب تحليل الأسلوب لاستبدال العلامات القالب

لإكمال جهودنا templating النظام، نحتاج أولاً إلى الحصول على وظيفة رد الاتصال تكرارية لدينا جاهزة للاستخدام مع كافة المكالمات الاستبدال. يتم ذلك عن طريق ()currying Template::replace_tags وتخزينها في متغير يسمى callback$. هذا إضافة إلى ()parse_template_ مع التعليمات البرمجية جريئة أدناه:

وبعد ذلك، نحن بحاجة إلى إقامة حلقة لتذهب من خلال كل كائن الإدخال في الصفيف  entries$. مع كل إدخال، نحن بحاجة إلى استدعاء ()preg_replace_callback مع regex العلامة القالب كالوسيطة الأولى، رد الاتصال مع الكائن إدخال المتسلسلة كالوسيطة الثانية، والحلقة كالوسيطة الثالثة. ينبغي أن يذيل العلامات إرجاع من كل استدعاء متغير يسمى markup$، الذي يقوم بتخزين كافة علامات الدخول أن يكون الإخراج إلى المستعرض. هذا إضافة إلى ()parse_template_ مع التعليمات البرمجية جريئة:

قبل أن يمكننا اختبار هذا، نحن بحاجة إلى إنشاء إدخال حيث أن المحرك لديه شيء في حلقة مستمرة من خلال. في index.php، إضافة إدخال وهمية مع خاصية تسمى
test$ لمطابقة علامة template في ملف قالب الاختبار لدينا:

مع إدخال الطباعة الحالي، يمكننا اختبار القالب استبدال العلامة بإعادة شحن index.php في المتصفح. يجب قراءة الإخراج:

وهذا يعني أن فعالية لقد قمنا بإنشاء محرك templating! ومع ذلك، نحن ليس تماما القيام به حتى الآن: أننا لا تزال بحاجة إلى إضافة القدرة على استبدال العلامات القالب في رأس وتذييل الصفحة من ملف قالب لدينا.

استبدال علامات القالب في رأس وتذييل الصفحة من القالب

عملية استبدال رأس وتذييل نموذج العلامات مطابق للعملية لتلك الموجودة في الحلقة، ولكن البيانات المختلفة أمر ضروري للقيام بذلك. ولعلكم تتذكرون أن قمنا بتضمين وسيطة تسمى extra$ عندما نحن تم كتابة أساليب ()generate_markup و ()parse_template_؛ يأخذ هذا المتغير لاستخدامه ككائن الذي سيقوم بتخزين البيانات لاستبدال العلامات قالب رأس وتذييل الصفحة. لأغراضنا، يمكن أن تحتوي على extra$ اثنين من الخصائص، و header$، و footer$، اللتين سيتم تخزين كائن خصائصه ستستخدم لاستبدال العلامات قالب في الجزء المقابل من القالب. من الواضح، إذا كانت توجد أية علامات رأس أو تذييل الصفحة، ثم لا توجد بيانات سيتم تخزين في extra$ لمعالجة. ولهذا السبب، نحن نبدأ بالتحقق إذا كان extra$ كائن. إذا كان الأمر كذلك، سنقوم بتنفيذ حلقة مستمرة من خلال خصائصه وتشغيل ()preg_replace_callback مع قالب regex العلامة، رد الاتصال بعد يتم تمرير الكائن المتسلسلة رأس أو تذييل الصفحة، ومقطع رأس أو تذييل الصفحة من القالب. بإضافة التعليمة البرمجية جريئة أدناه لإكمال نظام templating لدينا:

إذا كان يمكنك إعادة تحميل index.php في المستعرض الخاص بك، سترى الإخراج التالي:

آخر شيء القيام به اختبار استبدال العلامة قالب رأس وتذييل الصفحة. افتح قالب test.inc وإضافة اثنين من العلامات القالب الجديد، واحدة في الرأس وواحدة في تذييل الصفحة:

وبعد ذلك، العودة إلى index.php وإضافة كائن جديد يسمى extra$ مع اثنين من الكائنات
المخزنة في خصائص header$ و footer$ التي لها خصائص المقابلة للعلامات قالب جديد:

ملاحظة: لا تنسى لتمرير extra$ إلى ()generate_markup! حفظ هذه التغييرات، إعادة تحميل الملف في المستعرض الخاص بك، وسترى ما يلي:


الخطوة 9 استخدام الإدخالات الحقيقية

كعملية نهائية، دعونا استخدام بعض الإدخالات الحقيقية من موقع تسوق Envato وتصميم قالب لعرضها.

إنشاء قالب

لقالب، دعونا إنشاء جديد في مجلد قوالب تسمى list.inc الدخول. في الداخل، بإضافة التعليمة البرمجية التالية:

تحميل الإدخالات الحقيقية واستخدام القالب الجديد

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

ملاحظة: أنا أضيف في إعلان doctype والأساسية إتش تي أم ال العلامات لتجنب مشكلات ترميز الحرف.


ملخص

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

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.