Adresi: https://code.google.com/p/phpquery/
Dökümantasyon: https://code.google.com/p/phpquery/wiki/Manual
Eğer jQuery ile haşır neşir olan birisi iseniz DOM manipulasyonunu ne kadar kolaylaştırdığını biliyorsunuzdur. phpQuery aynı fonksiyonel özellikleri size PHP ile kullanma imkanını sunuyor. Karmakarışık HTML kodu manipülasyonlarına elveda diyebilirsiniz.
phpQuery ile jQuerynin sağladığı imkanların çoğuna erişim sağlayabilirsiniz, bunlar 4 kategoriye ayrılıyor
- DOM elementi oluşturmada (HTML elementleri yaratmak)
- HTML elementlerini seçmek ve manipüle etmek
- DOM elementleri arasında geçiş
- Sonucu browsera yansıtmak
phpQuery de bulunan jQueryden portlanan bölümler
- Selector yapısı (Çeşitli koşulları sağlayan HTML elementlerini bulup seçme)
- Attributes (HTML kodlarının öznitelikleri ile çalışma)
- Traversing (Seçilen elementlerin bulunduğu liste arasında dolaşmak)
- Manipulasyon (Seçilen elementin içeriğini değiştirmek,eklemek ve silmek)
- Ajax (Server taraflı AJAX istekleri oluşturmak)
Bu javascriptteki ajaxtan farklı, işlemi browser gerçekleştirmiyor arkaplanda PHP gerçekleştiriyor
- Events (Seçili elementlere DOM etkinlikleri atamak, Form gönderme işlemi, tıklama veya içerik değişmesi gibi)
phpQuery nasıl kullanılır
Şimdi sizlere ikili sütun ile başlık ve farklı renk satır rengi içeren aşağıdaki tablonun nasıl oluşturulduğunu göstereceğim.

Önce phpQuery ile HTML dökümanı oluşturalım:
<?php
require("phpQuery/phpQuery.php");
$doc = phpQuery::newDocument("<div/>");Yukarıdaki kod basit bir div tagı içeren HTML dökümanı oluşturacak. Kütüphane çeşitli döküman oluşturma metodlarını içeriyor. Biz en basiti ile giriş yapıyoruz. Diğerlerini kütüphane içindeki demo.php ve dökümantasyon sayfasından görebilirsiniz.Şimdi bir liste oluşturalım ve HTML dökümanımıza ekleyelim
$doc["div"]->append("<ul><li>Product Name</li><li>Price</li></ul>");
$products = array(
array("Product 1","$30"),
array("Product 2","$50"),
array("Product 3","$20"));
foreach($products as $key=>$product) {
$doc["div ul"]->append("<li>$product[0]</li><li>$product[1]</li>");
}
print $doc;Şimdi bir listemiz var. Fakat bütün elementler tek sütun. Rengi farklı olacak elementleri 2. sütuna koyuyoruz
$doc["div ul"]->attr("style", "width:420px;");
$doc["div ul"]->find("li:even")->attr("style","width:200px; float:left; padding:5px; list-style:none;");
$doc["div ul"]->find("li:odd")->attr("style","width:200px; float:left; padding:5px; list-style:none;");Burada style özniteliğini oluşturarak örneğimize CSS stili ekliyoruz, fakat gerçekten ihtiyacınız yoksa asla bu yönteme başvurmayın. Her zaman CSS dosyalarını kullanın.Şimdi başlık bölümünü aydınlatalım ve tekli sütunların rengini belirleyelim
$doc["div ul"]->find("li:nth-child(4n)")->attr("style","background:#EEE; width:200px; float:left; padding:5px; list-style:none;");
$doc["div ul"]->find("li:nth-child(4n-1)")->attr("style","background:#EEE; width:200px; float:left; padding:5px; list-style:none;");
$doc["div ul"]->find("li:lt(1)")->attr("style","background:#CFCFCF; width:200px; float:left; padding:5px; list-style:none;");Örneğimizin sonuna geldik, şimdi phpQuery ile HTML kodlarına müdahale etmek hakkında bir nebze fikir oluşmuştur kafanızda.phpQuery nin önemi
Burada phpQuerynin özelliklerinden bahsettik ama aklınızda jQuery varken neden ihtiyaç duyalım sorusu oluşabilir.
Bir durum düşünün: aşağıdaki gibi bir tablo var elimizde, bu tabloda iş yapılan webmasterların bilgileri bulunuyor

Şimdi bu tabloyu oluşturmak için gerekenler
- 60 dan fazla Mark olanlar mavi ile aydınlatılacak
- 3 yıldan fazla çalışma tecrübesi olanlar işaretlenip Senior Software Engineer olarak kabul edilecek diğerleri ise Software Engineer olarak.
- Şirket ücretleri iş tecrübesiyle orantılı dağıtıyor
* 1 Yıl - 5000$
* 2 Yıl - 10000$
* 3 Yıl - 20000$
* 3 yıldan fazla - 50000$
Kriterlere uyan çalışanlar yeşil ile aydınlatılacak
Çıktı aşağıdaki gibi gözükecek:

Normalde kodu yazan kişi aşağıdaki şekilde bir kod oluşturmalı:
echo <<<ENDHTML
<div id="main">
<div class="row_head">
<div>Name</div>
<div>Marks</div>
<div>Experience</div>
<div>Position</div>
<div>Expected Salary</div>
</div>
ENDHTML;
foreach ($applicants as $applicant) {
echo '<div class="row">';
echo "<div>" . $applicant["name"] . "</div>";
echo '<div class="' . marksClass($applicant["marks"]) . '">' . $applicant["marks"] . "</div>";
echo "<div>" . $applicant["experience"] . "</div>";
echo "<div>" . positionLink($applicant["experience"]) . "</div>";
echo '<div class="' . salaryClass($applicant["experience"], $applicant["salary"]) . '">' . $applicant["salary"] . "</div>";
echo "</div>";
}
echo "</div>";
function marksClass($info) {
return ($info > 60) ? "pass" : "fail";
}
function positionLink($experience) {
return ($experience > 3)
? '<a href="#">Apply for Senior Software Engineer</a>'
: '<a href="#">Apply for Software Engineer</a>';
}
function salaryClass($experience, $salary) {
switch ($experience) {
case 1:
return ($salary < 5000) ? "accept" : "reject";
case 2:
return ($salary < 10000) ? "accept" : "reject";
case 3:
return ($salary < 20000) ? "accept" : "reject";
default:
return ($salary < 50000) ? "accept" : "reject";
}
}şimdi aynı işlemi phpQuery ile yapalım ve avantajlarını karşılaştıralımrequire("phpQuery/phpQuery.php");
$doc = phpQuery::newDocument('<div id="main"></div>');
phpQuery::selectDocument($doc);
$doc["#main"]->append('
<div id="main">
<div class="row_head">
<div>Name</div>
<div>Marks</div>
<div>Experience</div>
<div>Position</div>
<div>Expected Salary</div>
</div>');
foreach ($applicants as $key => $applicant) {
$doc["#main"]->append('<div class="row" id="app_' . $key . '"></div>');
foreach ($applicant as $field => $info) {
$doc["#main"]->find("#app_" . $key)->append('<div class="_' . $field . '">' . $info . "</div>");
if ($field == "experience") {
$doc["#main"]->find("#app_" . $key)->append('<div style="width:400px" class="_position">-</div>');
}
}
}
addMarksClass($doc);
addSalaryClass($doc);
addPositionLink($doc);
print $doc;
function addMarksClass(&$doc) {
$marks = pq("._marks");
foreach ($marks as $appMark) {
if (pq($appMark)->html() > 60) {
pq($appMark)->addClass("pass");
}
else {
pq($appMark)->addClass("fail");
}
}
}
function addSalaryClass(&$doc) {
$marks = pq("._salary");
foreach ($marks as $appMark) {
$experience = pq($appMark)->parent()->find("._experience" )->html();
$salary = pq($appMark)->html();
switch ($experience) {
case 1:
pq($appMark)->addClass(($salary < 5000) ? "accept" : "reject");
break;
case 2:
pq($appMark)->addClass(($salary < 10000) ? "accept" : "reject");
break;
case 3:
pq($appMark)->addClass(($salary < 20000) ? "accept" : "reject");
break;
default:
pq($appMark)->addClass(($salary < 50000) ? "accept" : "reject");
}
}
}
function addPositionLink(&$doc) {
$experience = pq("._experience");
foreach ($experiece as $appExp) {
if (pq($appExp)->html() > 3) {
pq($appExp)->parent()->find("._position")->html('<a href="#">Apply for Senior Software Engineer</a>');
}
else{
pq($appExp)->parent()->find("._position")->html('<a href="#">Apply for Software Engineer</a>');
}
}
}phpQuery jQuery bilginiz varsa size çok basit gelecek, Yukardaki kodların hepsi kendi kendini açıklıyor. Sadece pq() mevcut dökümanı işaret ediyor.Kodlar ne kadar birbirine benzerse benzesin, phpQuery ile oluşturulan kodlama daha kaliteli ve daha az kompleksli olduğu için uygunca geliştirilebilir.
Döküman aşağıdaki adresten alınıp türkçeleştirilmiştir.
http://phpmaster.com/server-side-htm...sing-phpquery/
