Bir veritabanından çıkış verilerine en iyi yolu kullanarak php nedir?

5 Cevap php

Ben php nispeten yeniyim, ve ben bir mysql veritabanı kullanarak bir proje üzerinde çalışıyorum. Proje Kullanıcılar daha sonra bir liste biçiminde gösterilir mesajları yazabiliyor olmak oluşmaktadır. Sorun ileti indeksi (ana) sayfa ve kullanıcıların profil sayfası gibi, sitede farklı yerlerde gösterilir vardır. Eğer karışık iseniz twitter benzer. Benim soru, mesajları görüntülemek için en iyi yolu nedir nedir? Şu anda ben oluşturulan bir sınıf kullanıyorum. Bu veritabanından mesajları almak çok boyutlu bir dizi hepsini kurtarmak için fonksiyonları vardır. Daha sonra sınıftan başka bir fonksiyon foreach kullanarak tüm listeyi biçimlendirir ve daha sonra mesajların biçimlendirilmiş HTML listesini döndürür. Ben yapmam gereken döndürülen ne echo. Ama bu çıkış, HTML fonksiyonları (özellikle sınıf fonksiyonlar) yazmak için kötü bir uygulama olduğunu okumuştum. Ne mesaj gösterilir her sayfada aynı kodu yeniden yazmak zorunda kalmadan, bunu yapmak için en iyi yol olacaktır. Bu fonksiyonları HTML kullanmak gerçekten kötü bir uygulama mı?

Example... a profile page looks something like this.

<

require('class.php'); 

require('header.php');

$profile = new Profile(); 

$userProfile = $profile->GetUserProfile($userID); 

echo $userProfile;

$class = new Posts(); 

$posts = $class->GetUserPosts($userID); 

echo $posts;

require('footer.php'); 

?>

Ve ana sayfaya şöyle

<

$class = new Posts(); 

$posts = $class->GetAllPosts(); 

echo $posts;


?>

where the profile class would take a user id and output the users profile, already formatted in HTML. And the posts class has functions to return a determined number of posts already formatted in an HTML list.

Ben sınıfta şeyi tutmak, ya da daha iyi bir yolu var mıdır?

Teşekkürler

5 Cevap

Bazı tür bir MVC framework kullanarak değilseniz Peki, o zaman ben fonksiyonlara sahip çıktı HTML kimseyi öldürecek olmadığını söyleyebilirim.

Genellikle ancak, bu mantıktan ayrı HTML yararlı olur, ve bu genellikle serpiştirilmiş PHP ile bir HTML şablonu ve şablon parçalarını oluşturarak yapılır. Böyle bir şey:

<div>
    <h1><?php echo $title; ?></h1>
</div>

Daha sonra bir $title değişkeni (ve diğerleri) kurmak, ve include('title_fragment.php') bu HTML bit çıkış olabilir. Eğer kodu yalnızca şablona geçmiş olsun küçük miktarda veri ile uğraşmak zorunda olduğu, böyle yapmakla, tüm sayfaları ile çalışmak için bu uzatabilirsiniz.

Bu sayfa düzeni değişiklik yapmak veya bakmak için zamanı geldiğinde, oluşturulan HTML bitlerini bulmak için kodu ile avcılık gitmek zorunda değilsiniz ... Eğer şablon dosyaları gidebilirsiniz.

Bu sürdürülebilir tasarım gibi kodu için önemli olduğunu, ve bu daha kolay, daha sonra diğer çıktı türlerini üretmek için yapar.

PHP ile, ikisini ayırmak için basit kütüphanelerden biri Smarty şablonları. Smarty (veya başka bir şablon kütüphanesi) kullanarak, düzen ve bazı basit döngüler veya diğer yapıları ile bir HTML dosyası yazmak ve ardından bir veri yapısını kullanarak bu şablonu hale getirebilir. En azından, ben bir şablon kullanmak ve çıkış bu şekilde yerine print veya HTML bir grup ile echo tabloların miş-püre üretmek için sınıf değiştirmeyi öneririm onları.

Hatta utangaç uzakta HTML parçaları yankı tabloların @ zombat solüsyonu, onlar hızla çirkin olmak istiyorum.

Ne istediğinizi gibi bir şey elde etmek için örnek Smarty şablon:

{section name=i loop=$posts}
   <li>{$posts[i].author} &mdash; {$post[i].text}</li>
{/section}

Ve bazı PHP destekleyen kodu:

// Instantiate Smarty object
$smarty = new Smarty();

// Assign a hash of data
$smarty->assign('posts', array(
    array('author' => 'Jim',   'text' => 'Hi this is my post!'),
    array('author' => 'Sally', 'text' => 'My first post to the system')
  )
);

// Use the file with the above template in it
$smarty->display('posts.html');

Eğer şablona veri atamak bölümü muhtemelen karma bir liste halinde sınıf nesnelerinin listesini dönüştürmek için bazı programatik yollarla yapılmalıdır.

Bu şekilde kolayca çıkış sadece HTML şablonu düzenleyerek görünüyor ve çıkışını değiştirmek için herhangi bir kod dokunmadan hakkında endişelenmenize gerek yok biçimini değiştirebilirsiniz.

Sizin sınıf ideal sadece veri sağlamalıdır. , Çıkış HTML başka bir PHP dosyası veya jenerik sınıfını kullanın böylece daha sonra çıktı, örneğin olabilir XML, JSON, vb aynı veri sınıftan. Bu veri gösterimi (görünüm) veri işleme (model / kontrolör) ayırır.

Ben Smarty gibi bir şablon motoru kullanarak katılmıyorum olur. PHP is bir şablon motorudur.

Çıktı tamponlama kullanabilirsiniz. Bu ekran sırayla verileri işlemek zorunda şablonlarınızı oluşturmak değil, yardım ediyor.

<?php
  $posts = take_data_from_class();
  ob_start();
  require_once('path/to/posts.php');
  $html_posts = ob_get_clean();

  // you can do the same with other parts like header or footer
  ob_start();
  require_once('path/to/header.php');
  $header = ob_get_clean();

  ob_start();
  require_once('path/to/footer.php');
  $footer = ob_get_clean();

?>

Posts.php sen mesajları görüntüleyebilirsiniz:

<? foreach ($posts as $p) { ?>
<div class="...">
  post data here
</div>
<? } ?>

Şimdi, her şeyi görüntülemek için:

<?php echo $header . $html_posts . $footer; ?>

Daha az http://us3.php.net/manual/en/book.outcontrol.php

Tadını çıkarın!

Tüm Smarty aşina değil im ... tam olarak nasıl bu işi yapıyor, ve büyük miktarda veri almak ve veri sadece daha yankılandı o içeren html dönmek için sadece işlevleri oluştururken smarty e karşı kullanmanın faydaları nelerdir?