سؤال

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

تفعل ذلك يجعل رمز php تبدو مروعة...حقا عبث مع التنسيق و "الشكل" من القانون.كيف يمكنني الحصول على حول هذا ؟ بما في ذلك العرف html "تفريغ" وظائف في الجزء السفلي من النصوص ؟ نفس الشيء ولكن يشمل?Heredocs (لا تبدو جيدة جدا)?

وذلك بفضل!

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

المحلول

لا داعي للذعر ، كل مبرمج ويب جديدة تواجه هذه المشكلة.

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

  • واحد فقط مع رمز PHP (لا HTML) التي تملأ المتغيرات
  • آخر مع HTML و عدد قليل جدا من PHP :هذه هي الصفحة الخاصة بك تصميم

ثم تدرج فيها / عندما كنت في حاجة إليها.E. G :

myPageLogic.php

<?php

// pure PHP code, no HTML

$name = htmlspecialchars($_GET['name']);
$age = date('Y') - htmlspecialchars($_GET['age']);

?>

myPageView.php

// very few php code
// just enought to print variables
// and some if / else, or foreach to manage the data stream

<h1>Hello, <?php $name ?> !</h1>

<p>So your are <?php $age?>, hu ?</p>

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

myPage.php

<?php

require('myPageLogic.php');
require('myPageView.php');
?>

لا تهتم حول مشكلات الأداء الآن.هذه ليست أولوية كمبتدئ.هذا الحل هو الكمال ، ولكن سوف تساعدك على حل المشكلة مع مستوى البرمجة و سوف يعلمك أساسيات.

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

نصائح أخرى

استخدام mvc النهج.

http://www.phpmvc.net/

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

وهذا شيء يمكن أن يساعدني في معرفة ذلك.http://www.onlamp.com/pub/a/php/2005/09/15/mvc_intro.html

محاولة فصل المحتوى الخاص بك و تخطيط من التعليمات البرمجية الخاصة بك قدر الإمكان.في أي وقت يمكنك كتابة أي HTML في .ملف php ، والتوقف عن التفكير "هل هذا حقا تنتمي إلى هنا؟"

أحد الحلول هو استخدام القوالب.نظرة على هندى templating النظام جدا سهل الاستخدام الخيار.

تفعل ذلك يجعل رمز php تبدو مروعة...حقا عبث مع التنسيق و "الشكل" من القانون.كيف يمكنني الحصول على حول هذا ؟

علاج الخاص بك PHP و HTML واحد الهرمي مع واحد يتفق المسافة البادئة هيكل.لذا PHP أرفق-هيكل مثل 'إذا' أو 'ل' يقدم مستوى جديد من المسافة البادئة, ومحتوياته دائما مجموعة متوازنة من البداية و النهاية-العلامات.أساسا كنت جعل الخاص بك PHP 'جيد' في XML من معنى ، إذا كانت أم لا كنت في الواقع باستخدام XHTML.

على سبيل المثال:

<div class="prettybox">
    Hello <?php echo(htmlspecialchars($name)) ?>!
    Your food:
    <?php foreach($foods as $food) { ?>
        <a href="/food.php?food=<?php echo(urlencode($food)) ?>">
            <?php echo(htmlspecialchars($food)) ?>
        </a>
    <?php } ?>
    <?php if (count($foods)==0) { ?>
        (no food today)
    <?php } ?>
</div>

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

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

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

إذا لم تكن قد كنت نلقي نظرة على بعض PHP النموذجيه محركات مثل هندى.

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

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

تحقق المثل وراء MVC البرمجة الممارسات في ويكيبيديا

كنت بحاجة إلى إطار.هذا لن يجعل التعليمات البرمجية الخاصة بك جدا (بسبب ما سبق ذكره من model-view-controller نمط MVC) - أنه سيوفر لك الوقت لأن المكونات التي سبق أن كتبت عن ذلك.

أوصي QCodo إنه مدهش ؛ هناك آخرون - للكيك, Symfony.

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

على سبيل المثال

if ($_SESSION['logged_in'])
     include(TPL_DIR . 'main_logged_in.tpl'); 
else
     include(tPL_DIR . 'main.tpl');

مجرد مثال بسيط

كما ذكر أعلاه..يمكنك تحديد أعراض, لا مشكلة..

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

أقترح بشدة موهوب بدلا من ذكي ،

  • لم يكن لديك لمعرفة جديد النموذجيه "لغة" من أجل إنشاء قوالب, موهوب قوالب هي مكتوبة في php
  • إذا كنت لا ترغب في استخدام php يمكنك تحديد القالب الخاص بك "اللغة" مع مترجم
  • انها بسهولة قابلة للتمديد من قبل الخاصة بك php الكائنات

فصل المنطق من العرض لا يعني أن كل ما عليك منطق الأعمال يجب أن يكون في php و العرض التقديمي الخاص بك المنطق في شيء آخر ، الفصل هو شيء نظري ، هاي فصل المنطق التي تعد نموذج البيانات الذي يدل على ذلك.من الواضح أن منطق الأعمال لا يجب أن تحتوي على عرض العناصر.

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

تخيل وجود المعلومات التالية في مجموعة التي تريد عرضها في الجدول.

Array
{
  [car] => green
  [bike] => red
}

يمكنك بسهولة إنشاء برنامج نصي مخرجات هذه المعلومات في XML:

echo "<VEHICLES>\n";
foreach(array_keys($aVehicles) as $sVehicle)
  echo "\t<VEHICLE>".$sVehicle."</NAME><COLOR>".$aVehicles[$sVehicle]."</COLOR></VEHICLE>\n";
echo "</VEHICLES>\n";

مما أدى إلى XML التالي:

<VEHICLES>
  <VEHICLE>
    <NAME>car</NAME>
    <COLOR>green</COLOR>
  </VEHICLE>
  <VEHICLE>
    <NAME>bike</NAME>
    <COLOR>red</COLOR>
  </VEHICLE>
</VEHICLES>

الآن هذا هو كل شيء ممتاز, ولكن لا عرض في لطيفة الشكل.هذا هو المكان XSLT يأتي في.مع بعض رمز بسيط, يمكنك تحويل هذا إلى الجدول:

<xsl:template match="VEHICLES">
  <TABLE>
    <xsl:apply-templates select="VEHICLE">
  </TABLE>
</xsl:template>

<xsl:template match="VEHICLE">
  <TR>
    <TD><xsl:value-of select="NAME"></TD>
    <TD><xsl:value-of select="COLOR"></TD>
  </TR>
</xsl:template>

وآخرون فويلا, لديك:

<TABLE>
  <TR>
    <TD>car</TD>
    <TD>green</TD>
  </TR>
  <TR>
    <TD>bike</TD>
    <TD>red</TD>
  </TR>
</TABLE>

الآن هذا مثال بسيط, هذا هو قليلا من مبالغة;ولكن الهياكل المعقدة في المشاريع الكبيرة, هذا هو المطلق طريقة للحفاظ على برمجة المنطق بعيدا عن العلامات.

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

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

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