PHP, HTML-TEMPLATE vb Kodlama mantığı

Bir çok hazır script veya yardım, destek yazılarında sıkça karşılaştığımız bir sorun, HTML, CSS, JS kodlarının PHP içine echo veya değişkenlere tırnaklar içine atamak usülüyle işletilmesidir.. Geçerli, geçersiz ifadesiyle ele alırsak;

GEÇERSİZ

<?php
// donguden gelinecek
echo "<table class=\"table\">";
echo "<tbody>";
foreach( $kayitlar as $key => $v ) {
	echo "<tr>";
	echo "<td style=\"width:80px;\">";
	echo $v["id"];
	echo "</td>";
	echo "<td>";
	echo $v["baslik"];
	echo "</td>";
	echo "</tr>";
}
echo "</tbody>";
echo "</table>";

// diger baska benzer haliyle
echo "<table class=\"table\"><tbody>";
foreach( $kayitlar as $key => $v ) {
	$id = $v["id"];
	$baslik = $v["baslik"];
	$kategori = $v["kategori"];
	$duzenle = "?duzenle=$id";
	echo "<table class=\"table\"><tbody><tr><td style=\"width:10%;\">$id</td><td style=\"width:50%;\">$baslik</td><td style=\"width:30%;\">$kategori</td><td style=\"width:10%;\"><a href=\"$duzenle\">Düzenle</a></td></tr></table>";
}
echo "</tbody></table>";
?>

GEÇERLİ, daha az zahmet ve okunurluk

<?php if ($kayitlar) : ?>
<table>
	<tbody>
	<?php foreach ($kayitlar as $key=>$v) :?>
		<tr>
			<td><?php echo $v['id']?></td>
			<td><?php echo $v['baslik']?></td>
			<td><?php echo $v['kategori']?></td>
			<td><a href="?duzenle=<?php echo $v['id']?>">Düzenle</a></td>
		</tr>
	<?php endforeach?>
	</tbody>
</table>
<?php endif?>

Bir başka sorun, ayrı bir TEMA dosyası tutmamak ve her sayfaya meta etiketleri yerleştirmek…

Diyelim ki, 20 adet ayrı, ayrı çalışan PHP dosyamız var, hepsinin başına da aynı html kodları ve meta etiketlerini koymak geçersiz bir davranıştır, zira temanın tümünde yapılacak bir değişiklik durumunda, 20 dosyanında tek, tek açılarak değiştirilmesi gerekir, ayrıca her script çöplüğe döner.

Çözüm, Tema klasörü içerisine 1 adet “meta.php” veya “header.php” eklemek ve “include” etmek…

Her dosyaya tek, yek 20-30 satır meta üst bilgisi, html kodları yazmaktansa, 1 dosyaya yazıp o dosyayı her scriptin başına dahil etmek.

<?php
// standard üst kodları dahil et.
include 'tema/tema2016/header.php';

//diger kodlar
?>

Bir diğer sorun ayrı bir TEMA-HTML klasörü ve dosyaları tutmamak… Böylece temayı değiştirmek tüm, ama tüm projeyi sil baştan değiştirmeye veya yeniden yazıyormuşçasına emek-zaman alacak…

Ana dizinde(PHP dosyalarının çalıştığı dizin), bir “tema” klasörü oluşturmak, o tema klasörü içerisine tema isminde bir başka klasör oluşturmak ve html-tema dosyalarını orada ayrıca tutmak, ihtiyaç olan sayfalarda ise “include” etmek bu sorunu zahmetsizce çözecektir.

—————————-

Bir başka sorun satırlarca javascript kodu içeren dosyaların PHP uzantısıyla kaydedilmesi, sebebi ise “.js” dosyalarında PHP değişkenlere çağrı yapılamaması.

Oysa lazım olacak değişken toplamı 1-3 arasında seyreder, bu durumda javascript içerisinde php değişkenlerin taşıdığı değerleri yansıtmak için,” js” dosyasını dahil etmeden önce javascript değişken tanımlamaktır.

Bir yöntem;

<script type="text/javascript">
var url = "<?php echo $url?>";
var resim_yol = "<?php echo $resimyol?>";
</script>
<!-- $url ve $resimyol degiskenlerinin degerlerinin kullanildigi script dosyasi sonrasinda cagirilir -->
<script type="text/javascript" src="js/javadosyam.js"></script>

başka bir yöntem, ilgili bir kaç değişkenin taglara atanmasıdır… Örneğin bir butona tıklandığında javascript açısından bize sayfanın ID si lazım olmuş olsun, bu durumda;

<button type="button" data-id="1254" class="sayfayi_ac">Detaylar</button>
<script type="text/javascript">
$(".sayfayi_ac").click( function() {
// sayfa id al
var sayfa_id = $(this).attr("data-id");

// islemler
});
</script>

Bazı pratik bilgiler;

  1. PHP kodları okurken zaman kaybeder o nedenle ben “tab”, “enter”, “satır başı/sonu”, ara boşluklar kullanmaktan kaçınayım…
    • GEÇERSİZ, zira tüm uğraşlarınızın sonunda elde edeceğiniz + performans saniyenin milyonda biri kadar bile olsa fark oluşturmayacaktır. Zira tab, satır sonları, boşluklar vb. atlanacak-yorumlanmayacak… Ayrıca PHP text formatlı dosyaları microsecond dilimlerinde yorumlar, örneğin 100KB bir dosyayı tek seferde satır, satır yorumlaması, “0,1 microsecond” gibi bir zaman diliminde gerçekleşir, yani saniye cinsinden, “0, 00000001 Saniye” (2.70 GHz dual core CPU, 2 GB RAM’a sahip bir bilgisayar test sonucu)…
    • Peki HTML, CSS kodları sıkıştırılıyor, büyük fark oluşturmasa gerek duyulur muydu? HTML, CSS kodları vb internet ağıyla, internet aracılığıyla iletilen paketlerdir, zaman kaybının ve veri fazlalığının sebebi, ziyretçiye internet ağıyla paketler halinde aktarılmasıyla ilgilidir. Kısaca 1MB veri yükü 5sn’de aktarılıyorsa, 800KB veri yükü, 4sn’de aktarılacak, fark burada, internet ağı..
  2. String alanları çift tırnak içine almalıyım, çünkü içlerinde değişken kullanıyorum. Kod kirliliği ve performans kaybı…
    • yerine örneğin: $abcd = ‘Lorem ipsum dolor’ . $bce . ‘lorem ipsum’;
    • Örneğin:  $sql = “SELECT *FROM tablo WHERE id=$id” yerine $sql = ‘SELECT *FROM tablo WHERE id=’.$id  veya $sql = “SELECT *FROM tablo WHERE id={$id}”

…..

Bir kaç örnek daha

Bu şekilde kullanmak yerine(bu örnek hem “tab” kullanımı, hemde daha az kod yazma mantığı üzerine)

if(isset($abcd))
{
if($abcd>1) 
{
if($abcd<10){
echo '1\'den büyük, 10\'dan küçük';
}
}
}
else if($abcd>10)
{
echo '10\'dan büyük';
}
else
{
echo '1\'den küçük';
}

YERİNE!

$mesaj = '1\'den büyük, 10\'dan küçük';
if ($abcd<1) {
	$mesaj = '1\'den küçük';
}
elseif ($abcd>10) {
	$mesaj = '10\'dan büyük';
}
echo $mesaj;

VEYA

if ($abcd<1) {
	echo '1\'den küçük';
}
elseif ($abcd>10) {
	echo '10\'dan büyük';
}
else {
       echo '1\'den büyük, 10\'dan küçük'; 
}

IF, ELSEIF, ELSE IF

 

“else if” yerine “elseif” kullanılabilir. Bir örnekle

Aşağıdaki kodlama YANLIŞ (else if!, bu şekilde noktalı kullanımda, kod bloğu PHP tarafından yorumlanamaz)

if ($abcd == 'a') :
	$b = 1;
else if ($abcd == 'b') :
	$b = 2;
endif;

DOĞRUSU

if ($abcd == 'a') :
	$b = 1;
elseif ($abcd == 'b') :
	$b = 2;
endif;

Bu şekilde ise “else if” ÇALIŞIR

if ($abcd == 'a') {
	$b = 1;
}
else if ($abcd == 'b') {
	$b = 2;
}

Bu biçimde de “elseif” çalışır

if ($abcd == 'a') {
	$b = 1;
}
elseif ($abcd == 'b') {
	$b = 2;
}

Bazı standard ve kaidelere uyarsak, daha rahat ederiz. Örneğin konunun en başında ifade edildiği gibi, echo ile html kodları oluşturmak vb durumunda, projemize 15 gün sonra geri dönmüş olsak dahi, neyi nereden aldığımızı, neyin nereden geldiği, nereye gittiğini vb kendimiz dahi çözemez hale geliriz. Ayrıca kullandığımız programlar PHP kodlarını, HTML kodlarını ayrı, ayrı renklendirmektedir, tırnaklar arasına çöplük gibi dizeceğimiz değişkenler, kodlar, html taglar ayrıca renklendirilmeyeceği, neyin nerede başladığı, bittiği, bir tagın açılışı, kapanışının neresi olduğu, tırnak problemleri vb sorunları ile, gereksizce ve yok yere cebelleşeceğiz…

3 Yorum

  1. Teşekkürler. Pek anlamıyorum ama çok güzelce ve temelden anlatmışsınız Php’yi. WordPress’ten aşinayız zaten az çok belirttiğiniz noktalara. Bunun gibi yazılara mesela basit tema yapımı gibi konulara girseniz çok okunacaktır, emin olun.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir