PHP sınıfları içeriğini listeleme için etkili bir çözüm var mı?

0 Cevap php

Web sitemizin benim portföy listelemek istiyorum, ve ben her müşterinin temelleri hakkında parametrelerini ayarlamak ve almak için bir sınıf, Client yazdı, yani: Müşterinin adı, web sitesi, bu özellikli, bu yayınlanan, biz ne için ürün yaptın Onları, vb

Bu oldukça ilkel, ama her müşteri için bir nesne oluşturmak için daha iyi varsayarak (ve her birlikte veri bulunuyor tutarak) yerine dizisi en her bir parametre için oluşturma ve bu dizinin her şey den gelen elemanları çağrı düzeltmek am?

İşte benim sınıf, ben hala ilkel olduğunu biliyorum, ama ben de diğer bazı fonksiyonları oluşturabilir, yani şimdi ben sadece her Client için parametreleri almak veya ayarlamak için temel bir alıcı ve ayarlayıcı kullanıyorum.

<?php

class Client {
    private $name = "";
    private $items = array();
    private $website = "";
    private $featured = false;
    private $published = false;
    private $type = array();
    private $filename = null;
    private $extension = null;

    public function __set($name, $value) {
        //echo "Setting ".$name." to value: ".$value."\n";
        $this->{$name} = $value;
    }

    public function __get($name) {
        //echo "Getting ".$name.": ".$this->{$name};
        return $this->{$name};
    }

    public function __isset($name) {
        return isset($this->{$name});
    }

    public function __unset($name) {
        unset($this->{$name});
    }
}

?>

Ben hala sınıfa eklemek isteyebilirsiniz işlevleri planlıyorum, ama şimdilik bu kadar.

Burada her bir istemci nesnesi oluşturmak için kullanıyorum benim diğer kodu:

<?php

// create Client object for every client

$files = array();
// files to take out of file listing, I'm developing on Mac, i.e. ._DS_Store file
$bad_files = array(".","..","._DS_Store");
$portfolio = "portfolio";
$images = "images";
$details = "details";
$thumbs = "thumbs";

// get all *.txt files listed in portfolio, so a client will not be added to portfolio without the necessary details.
if (is_dir("$images/$portfolio")) {
    if (is_dir("$images/$portfolio/$details")) {
        $files = scandir("$images/$portfolio/$details");

        sort($files);
    }
}
$files = array_diff($files, $bad_files);
sort($files);

// keeps a list of all clients
$clients = array();

foreach ($files as $file) {
    $value = file_get_contents("$images/$portfolio/$details/$file");

    $newClient =  new Client();

    $filename = explode(".",$file);
    $newClient->filename = $filename[0];
    $client_image = glob("$images/$portfolio/$images/".$newClient->filename.".*");
    $newClient->image = $client_image[0];
    $client_thumb = glob("$images/$portfolio/$thumbs/".$newClient->filename.".*");
    $newClient->thumb = $client_thumb[0];

    $client_items = array();
    $client_type = array();

    // gets variables from text file contents and explode string to array [key=value] values
    $content = explode("&",$value);
    for ($j=0; $j<count($content); $j++) {
        $client = explode("=", $content[$j]);
        if (strpos($client[0],"name") !== false) $newClient->name = $client[1];
        if (strpos($client[0],"items") !== false) $client_items = $client[1];
        if (strpos($client[0],"website") !== false) $newClient->website = $client[1];
        if (strpos($client[0],"featured") !== false) $newClient->featured = $client[1]; // show on frontpage
        if (strpos($client[0],"published") !== false) $newClient->published = $client[1]; // show at all
        if (strpos($client[0],"type1") !== false) $client_type[] = $client[1]; // show for specific type, eg. business card, website
        if (strpos($client[0],"type2") !== false) $client_type[] = $client[1]; // show for specific type, eg. business card, website
    }

    // these parameters need array type values
    $newClient->type = $client_type;
    $newClient->items = explode(", ",$client_items);

    // adds client to list of clients
    $clients[] = $newClient;
}

?>

Burada çıktı, her müşterinin afiş ve ayrıntıları kullanıyorum kodu:

<div id="banner_content">
    <?
        foreach ($clients as $client) {
        // client must be published to show at all
            if ((($page == "home" && $client->featured) || $page != "home") && $client->published) {
    ?>
    <div class="banner_container"><img src="<? echo $client->image; ?>" width="809" height="324" alt="<? echo $client_name; ?>" title="<? echo $client_name; ?>" />
        <div class="banner_details">
            <div class="client_name">Client: <b><? echo (!empty($client->name) ? $client->name : "Unknown"); ?></b></div>
            <div class="client_items"><? echo (!empty($client->items) ? "Items: <b>".join(", ",$client->items)."</b>" : ""); ?></div>
            <div class="client_website"><? echo (!empty($client->website) ? "Website: <b><a href=\"http://".strtolower($client->website)."\">".$client->website."</a></b>" : ""); ?></div>
        </div>
    </div>
    <?
    }
}
?>
</div>

Herhangi bir yardım veya tavsiye çok duyacağız. Şimdiden teşekkürler.

/ / Düzenle

Ben orada bir Portföy sayfa olacak ve sadece yukarıda belirtilen bilgi daha istemcisi hakkında daha fazla bilgi içerecek olan çünkü aslında, sınıf yazdım, söylemeyi unuttum. Ben bir sınıf sadece bir afiş görüntüleri listesi için biraz overkill olduğunu biliyorum.

0 Cevap