Türkiye'nin En Eski Webmaster Forumu İyinet'e Hoşgeldiniz!

Sayfalamada Sorun..

wWhat

0
Onaylı Üye
Üye
Katılım
4 Ekim 2008
Mesajlar
30
Açılan Konu
7
Tepki puanı
0
Bir sürü konu okudum şu 2 gün içinde girip çıkmadığım site/konu kalmadı ama işte bir türlü beceremedim aslında db'den alıp sayfalamayı başardım ama şu koda entegre edemedim bir türlü :( Yardımcı olabilirsiniz cidden çok sevinirim.

PHP:
<?php
$Category = $_GET['Category'];

$image_path ="../..";
include_once("skin.php");
echo $header;
echo "<h2>$Category wallpapers</h2>";

if ($image_path == "")
{
	$image_path=$_SERVER['REQUEST_URI'];
}

if (substr($image_path,strlen($image_path)-1,1) != "/")
	$image_path=$image_path."/";

//Category wallpapers.
#get the category ID
$cCategory = str_replace("+", " ", $Category);
$cQuery = "SELECT * FROM `Categories` WHERE `name`='$cCategory' LIMIT 1";
$cResult = mysql_query($cQuery) or die(mysql_error());
if (mysql_num_rows($cResult) <= 0)
{
	echo "There are currently no wallpapers in this category.";
} else
{
	$Row = mysql_fetch_object($cResult);
	$id = $Row->id;

	$result = mysql_query("SELECT * FROM `Wallpapers` WHERE `Category` = '".$id."' OR `Category` IN (SELECT `id` FROM `Categories` WHERE `Parent` = '".$id."') AND `approved` = '0' ORDER BY `ID` DESC");
	$x = 0;
	if (mysql_num_rows($result) <= 0)
	{
		echo "There are currently no wallpapers in this category.";
	} else
	{
		while ($row = mysql_fetch_assoc($result)) {
			$x += 1;
			echo "\n".'<div class="Box Left">'."\n\t";
				echo '<div style="font-size: 1em; margin-bottom: 5px;"><a href="'.$image_path.'wallpaper/'.str_replace(" ", "-", $row['Title']).'/">'.$row['Title']."</a></div>";
				echo '<a href="'.$image_path.'wallpaper/'.str_replace(" ", "-", $row['Title']).'/"><img class="Thumbnail" src="image_resize.php?i=images/wallpapers/'.$row['Wallpaper1'].'&w=160&h=160" alt="'.$row['Name'].'" /></a>';
				echo '<div class="Clear"></div>'."\n";
			echo '</div>';
			if (!is_int($x/3)){
				echo '<div class="Spacer"> </div>';
			}
		}
	}
}
echo '<div class="Clear"></div>';

echo $footer;
?>
 

Angelo

0
Onaylı Üye
Üye
Katılım
13 Aralık 2004
Mesajlar
9,603
Açılan Konu
164
Tepki puanı
106
Konum
AZ
Sayfalama kodu gerek php olarak gerekse mantıksal algoritma olarak bir çok defalar forumda verildi.

Database yapısını, neyi sayfalamaya çalıştığını ve bu sayfanın adını postalar mısın? Şu anda sayfalama adına birşey yok scriptte.
 

wWhat

0
Onaylı Üye
Üye
Katılım
4 Ekim 2008
Mesajlar
30
Açılan Konu
7
Tepki puanı
0
Dediğin gibi forumda bir çok defa verildi araştırdım ama kod bilgim iyi olmadığından bu sayfalama koduna entegreyi başaramadım, o yüzden de yukarda verdiğim kodda sayfalama adına bir şey yok..
DB yapısı şöyle;
db'de Categories ve Wallpapers tabloları var. Her Wallpaper bir kategoriye sahip kodda get ile kategori adını çağırıyor ve Wallpaper tablosunun içinden Category sutunundan id sini alıp fotografları komple sergiliyor. Yani yukardaki kod o işe yarıyor :)
 

webyazilim

0
Onaylı Üye
Üye
Katılım
12 Haziran 2006
Mesajlar
1,511
Açılan Konu
116
Tepki puanı
0
Konum
Kayseri
$result değişkenin gönderdiği sorguyu sayfalama yaptırmak için kullanabilirsiniz.

yaklaşık bir örnek yazayım deneyin isterseniz.

PHP:
<?

// Daha sonra GET ile gönderilecek satir değeri yoksa sıfır kabul edilir
if (!$satir) $satir=0;
// belirlenen satır değerinden sonra istenen kadar 10 kayıt listelenir
$result=mysql_query("SELECT * FROM tabloadi WHERE kategori='A' and id order by id desc limit $satir,10");

while ($row=mysql_fetch_assoc($result))
{
// ekrana kayıtlar istediği şekilde basılır     
echo "$row[id] - $row[baslik] - $row[yazi]";
}

// toplam satır sayısı alınır
$toplam=mysql_query("SELECT count(id) FROM tabloadi WHERE kategori='A'");

//Döngü içinde $i değişkeni toplamda o kategorideki satır sayısı ile karşılaştırılarak sayfalar yazılır
$i=0;
while ($i<$toplam[0])
{
    // ekrana $i link olarak satir değerleri 10 ile çarpılıp yazılır
    echo "<a href=sayfaadi.php?satir=$i >$i</a>";
    // Sonraki 10 sayfa için $i arttırılır
    $i=$i+10;
}

?>

Bu kod çok sağlıklı çalışmayabilir ama sayfalama için basitçe bir örnek. Buradaki mantık istenen aralıkta veri çekerek tüm verileri çekip aralarından seçmek zorunda kalmadan az veriyle sayfalamayı yapmak. Bazı durumlarda daha fazla veri çekmek gerektiğinden dizilere vs başvurulur ama sizin işinizi temelde yapacak sanıyorum.

Geriye anlayıp uygulamak kalıyor size...
Kolay gelsin...
 

wWhat

0
Onaylı Üye
Üye
Katılım
4 Ekim 2008
Mesajlar
30
Açılan Konu
7
Tepki puanı
0
kategori='A' tam olarak neyi temsil ediyor ordaki A ne anlayamadım. Birde verdiğin kodu ilk mesajda verdiğim kodun neresine yerleştirmem gerekiyor çözemedim, entegre kısmında sorunla yaşıyorum :(
 

wWhat

0
Onaylı Üye
Üye
Katılım
4 Ekim 2008
Mesajlar
30
Açılan Konu
7
Tepki puanı
0
PHP:
// Daha sonra GET ile gönderilecek satir değeri yoksa sıfır kabul edilir
if (!$satir) $satir=0;
// belirlenen satır değerinden sonra istenen kadar 10 kayıt listelenir
$result=mysql_query("SELECT * FROM `Wallpapers` WHERE `Category` = '".$id."' OR `Category` IN (SELECT `id` FROM `Categories` WHERE `Parent` = '".$id."') AND `approved` = '0' and id order by id desc limit $satir,10");

while ($row=mysql_fetch_assoc($result))
{
// ekrana kayıtlar istediği şekilde basılır     
echo "".$row['Wallpaper1']." - ".$row['Title']." <br><br>";
}

// toplam satır sayısı alınır
$toplam=mysql_query("SELECT count(id) FROM `Wallpapers` WHERE `Category` = '".$id."' OR `Category` IN (SELECT `id` FROM `Categories` WHERE `Parent` = '".$id."') AND `approved` = '0'");

//Döngü içinde $i değişkeni toplamda o kategorideki satır sayısı ile karşılaştırılarak sayfalar yazılır
$i=0;
while ($i<$toplam[0])
{
    // ekrana $i link olarak satir değerleri 10 ile çarpılıp yazılır
    echo "<a href=sayfaadi.php?satir=$i >$i</a>";
    // Sonraki 10 sayfa için $i arttırılır
    $i=$i+10;
}
şekline cevirdim ama sadece ilk 10'nunu listeledi sayfa numarası çıkmadı aşağıda :(
 

webyazilim

0
Onaylı Üye
Üye
Katılım
12 Haziran 2006
Mesajlar
1,511
Açılan Konu
116
Tepki puanı
0
Konum
Kayseri
- kategori A derken herhangi bir kategorideki eşitlikten veri çekiyorsan diye herhangi bir şart ekledim sorgu için o kadar

- altta sayfa numarası ancak 10 dan fazla kayıt varsa zaten mümkün olacak sanıyorum. $toplam[0] toplam kayıt sayın. Onu ekrana yazdır, eğer birşey yazmıyorsa zaten hiçbir sıralama şartı olmadan veri gelmiyor yani sorgun boş dönüyor demek olur.

Gördüğüm kadarıyla tablolardan bu şekilde bir mantıkta veri çekmekte aslında kullandığın script ya da düşündüğün algoritmanın bence pek mantıklı durmadığını gösteriyor. Sorgunuzu her yazışta ne kadar sade yazabiliyorsanız o kadar sade yazın. Sorguda işler karıştığından script genel olarak yanlış planlanmış ve eklentiler değişklikler sıkışmaya başlamış demek. tabi benim tecrübelerime göre.
 

werci

0
Onaylı Üye
Üye
Katılım
9 Nisan 2005
Mesajlar
212
Açılan Konu
74
Tepki puanı
0
valla uğraştım ama zor geldi :(
 

wWhat

0
Onaylı Üye
Üye
Katılım
4 Ekim 2008
Mesajlar
30
Açılan Konu
7
Tepki puanı
0
Bir şekilde entegreyi gerçekleştirdim uzun uğraşlar sonucu :)
PHP:
$page=$_GET['page'];
$limit=$Settings['Cat_Navigation_Count'];
if ($page==lisanssız) {
	$page=1;
}
$max_show=5;

$limitvalue = $page * $limit - ($limit);

$cCategory = str_replace("+", " ", $Category);
$cQuery = "SELECT * FROM `Categories` WHERE `name`='$cCategory' LIMIT 1";
$cResult = mysql_query($cQuery) or die(mysql_error());

if (mysql_num_rows($cResult) <= 0)
{
	$display_pagination=0;
} else
{
	$query_count    = "SELECT * FROM `Wallpapers` WHERE (`Category` = (SELECT `id` FROM `Categories` WHERE `name`='$cCategory') OR `Category` IN (SELECT `id` FROM `Categories` WHERE `Parent` = (SELECT `id` FROM `Categories` WHERE `name`='$cCategory'))) AND `approved` = '0' ORDER BY `ID` DESC";
	$result_count   = mysql_query($query_count);    
	$totalrows      = mysql_num_rows($result_count);
	if ($totalrows==0) { $display_pagination = 0; } else { $display_pagination = 1; }
}

$numofpages = ceil($totalrows / $limit); 

if ($numofpages==1) { $display_pagination=0; }

if ($page > 3) {
	$start=$page-2;
	$end=$page+2;
	if ($page==$numofpages) {
		$end=$page;
		$start=$start-2;
	} elseif ($page+1==$numofpages) {
		$end=$page+1;
		$start=$start-1;
	}
} else {
	$start=1;
	$end=5;
}

if ($page>=4) {
	$apagenav='<span class="navigation"><a href="'.$page_isset.'1/">«</a></span> ';
} else {
	$apagenav='<span class="navigation">«</span> ';
}

if ($page < $numofpages) {
	$aend=' <span class="navigation"><a href="'.$page_isset.$numofpages.'/">»</a></span>';
} else {
	$aend=' <span class="navigation">»</span>';
}


    for($i = $start; $i <= $end; $i++){
        if($i == $page){
            $apagenav .= '<span class="anavigation">'.$i."</span> ";
        }else{
            $apagenav .= '<span class="navigation"><a href="'.$page_isset.''.$i.'/">'.$i.'</a></span> ';
        }
    }
	$apagenav.=$aend;

	if ($display_pagination==0) {
		$apagenav=lisanssız;
	}

sayfalamayı yapıyor gayet güzel ama mesela toplam 2 sayfalık konu var ama genede 5 sayfa olarak gösteriyor :( O konuda yardımcı olabilirseniz sevinirim :)
 

webyazilim

0
Onaylı Üye
Üye
Katılım
12 Haziran 2006
Mesajlar
1,511
Açılan Konu
116
Tepki puanı
0
Konum
Kayseri
for içinde sayfa sayısını geçip geçmediğini kontrol et. eğer geçtiyse break; yazıp döngüden çıkarak daha fazla gereksiz sayfa numarası yazmamasını sağlarsın.
 

wWhat

0
Onaylı Üye
Üye
Katılım
4 Ekim 2008
Mesajlar
30
Açılan Konu
7
Tepki puanı
0
Bu konuda cidden hiç iyi değilim :( zamanını almayacaksa yazabilirsen sevinirim...
 
Üst