سؤال

لقد وجدت أن استخدام Smarty مع PHP، قد يتطلب الأمر في بعض الأحيان استخدام وقت إضافي

1) استخدام صيغة مختلفة تمامًا عن لغة PHP نفسها
2) تحتاج إلى التحقق من الحالات الصغيرة، لأن التوثيق لا يقدم تفاصيل أكثر دقة، مثل "الهروب"

http://www.smarty.net/manual/en/language.modifier.escape.php

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

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

بالمناسبة، هل يوفر استخدام Smarty سرعة جيدة مقارنة باستخدام PHP وحده؟شكرًا.

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

المحلول

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

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

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

<? foreach($array as $key => $val): ?>
    <?= $val ?>
<? endforeach; ?>

ضد:

<?php
    foreach($array as $key => $val) {
        echo $val;
    }

?>

أنا شخصياً أعتقد أن محركات القوالب نشأت في لغة PHP للأسباب التالية:

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

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

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

نصائح أخرى

وأنا لا أحب النموذجيه المحركات. أجد لهم الضياع جدا وكثيفة الموارد لPHP.

ومع ميدياويكي، حول النسخة 1.6.x نحن تراجعت باستخدام هندى افتراضيا ومجرد استخدام النموذجيه PHP الذي بني في، مع تحسن كبير في الأداء.

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

وLaconica، ومنصة المدونات الصغيرة المفتوحة، لا تفعل أي النموذجيه افتراضيا. لدينا المساعد للناس الذين هم مجنون لالنموذجيه.

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

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

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

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

وأكبر تكلفة عند استخدام هندى أو أي محرك آخر يأتي في شكل من الوقت المطور. انها طبقة أخرى من التعقيد وحتما ستجد نفسك في الحالات التي لديك ل<م> خدعة المحرك إلى فعل ما كان يمكن أن ينجز في غضون PHP النقي طوال الوقت.

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

  • لا يزال بناء الجملة الجديد يعتمد على المفهوم القديم للعلامات الخاصة المُدرجة في أماكن عشوائية في المستند.
  • نظرًا لأن Smarty لا يفهم بنية/بنية HTML، فإنه لا يمكنه مساعدتك في إنشاء HTML صالح/جيد التنسيق.تنتهك علامات Smarty بناء جملة HTML، لذلك بمجرد إضافتها، لن تتمكن الأدوات القياسية الأخرى من مساعدتك أيضًا.
  • إن مخرجات Smarty، تمامًا كما هو الحال في PHP، غير آمنة (لا يمكن الهروب منها) افتراضيًا وأنت يجب أن تذكر أن تضيف |escape في كل مكان حيث تقوم بإخراج البيانات بتنسيق HTML.

هناك محرك قوالب PHP محدد أعجبني، وهو يعمل على إصلاح كل هذه المشكلات: PHPTAL.

لا يزال هذا شيئًا جديدًا عليك أن تتعلمه، وهو تابع لتطبيقك، لكنني أعتقد أن حل مشكلات XSS وسوء التشكيل يجعل الأمر يستحق العناء.

PHPTAL تمامًا مثل Smarty، يتم تجميعه مرة واحدة إلى PHP وتخزينه مؤقتًا، لذا فإن الأداء يمكن مقارنته بـ PHP الخام.

الايجابيات

  • لا يوجد PHP في ملفات HTML الخاصة بك (يسمح بتعريف PHP وHTML)
  • الأنابيب {$var|افتراضي:"لم يتم تحديد أي شيء"} {$var|urlencode}
  • للآخر:{foreach item=row from=$results}{$row.name<br>{foreachelse}لا توجد نتائج{/foreach}
  • مواقع الويب/الصفحات القابلة للتخصيص (استخدام CSS فقط له حدود)

سلبيات

  • بناء جملة لغة أخرى
  • الكود ليس واضحًا دائمًا {"Y-m-d"|strftime:$timestamp} {$array|@var_dump}
  • النفقات العامة طفيفة

يمكنني أن أوصي بشدة باتباع نهج "القالب" (mVc)، ولكن كلاً من Smarty و PHP العادي جاهزان للمهمة.

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

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

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

<لأ href = "http://alexeyrybak.com/blitz/blitz_en. أتش تي أم أل "يختلط =" نوفولو noreferrer "> http://alexeyrybak.com/blitz/blitz_en.html

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

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

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

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

ومع ذلك، فأنا أستخدم Smarty في معظم مشاريع PHP الخاصة بي، لأنه يذكرني بمكتبات علامات Java-Server (JSTL)، التي اعتدت عليها وأحبها كثيرًا.

وباستخدام هندى أم لا هو أكثر أو أقل موقف فلسفي.

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

وبالإضافة إلى ذلك، وتمتد هندى هو بسيط جدا.

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

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

وحاول استخدام هندى مع نمط MVC مثل كود إغنيتر، على نحو أفضل من جوهر PHP

لماذا استخدام قالب المحرك عندما يمكنك فقط استخدام ملفات HTML وحقن شفرة PHP حيث كنت في حاجة إليها؟ يمكنك القيام بذلك مع Psttt! templating لمحرك PHP

وكامل شفرة المصدر هنا http://github.com/givanz/psttt

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