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;
…..
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
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.
Paylaşım için teşekkürler
Oldukça faydalı bir paylaşım. Teşekkürler