2011-06-03 21 views
8

Diğer 2 geliştiriciyle bir web sitesinde çalışıyorum. Sadece görüşleri oluşturmaktan ben sorumluyum.PHP'de Görünüm Oluşturma - En İyi Uygulama

veri bir nesne mevcut olduğunu ve veriler daha sonra XHTML sayfaları oluşturmak okumak için alıcılar var.

Herhangi bir şablon motoru kullanmadan bunu yapmak için en iyi uygulama nedir?

Çok teşekkürler.

+0

Neden herhangi bir şablon dili kullanmak istemiyorsunuz? – confiq

+6

PHP şablonlama dili olarak kullanılabilir, bunun için kısa etiketler açılmış olabilir (zorunlu olarak değil, daha az yazıyorsa). – kapa

+0

@baz: Tabii. Assembler'da da harika web siteleri yazabilirsiniz. – NikiC

cevap

11

Şablonlu bir motor kullanmak istemiyorsanız, PHP'nin temel şablon oluşturma özelliklerinden yararlanabilirsiniz.

Aslında HTML'yi yazmanız ve her defasında bir değişkenin değerini vermeniz gerekiyorsa, <?php ile bir PHP bölümünü açın ve ?> ile kapatın. Örnek nesneyi $data veri nesneniz olduğunu varsayacağım. Örneğin

:

<div id="fos"><?php echo $data->getWhatever(); ?></div> 

lütfen unutmayın, ayrıca şablonu için kullanılabilecek bir sözdizimine sahip tüm PHP kontrol yapıları (gibi if, foreach, while, vs.). Bunları PHP manuel sayfalarında görebilirsiniz. Örneğin

:

<div id="fos2"> 
<?php if ($data->getAnother() > 0) : ?> 
    <span>X</span> 
<?php else : ?> 
    <span>Y</span> 
<?php endif; ?> 
</div> 

kısa etiket kullanımını size (XML ve XHTML ile değil tavsiye) de kullanabilirsiniz basitlik için, sunucu üzerinde etkin olacak biliyorsanız. Kısa etiketlerle, PHP parçanızı <? ile açıp ?> ile kapatabilirsiniz. Ayrıca, <?=$var?> bir şeyi yankılamak için kısa bir yoldur. Kısa etiketleriyle

İlk örnek: Eğer olsa satır sonları ve boşluk kullanın nerede farkında olmalı

<div id="fos"><?=$data->getWhatever()?></div> 

. Tarayıcı yazdığınız metni alır (PHP parçaları hariç). Ben bu demek Ne: Bu birine

<?php 
    echo '<img src="x.jpg" alt="" />'; 
    echo '<img src="y.jpg" alt="" />'; 
?> 

eşdeğer değildir:

bu kodu yazma

<img src="x.jpg" alt="" /> 
<img src="y.jpg" alt="" /> 

ikinci birinde sen img elemanları arasında gerçek bir \n sahip olduğundan

, tarayıcı tarafından bir boşluk karakteri olarak çevrilecek ve satır içi görüntülerde gerçek bir boşluk olarak görüntülenecektir.

+0

Bu benim görüşüme göre yapılması gereken bir yoldur.Gerçekte, şablon sistemlerinin kullanımı dürüst olmak için güncel değil.Bir şablon sisteminin çöküşü olduğunu Evet, sen yazdın, ve nasıl çalışacağını biliyorsun, yeni bir geliştiriciyi işe aldığınızda ne olacak? O şimdi senin kodunu okumalı ve senin şablon sistemini öğrenmelisin. –

+0

@Dalton Smarty gibi yaygın şablon sistemleri var: – kapa

+0

XHTML'de neden kısa etiketler önerilmiyor? – binaryLV

0

veri okumak için ayrı bir dosya kullanın:

<?php 
if ($foo == False) 
    { 
    $bar = 1; 
    } 
else 
    { 
    $bar = 0; 
    } 
?> 

Sonra HTML dosyası ile sonuçlanan devlet referans:

require 'logic.php'; 

<html> 
    <!--...--> 
    <input type="text" value="<?php echo $bar; ?>" > //Logic is separated from markup 
    <!--...--> 
</html> 
0

i gerçekten sorunuzu olsun onu bilmiyorum.böylece cevabım değil exaclty eğer ben bu sınıf basit görünüm yaratacaktır

silinmiş giderilirse gibi olacak

class View 
{ 

public function render($filename, $render_without_header_and_footer = false) 
{ 
    // page without header and footer, for whatever reason 
    if ($render_without_header_and_footer == true) { 
     require VIEWS_PATH . $filename . '.php'; 
    } else { 
     require VIEWS_PATH . '_templates/header.php'; 
     require VIEWS_PATH . $filename . '.php'; 
     require VIEWS_PATH . '_templates/footer.php'; 
    } 
} 


private function checkForActiveController($filename, $navigation_controller) 
{ 
    $split_filename = explode("/", $filename); 
    $active_controller = $split_filename[0]; 

    if ($active_controller == $navigation_controller) { 
     return true; 
    } 
    // default return 
    return false; 
} 

private function checkForActiveAction($filename, $navigation_action) 
{ 
    $split_filename = explode("/", $filename); 
    $active_action = $split_filename[1]; 

    if ($active_action == $navigation_action) { 
     return true; 
    } 
    // default return of not true 
    return false; 
} 

private function checkForActiveControllerAndAction($filename, $navigation_controller_and_action) 
{ 
    $split_filename = explode("/", $filename); 
    $active_controller = $split_filename[0]; 
    $active_action = $split_filename[1]; 

    $split_filename = explode("/", $navigation_controller_and_action); 
    $navigation_controller = $split_filename[0]; 
    $navigation_action = $split_filename[1]; 

    if ($active_controller == $navigation_controller AND $active_action == $navigation_action) { 
     return true; 
    } 
    // default return of not true 
    return false; 
} 
} 

soo şimdi size şablonları oluşturabilir ve sadece

$this->view->my_data = "data"; 
$this->view->render('index/index'); 
// 
gibi herhangi bir yerde diyebilirsin

ve dizininizde/index.php'de data $ this-> my_data;