Güzel benim PHP tutulması

14 Cevap php

Ben farklı sayfaları (yani, formu dolduran ya da değil, vb veya giriş) belirli koşullara bağlı olarak çok farklı bir görünüm hangi bir site oluşturma. Bu gerekli farklı zamanlarda html çıkış ayrılmakta blok kolaylaştırır.

Yapıyor, ancak, benim php kod korkunç görünmesini sağlar ... gerçekten kod biçimlendirme ve "şekil" ile uğraşamaz. Bunu nasıl almak gerekir? Script'lerime altındaki özel "html dökümü" fonksiyonları dahil mi? Aynı şey, fakat içerir? Yorumlu metinler (çok iyi görünmüyor)?

Teşekkürler!

14 Cevap

Her yeni Web programcı yüzü, bu sorunu panik yapmayın.

Siz ekrandan program mantığı ayırmak ZORUNDA. İlk olarak, her Web sayfası için iki dosya kullanarak kendi çözüm yapmayı deneyin:

  • değişkenleri doldurur sadece PHP kod (HTML) ile bir
  • HTML ve çok az PHP ile başka: Bu sayfası tasarımı

/ Eğer ihtiyaç olduğunda Sonra içerir. Örn:

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>

(Bu biri için alternative PHP syntax kullanmak isteyebilirsiniz. Ama gerçekten, ilk defa mükemmel yapmak zor kalkmayın.)

myPage.php

<?php

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

Don't bother about performance issues for now. Bu bir acemi olarak öncelikli değildir. Bu çözüm kusurlu olduğunu, ancak programlama düzeyi ile sorunu çözmek ve size temellerini öğretecek yardımcı olacaktır.

MVC deseni hakkında bir kitap satın almak (ya da bu konuda yığın taşması girişler için arayın) Sonra, bir kez senin, bu kavram ile rahat. Eğer NEXT TIME yapmak istediklerini söyledi. Sonra bazı çiftleşmiş sistemleri ve çerçevelerinin deneyin, ama LATER edeceğiz. Şimdilik, sadece kodu ve baştan öğrenirler. Sen mükemmel bir çaylak olarak, gayet iyi, böyle bir proje kodu olabilir.

Bir mvc yaklaşım kullanın.

http://www.phpmvc.net/

Bu birkaç saat içinde almak olacak bir şey değildir. Eğer gerçekten uygulama gerekir. Ana şey kontrolör, modelinizi (db tabakası) erişmek verilerinizi şeyler yapmak ve daha sonra render için görünümüne göndermek olacaktır. Bu basitleştirilmiş ama sadece bunu anlamak için okumak ve uygulama gerekir.

This is something I used to help me learn it. http://www.onlamp.com/pub/a/php/2005/09/15/mvc_intro.html

Mümkün olduğunca sizin kod içerik ve düzeni ayırmaya çalışın. Eğer bir. Php dosyada herhangi bir HTML yazmak her zaman, dur ve düşün "bu really Buraya ait mi?"

Bir çözüm şablonları kullanmaktır. Oldukça kolay kullanımlı seçeneği için Smarty çiftleşmiş sistemi bakmak.

Yapıyor, ancak, benim php kod korkunç görünmesini sağlar ... gerçekten kod biçimlendirme ve "şekil" ile uğraşamaz. Bunu nasıl almak gerekir?

Bir tek, tutarlı bir girinti yapısı ile, tek bir hiyerarşi olarak PHP ve HTML davranın. Yani böyle bir 'eğer' ya da 'için' olarak bir PHP parça-yapı girinti yeni bir düzeye tanıtır ve içeriği her zaman başlangıç ​​ve bitiş etiketleri dengeli bir dizi vardır. Esasen Eğer gerçekten XHTML kullanarak olsun veya olmasın, terimin XML anlamda 'iyi biçimlendirilmiş' PHP'nizi yapıyoruz.

Örnek:

<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>

Burada tekrar cevapları başını yetiştirme mantığı ve biçimlendirme ayıran etrafında dini dogma karşı dikkatli olun. Eğer sayfa çıkış kodu dışarı iş mantığı tutmak istiyorsanız kesinlikle iken, bu mutlaka ayrı dosyalar, sınıflar, şablonları ve çerçeveler kullanarak havai bir yük anlamına gelmez ne yaptığınızı için gerçekten gereklidir. Basit bir uygulama için, sadece dosya ve aşağıdaki sayfa çıktı üstündeki eylem / mantık şeyler koymak için yeterli olması muhtemeldir.

(Htmlspecialchars yapıyor yukarıdaki yorumların birinde, örneğin () için tüm iş mantığı kadar karışık kesinlikle don't sizin PHP eylem biraz koymak istediğiniz sayfa çıktısı işlevselliği vardır. Daima metin tutmak düz, çıkmamış dizeleri gibi uygulama mantığını bırakır. yazarak 'echo (htmlspecialchars (...)') her zaman çok ağız ise noktaya kadar, her zaman 'saat' gibi kısa bir isimde bir fonksiyon yapabilirsiniz aynı işi yapar.)

Sorunun sesi, kodunuzu mantık ve sunum arasında çok ayrılık olmayabilir görünüyor. Bir uygulama tasarlarken, bu tam sizin şu anda karşı karşıya durumun gösterdiği nedenlerden dolayı, çok önemli bir husustur.

Eğer yoksa zaten ben böyle Smarty gibi bazı PHP çiftleşmiş motorları bakmak istiyorum.

Bu gibi durumlarda ben bir değişken ya da bazen bir diziye adım adım her şeyi yazmak ve ardından değişken / dizi echo. Bu sayfa her zaman yerine giderek daha tek seferde kıldığını ekledi avantaja sahiptir.

Ben bu durumda yapıyor sonuna kadar ben dahil HTML verilerin 'şablon' dosyaları oluşturmak ve daha sonra düzenli ifadeler ile üzerinden ayrıştırmak. Temiz kodu tutar ve daha kolay bir tasarımcı, ya da diğer HTML kişiye kapalı adet el yapar.

Wikipedia de MVC programlama uygulamaları arkasındaki idealleri göz atın

Sen bir çerçeveye ihtiyaç var. Bu (çünkü zaten bahsedilen model-view-controller desen, MVC) sizin kod oldukça yapmaz - çünkü zaten bunun için yazılmış parçaların size zaman kazandıracak.

Ben bu inanılmaz, QCodo öneriyor; CakePHP, Symfony - diğerleri vardır.

Bu büyük bir proje ise bir çerçeve sırayla olabilir. Değilse, bazı şablon dosyaları oluşturmak ve sayfanın üstündeki eklemek için hangi şablonu dosyası karar.

örneğin

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

sadece basit bir örnek

Yukarıda belirtildiği gibi .. sen belirti değil, sorun tespit edilir ..

Ne gerek mantık ve sunum ayrılmasıdır. Mvc framework çeşit ile yapılabilir hangi. Eğer bir mvc framework ile tüm yol gitmek istemiyorum bile .. Bir çiftleşmiş motoru mantık size açıklayan ne sorun var ki yeterince karmaşıktır en azından eğer bir zorunluluktur

Ben kuvvetle, savant yerine smarty önermek

  • Eğer şablonları oluşturmak amacıyla yeni bir çiftleşmiş "dil" öğrenmek zorunda değilsiniz, bilgin şablonlar php yazılır
  • Eğer php kullanmak istemiyorsanız, bir derleyici ile kendi şablon "dil" tanımlayabilirsiniz
  • kendi php nesneler tarafından kolayca uzatılabilir bulunuyor

Sunum mantığı ayırmak tüm iş mantığını başka bir şey php ve sunum mantığı içinde olmak zorunda olduğu anlamına gelmez, ayırma veri bunu gösterir bir form hazırlar mantığı ayırmak için hae, kavramsal bir şeydir. Açıkçası iş mantığı sunum elemanları içermesi gerekmez.

Varsayılan başına yükü oluşturarak bir çiftleşmiş sistemi (PHP kendisi), üstüne çiftleşmiş sistemlerin uygulanması yerine, size XSL Transformations, ayrıca {ile uyumlu olduğu [(1)] gibi daha sağlam bir çözüm için gidebilirsiniz } (, artı, ben şahsen farklı dosyaları ile XML görüntülenmesini mantığı bölünmüş size veri alma ayırmak şartıyla).

Eğer bir tabloda görüntülemek istediğiniz bir dizi aşağıdaki bilgileri, düşünün.

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

Kolayca XML bu bilgiyi verir, bir komut dosyası oluşturun:

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

Aşağıdaki XML Sonuçlanan:

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

Şimdi bu tüm mükemmel olduğunu, ancak güzel bir biçimde görüntüler olmaz. XSLT bazı basit kod ile içeri giriyor, bir tabloya bu dönüşümü:

<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>

Et işte, var:

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

Şimdi bu basit örneğin, bu overkill biraz; ancak büyük projelerde karmaşık yapılar için, bu uzak biçimlendirme sizin komut dosyası mantığı tutmak için mutlak bir yoludur.

question PHP ve HTML ayıran hakkında bu kontrol, vs vs vs bu kendi üzerinde bir çiftleşmiş sistem olarak kendini yazılı çiftleşmiş gibi sistemlerde Smarty, PHP gibi çiftleşmiş sistemleri de dahil olmak üzere bunu yapmak için çeşitli yolları vardır ..

Ben bir MVC Framework kullanmak veya kod üzerinde önemli yük vereceğini tembel çiftleşmiş bir şekilde kullanmak ya, burada iki seçenek var düşünüyorum. Açıkçası ben eski ile, ben MVC öğrenme kitapta en iyi web geliştirme hileler biri olduğunu düşünüyorum.