سؤال

لماذا يجب استخدام نظام النموذجيه في PHP?

المنطق وراء سؤالي هو:PHP نفسها هي ميزة الغنية templating النظام ، لماذا يجب أن أقوم بتثبيت آخر قالب المحرك ؟

اثنين فقط من إيجابيات لقد وجدت حتى الآن هي:

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

...وكلاهما ضئيلة جدا بالمقارنة مع السلبيات.

مثال صغير:

PHP

<h1><?=$title?></h1>
<ul>
  <? foreach ($items as $item) {?>
  <li><?=$item?></li>
  <? } ?>
</ul>

هندى

<h1>{$title}</h1>
<ul>
  {foreach item=item from=$items}
  <li>{$item}</li>
  {/foreach}
</ul>

أنا حقا لا أرى أي فرق على الإطلاق.

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

المحلول

نعم, كما قلت, إذا كنت لا تجبر نفسك على استخدام محرك النموذجيه داخل PHP ( على محرك النموذجيه ) يصبح من السهل أن تنزلق ووقف فصل المخاوف.

ومع ذلك, نفس الناس الذين لديهم مشاكل فصل مخاوف في نهاية المطاف توليد HTML والتغذية هندى ، أو تنفيذ كود PHP في هندى, لذلك هندى بالكاد حل قلق الانفصال المشكلة.

انظر أيضا:

نصائح أخرى

السبب الرئيسي الناس استخدام قالب النظم هو فصل المنطق من العرض.هناك العديد من الفوائد التي تأتي من ذلك.

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

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

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

ليس الجميع سوف تحتاج أو نقدر هذه الفوائد ولكن.PHP ميزة على Java/Python/روبي/etc هو أنه يمكنك بسرعة هاك صفحات ويب مع بعض المنطق في ذلك شيء جيد.

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

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

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

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

<table>
  <thead>
    <tr>
      <th>First Name</th>
      <th>Last Name</th>
      <th>Age</th>
    </tr>
  </thead>
  <tbody>
    <tr tal:repeat="users user">
      <td tal:content="user/first_name">Max</td>
      <td tal:content="user/last_name">Mustermann</td>
      <td tal:content="user/age">29</td>
    </tr>
  </tbody>
</table>

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

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

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

فليكر هو حاليا باستخدام هندى.لها لا ينبغي أن يكون سو سيئا, أليس كذلك ؟

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

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

<?php if($some_test): ?>
   <em>Some text!</em>
<?php endif; ?>

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

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

if (loggedIn)
{
    // print lots of HTML here
}
else
{
    // print error message
}

في هندى, يمكن أن يكون شيئا من هذا القبيل (اغفر لي ربما خطأ في بناء الجملة, انها كانت فترة من الوقت):

if (loggedIn)
{
    $smarty->bind("info", someObject);
    $smarty->display("info.template");
}
else
    $smarty->display("error.template");

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

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

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

نسيت htmlspecialchars() مرتين.وهذا هو السبب كنت بحاجة templating النظام.

هندى الفقراء.لا تحكم النموذجيه نظم بناء على ذلك.

تحليلك معقول.أعتقد:

  • قالب المصممين و الخلفية المبرمجين قد لا يكون واحدا في نفسه ، حتى أنه يشجع على الانفصال.
  • أنه يحميك من نفسك إلى حد ما في أنه لا يمكنك حقا "الكثير من" بي إتش بي في القوالب الخاصة بك.
  • قد يكون من الأسهل إلى تحسين/precompile قوالب في بعض السيناريوهات ؟ (هذا هو المضاربة)

شخصيا, أعتقد أنهم من المتاعب أكثر مما تستحق.ولا سيما أنها لا تعمل إذا كنت ترغب في اليد القوالب "المصممين" منذ WYSIWYG أدوات لا أعرف ما يجب القيام به معهم.

واحدة قالب المحرك ميزة لم أرى إمكانية ديناميكية عناصر html - شيء من هذا القبيل asp.net الضوابط.على سبيل المثال, مع الكمثرى هو قالب HTML Flexy هل يمكن أن يكون ديناميكية عناصر النموذج تلقائيا الحفاظ على الدولة.منتظم html حدد العنصر يمكن أن تكون مأهولة بالسكان ويكون العنصر المحدد في التعليمات البرمجية خلف دون الحلقات أو الشرطية في القالب.

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

و {$myvar|escape} هو IMHO قليلا أقصر من <?php echo htmlspecialchars($myvar); ?>.(مع الأخذ في الاعتبار أن <?=$foo?> بناء الجملة هو متوفر فقط عندما يتم خصيصا تمكين PHP conf.)

أنا لا أعتقد أنك يجب أن تستخدم قالب المحرك.بدلا من ذلك يجب أن تستخدم شيئا مثل Zend_View التي تشجع لك أن تفعل منفصلة المنطق من العرض, ولكن يسمح لك لبناء الخاصة بك طبقة العرض في PHP.

  • كنت ترغب في استخدام ملف رمز PHP كما القالب ؟ بخير
  • كنت ترغب في استخدام المتغيرات في القالب ؟ بخير

فقط تذكر أن فصل المنطق و الناتج النهائي (عرض).هذا هو أفضل إنجاز مع النموذجيه الإطار.ولكن لا يمكنك أن تتعلم شيئا مثل هندى.

  • إذا كنت تستخدم Zend_View أو ما شابه يمكنك استخدام رمز PHP طول الطريق.

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

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

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

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

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

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

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

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

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

أنا شخصيا دائما استخدام النموذجيه محركات في php, python أو أيا كان.

أول سبب واضح سبق ذكره من قبل الآخرين:

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

نعم بالتأكيد, الانضباط سوف تفعل ما يرام ، عندما يكون لديك ذلك.

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

على سبيل المثال, هندى أيضا التخزين المؤقت المتقدمة ميزات مثل جزئية التخزين المؤقت.حقا اشياء مفيدة أشياء كنت قد توضأ قبل كل شيء بنفسك عند استخدام php كما النموذجيه اللغة.

و من فضلك لا تنسى كل تلك حقا مفيدة وظائف المساعد فقط بحث سريع بعيدا في مستندات.معظمهم أيضا توفير طريقة سهلة المساعد المهام الخاصة بك و/أو أدوات.

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

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

قالب الميراث

لقد جاء من جانغو و أنا الآن استخدامه في أحدث 3 هندى.الرجال من سيمفونية الإطار أيضا غصين, التي يمكنك أن تنظر في الميناء مع جانغو الجملة.

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

بالنسبة لي هذا هو الحارس!

قالب نظام إدارة يمكننا إدارة ملفات قالب على حدة.نظام وقت التنفيذ سيكون أسرع من المعتاد PHP المشروع.حتى هنا ملفات PHP و ملفات القالب بشكل منفصل الحفاظ عليها.

بمجرد تشغيل ملفات التعليمات البرمجية سيتم حفظه template_c.لذلك ليس من تجميع عدة مرات.

أنا عدة مرات استخدامها tinybutstrong, التي لديها أنيق جدا و بسيطة في بناء الجملة.لا الحلقات أو شبة الكود في قالب html.

من الصفحة الرئيسية:

TinyButStrong هي المكتبة التي تمكنك حيوي إنشاء XML/صفحات HTML وغيرها من الملفات على أساس النص المصدر.انها قالب المحرك عن لغة PHP.فإنه يتيح لك بسهولة عرض المعلومات من قاعدة البيانات الخاصة بك, ولكن أيضا على محمل الجد تنسيق تبسيط البرمجة PHP.

TinyButStrong هو التوجه إلى HTML ولكن ليس المتخصصة إلى Html.هذا ما يعني أنها يمكن أن تعمل بشكل جيد مع الملفات النصية, XML, RSS, RTF, WML, Excel (xml) ، ...على OpenTBS المكونات في يتيح الخاص بك إلى دمج أوبن أوفيس و Ms وثائق المكتب.

المطورين من الاستفادة من عفوا المفاهيم بشكل كبير ، مثل جافا/الربيع/Oracle PL-SQL الناس يقولون أن لغة PHP هي نفسها المستخدمة في العرض/عرض/عرض منطق في المؤسسة على مستوى المشاريع.في هذه المشاريع الكبيرة الخلفية أوراكل قاعدة البيانات المنال باستخدام pl-slq/java و العرض هو php.أفضل مثال على ذلك هو facebook.http://en.wikipedia.org/wiki/Facebook facebook يستخدم php للعرض ، java/c++ كما الخلفية واجهة.

السبب الوحيد php يستخدم العرض لأنه يعمل عن كثب مع HTML ، ولكن java/c++ هو أكثر عفوا على أساس لا يمكن أن يكون مناسبا مباشرة مع HTML.أخبرني أحد CMS(جملة/دروبال/وورد) أو(الإطار زند/symfony/يي) مما يجعل استخدام سمارتي ؟ فلماذا هندى هو ضروري ؟

أنا أحب استخدام قوالب لعدة أسباب:

1) ينظف قراءة رمز PHP.بلدي ملفات PHP تصبح منتفخة و ungraceful عندما يكون هناك print("") البيانات مع قطع من HTML في كل مكان.كما المحاصيل قضايا مثل كيف يمكنك تمرير المتغيرات في HTML النص ؟ هل تستخدم الكلمات في كل مكان ؟ هل تستخدم الطباعة("") و الهروب الخاص بك HTML ونقلت لسلسلة الخاص بك المتغيرات ؟ هل تستخدم الطباعة("") و استخدام علامات الاقتباس المفردة في HTML, الذهاب ضد القياسية ، و إدراج المتغيرات الخاصة بك مباشرة ؟

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

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

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

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