lostyazilim
tr.link

php dizilerde sayfalama

40 Mesajlar 5.864 Okunma
acebozum
tr.link

melihonline melihonline WM Aracı Kullanıcı
  • Üyelik 24.11.2018
  • Yaş/Cinsiyet 39 / E
  • Meslek Bilgisayar Teknikeri
  • Konum Antalya
  • Ad Soyad M** K**
  • Mesajlar 91
  • Beğeniler 8 / 7
  • Ticaret 0, (%0)
Kusura bakmayın ben orayı atlamışım. Mesajları yazdığımız zaman iş yerinden yazıyordum. Kod içeriği de yanımda yoktu. Evde localhostta çalışma imkanım olduğu için daha bugün bakabildim. İşyerinde php çalıştıramıyorum çünkü. xampp kuramıyorum. Bugün de fırsat olunca direk hazır kodları alıp denemelere geçeyim demiştim. Kodlarım bir önceki mesajdaki gibi hep. Yine isterseniz paylaşabilirim hocam. @BEYAZMASTER

BEYAZMASTER adlı üyeden alıntı

Siz benim yukarıdaki soruma ve ricama karşılık vermediniz!
Lakin "gene de destek ol" diyen iç sesime kulak vereceğim bu seferlik!

Datatable içindeki verileri otomatik sıralayan, sayfalayan, arama yapmayı sağlayan gelişmiş bir tablo çeşididir.
(html+js)

Daha kolay olacağı kesin.

Alltaki 2 linki inceleyebilirsiniz.
https://www.yazilimbilisim.net/javascript/jquery-datatable-kullanimi/
+
https://datatables.net/download/



Json dosyasından verileri o tabloya nasıl aktaracağınız konusuna @ÖmerGünay üstadımız daha vakıf, mesajınızı görünce yol gösterecektir...
BEYAZMASTER

kişi bu mesajı beğendi.

wmaraci
reklam

AhmetKarabulut AhmetKarabulut WM Aracı Kullanıcı
  • Üyelik 11.09.2013
  • Yaş/Cinsiyet 30 / E
  • Meslek Bilgisayar Mühendisi
  • Konum İzmir
  • Ad Soyad A** K**
  • Mesajlar 1077
  • Beğeniler 361 / 361
  • Ticaret 33, (%100)
Hocam sabah mesai olduğundan ve uyku öncesi gördüğümden mesajınızı kod örneği paylaşamayacğaım fakat pseudo bir örnek ile açıklayalım;

Umarım açıklayıcı olmuştur :)

int listelenecekAdet= 10; // Örnek 10 verdik dilerseniz bazı sitelerdeki gibi bu bilgiyi dropdowndan doldurarak 10, 20, 50 gibi çoklu kayıtları listeleme seçeneğini kullanıcıya sunabilirsiniz
int kayitSayisi = [dbdeki kayıt adedini çekiyoruz(SELECT Count(id) FROM tablom WHERE aktif_mi=1)]; //aktif filtresi sadece örnek olması açısından

if (isset($_GET['page']))
$MEV_SAYFA=($_GET['page']);
else
$MEV_SAYFA=1;
$limitBaslangic=abs(($MEV_SAYFA-1)*$listelenecekKayitAdedi ); //dbdeki kaçıncı kayıttan başlayacağımız

var sayfadaGosterilecekKayitlar = [dbde gosterilecek kayıtları çekiyoruz(SELECT kolon1, kolont2... FROM tablom ORDER BY kayitYaratmaTarihi DESC LIMIT $limitBaslangic, $listelenecekAdet //dbdeki başlangıç kayıdından sayfada listelenecek adet kadar kayit gostermeyi sağlar

while ($row=mysql_fetch_array($sayfadaGosterilecekKayitlar ))
$gelenVeriler[++$limitBaslangic]=$satir;

//hiç query string olmadan sayfa url'ini alalım
$uri=strtok($_SERVER['REQUEST_URI'],"?")."?";

//sayfadaki page query string olmadan diğer query stringlerin bulunduğu şekilde urlmizi oluşturalım
if (isset($_GET['page']))
unset($_GET['page']);
if (count($_GET)) {
foreach ($_GET as $k => $v) {
if ($k != "page")
$uri.=urlencode($k)."=".urlencode($v)."&";
}
}


//toplam kaç sayfa olacağını hesaplayıp bir arrayi page querystringli linklerimiz ile dolduralım
$sayfaAdedi=ceil($kayitSayisi /$listelenecekAdet);
for($i=1;$i<=$sayfaAdedi;$i++)
$Sayfalar[$i]=$uri.'page='.$i;

//aşağıdaki gibi basit bir şablon ile verilerimizi ve sayfa numaralarını ekrana basabilriz
?>
Toplam kayıt sayısı:


$satir): ?>
.





Sayfalar:
$link): ?>






melihonline

kişi bu mesajı beğendi.

melihonline melihonline WM Aracı Kullanıcı
  • Üyelik 24.11.2018
  • Yaş/Cinsiyet 39 / E
  • Meslek Bilgisayar Teknikeri
  • Konum Antalya
  • Ad Soyad M** K**
  • Mesajlar 91
  • Beğeniler 8 / 7
  • Ticaret 0, (%0)
AhmetKarabulut hocam veritabanı olmadan sayfalama yapmak istiyoruz. Veriler json olarak dizi halinde geliyor.

AhmetKarabulut adlı üyeden alıntı

Hocam sabah mesai olduğundan ve uyku öncesi gördüğümden mesajınızı kod örneği paylaşamayacğaım fakat pseudo bir örnek ile açıklayalım;

Umarım açıklayıcı olmuştur :)

int listelenecekAdet= 10; // Örnek 10 verdik dilerseniz bazı sitelerdeki gibi bu bilgiyi dropdowndan doldurarak 10, 20, 50 gibi çoklu kayıtları listeleme seçeneğini kullanıcıya sunabilirsiniz
int kayitSayisi = [dbdeki kayıt adedini çekiyoruz(SELECT Count(id) FROM tablom WHERE aktif_mi=1)]; //aktif filtresi sadece örnek olması açısından

if (isset($_GET['page']))
$MEV_SAYFA=($_GET['page']);
else
$MEV_SAYFA=1;
$limitBaslangic=abs(($MEV_SAYFA-1)*$listelenecekKayitAdedi ); //dbdeki kaçıncı kayıttan başlayacağımız

var sayfadaGosterilecekKayitlar = [dbde gosterilecek kayıtları çekiyoruz(SELECT kolon1, kolont2... FROM tablom ORDER BY kayitYaratmaTarihi DESC LIMIT $limitBaslangic, $listelenecekAdet //dbdeki başlangıç kayıdından sayfada listelenecek adet kadar kayit gostermeyi sağlar

while ($row=mysql_fetch_array($sayfadaGosterilecekKayitlar ))
$gelenVeriler[++$limitBaslangic]=$satir;

//hiç query string olmadan sayfa url'ini alalım
$uri=strtok($_SERVER['REQUEST_URI'],"?")."?";

//sayfadaki page query string olmadan diğer query stringlerin bulunduğu şekilde urlmizi oluşturalım
if (isset($_GET['page']))
unset($_GET['page']);
if (count($_GET)) {
foreach ($_GET as $k => $v) {
if ($k != "page")
$uri.=urlencode($k)."=".urlencode($v)."&";
}
}


//toplam kaç sayfa olacağını hesaplayıp bir arrayi page querystringli linklerimiz ile dolduralım
$sayfaAdedi=ceil($kayitSayisi /$listelenecekAdet);
for($i=1;$i<=$sayfaAdedi;$i++)
$Sayfalar[$i]=$uri.'page='.$i;

//aşağıdaki gibi basit bir şablon ile verilerimizi ve sayfa numaralarını ekrana basabilriz
?>
Toplam kayıt sayısı:


$satir): ?>
.





Sayfalar:
$link): ?>






 

 

AhmetKarabulut AhmetKarabulut WM Aracı Kullanıcı
  • Üyelik 11.09.2013
  • Yaş/Cinsiyet 30 / E
  • Meslek Bilgisayar Mühendisi
  • Konum İzmir
  • Ad Soyad A** K**
  • Mesajlar 1077
  • Beğeniler 361 / 361
  • Ticaret 33, (%100)
Aslında arada çok da fark yok, veritabanından çekmek yerine jsondaki verilerin countı ve buna göre ilgili aralıkta çekimi olacak :)
 

 

wmaraci
wmaraci

OmerGunay OmerGunay https://omergunay.net Kullanıcı
  • Üyelik 15.05.2015
  • Yaş/Cinsiyet 33 / E
  • Meslek PHP Developer
  • Konum İstanbul Avrupa
  • Ad Soyad Ö** G**
  • Mesajlar 1207
  • Beğeniler 382 / 381
  • Ticaret 16, (%100)
melihonline

1-) head alanına şu kodu ekle.


2-) body en sonuna şu kodları ekle.
<script></script>
<script></script>
<script>
$(function(){
$("#liste").DataTable();
});
</script>




3-) yaptığın tablonun id sini liste yap. Ya da tablo id ne göre 2.ci söylediğim koddaki yere id ni yaz.

4-) jsonu foreach ile alıp table içinde tr lerin içine json değerlerini yaz. Tmmdır bu kadar. Otomatik sayfalama , veriler içinde arama yapma vs gibi şeyler gelmiş olacaktır.
 

 

Herkes yediğinden ikram eder..(Yavuz Sultan Selim)

melihonline melihonline WM Aracı Kullanıcı
  • Üyelik 24.11.2018
  • Yaş/Cinsiyet 39 / E
  • Meslek Bilgisayar Teknikeri
  • Konum Antalya
  • Ad Soyad M** K**
  • Mesajlar 91
  • Beğeniler 8 / 7
  • Ticaret 0, (%0)
Çok teşekkürler hocam. Zor da olsa karıştıra karıştıra yapabildim datatable ile sayfalamayı. Mantığını anlamak uzun sürdü tabi :)

Tablonun çalışması için thead ve tbody taglarını kullanmak zorunluymuş. Bu siteyi inceleyince çözdüm.

taglarını da forech döngüsü içinde kullanmak gerekiyormuş. 10 arlı olarak sayfalama yapıyor default olarak. Bu datatable kısmını kullanacağım sitemde.

Ancak resimleri listeleme yaptırdığım sayfada tablolama işi uymuyor bana. Alt alta listeleme yapılıyor çünkü. Ben resimleri 1 satırda 5 tane olacak şekilde listeleme yaptıracağım. O yüzden normal sayfalama yapmayı da öğrenmem lazım.

ÖmerGünay adlı üyeden alıntı

melihonline

1-) head alanına şu kodu ekle.


2-) body en sonuna şu kodları ekle.
<script></script>
<script></script>
<script>
$(function(){
$("#liste").DataTable();
});
</script>




3-) yaptığın tablonun id sini liste yap. Ya da tablo id ne göre 2.ci söylediğim koddaki yere id ni yaz.

4-) jsonu foreach ile alıp table içinde tr lerin içine json değerlerini yaz. Tmmdır bu kadar. Otomatik sayfalama , veriler içinde arama yapma vs gibi şeyler gelmiş olacaktır.
 

 

melihonline melihonline WM Aracı Kullanıcı
  • Üyelik 24.11.2018
  • Yaş/Cinsiyet 39 / E
  • Meslek Bilgisayar Teknikeri
  • Konum Antalya
  • Ad Soyad M** K**
  • Mesajlar 91
  • Beğeniler 8 / 7
  • Ticaret 0, (%0)
Hocam o yaptığınız kodlamayı bu diziye göre uyarlayamaz mıyız?

"sayfaİcerik" => "1. Sayfanın içeriği"

Mesela buradaki "1. Sayfanın içeriği" bölümünde echo içine yazılan kodlar çalışıyor. Ancak bi döngü koymak istediğimde hata veriyor.

$dizi değişkeni içinde aşadağıdaki kodlar var.

"sayfaİcerik" => "1.Kişi Adı:" . $dizi[0]["adi"] . "2.Kişi Adı:" . $dizi[1]["adi"]

Bu şekil kod yazdığımda ekrana Melih Kaya getiriyor. Ancak tüm isimleri alması için While döngüsü koyamıyorum oraya.



[0] => Array
(
[adi] => Melih
[resmi] => /dsfdsdsgdsg.jpg
[ilgialanlari] => Array
(
[0] => futbol
[1] => basketbol
)

[id] => 240
[dili] => en
[lakabi] => Çapkın
[meslegi] => Tekniker
)

[1] => Array
(
[adi] => Kaya
[resmi] => /trwywyewy.jpg
[ilgialanlari] => Array
(
[0] => tenis
[1] => oyun
)

[id] => 240
[dili] => es
[lakabi] => Zehir
[meslegi] => Öğretmen
)


ikodev adlı üyeden alıntı

Ya muhtemelen daha kolay yolu vardır ama ofisteyim şimdi kafa yanıyor çıtırından :)

Ben sayfalama ve listeleme yaptım senin için;

$diziler = array(
"sayfa1" => array(
"sayfaAdi" => "Sayfa 1",
"sayfaİcerik" => "1. Sayfanın içeriği"
),
"sayfa2" => array(
"sayfaAdi" => "Sayfa 2",
"sayfaİcerik" => "2. Sayfanın içeriği"
),
"sayfa3" => array(
"sayfaAdi" => "Sayfa 3",
"sayfaİcerik" => "3. Sayfanın içeriği"
),
"sayfa4" => array(
"sayfaAdi" => "Sayfa 4",
"sayfaİcerik" => "4. Sayfanın içeriği"
),
"sayfa5" => array(
"sayfaAdi" => "Sayfa 5",
"sayfaİcerik" => "5. Sayfanın içeriği"
)
);

$mevcutSayfa = (isset($_GET["sayfa"])) ? $_GET["sayfa"] : 0;
$gosterilecekToplamVeri = 2;
$toplamSayfa = ceil(count($diziler) / $gosterilecekToplamVeri);
for( $i = 1; $i <= $toplamSayfa; $i++ )
{
?>

}

echo "
";
$sira = ($mevcutSayfa-1) * $gosterilecekToplamVeri;
$siradaki2li = $sira+$gosterilecekToplamVeri;
for( $veri = $sira; $veri < $siradaki2li; $veri++ )
{
echo @$diziler["sayfa".($veri+1)]["sayfaAdi"];
echo "
";
}
?>


Burada mesela varolan bir diziye sıralama yaptık, sen her foreachda onun idsini "tagını alarak" farklı sayfa da ilk verdiğim örnekte ki gibi içeriğinede ulaşabilirsin
 

 

ikodev ikodev Developer Kullanıcı
  • Üyelik 08.05.2015
  • Yaş/Cinsiyet 28 / E
  • Meslek Developer
  • Konum Samsun
  • Ad Soyad İ** Ş**
  • Mesajlar 1020
  • Beğeniler 321 / 320
  • Ticaret 19, (%100)
melihonline PM den ulaşın bana hocam Anydesk ile bakalım uyarlanır yani niye uyarlanmasın :)
 

 

melihonline melihonline WM Aracı Kullanıcı
  • Üyelik 24.11.2018
  • Yaş/Cinsiyet 39 / E
  • Meslek Bilgisayar Teknikeri
  • Konum Antalya
  • Ad Soyad M** K**
  • Mesajlar 91
  • Beğeniler 8 / 7
  • Ticaret 0, (%0)
Hocam oraya echo harici kod giremediğim için 100 adet veriyi almak için 1000 satıra yakın kodu yazmak zorunda kaldım. Tek tek çekiyorum :)

while döngüsü girebilsem 5-10 satırda bitecek.

ikodev adlı üyeden alıntı

melihonline PM den ulaşın bana hocam Anydesk ile bakalım uyarlanır yani niye uyarlanmasın :)
 

 

sufyani sufyani WM Aracı Kullanıcı
  • Üyelik 23.11.2017
  • Yaş/Cinsiyet 54 / E
  • Meslek Grafik Tasarımcı / Coder
  • Konum İstanbul Anadolu
  • Ad Soyad S** B**
  • Mesajlar 101
  • Beğeniler 7 / 6
  • Ticaret 0, (%0)
<script></script>
<script></script>



























xxxx yyyy zzz
Düzenle
Sil
xxxx yyyy zzz
Düzenle
Sil

// sorgu ve döngü bloğu
/**bir sayfada kaç kayıt gösterilecek*/
$sayfada =5;
/**kategorideki toplam ürün sayısını alıp kaç sayfa olacağını belirliyoruz.*/
$listeler = $db->prepare("SELECT * FROM xxxxxxx");
$listeler->execute(array("%".$get."%"));
$listeler = $listeler->fetchAll(PDO::FETCH_ASSOC);
$liste_adedi = count($listeler);
$toplam_sayfa_adedi = ceil($liste_adedi / $sayfada);

/**eğer sayfa yok ise sayfayı 1 olarak belirliyoruz.*/
$sayfa = isset($_GET['sayfa']) ? (int) $_GET['sayfa'] : 1;
if($sayfa < 1) $sayfa = 1;
if($sayfa > $toplam_sayfa_adedi) $sayfa = $toplam_sayfa_adedi;

/**dbden çekilecek kayıtlar için kaçıncı kayıttan başlanacak onu belirliyoruz ve kayıtlarımızı çekiyoruz.*/
$limit = ($sayfa - 1) * $sayfada;
$sayfa_listeler = $db->prepare("SELECT * FROM xxxxxxx limit $limit,$sayfada");
$sayfa_listeler->execute(array("%".$get."%"));
$listeler = $sayfa_listeler->fetchAll(PDO::FETCH_ASSOC);

foreach ($listeler as $key => $row) {
?>



if($sayfa > 1){
?>

}
for( $i=1; $i<=$toplam_sayfa_adedi; $i++) {
if($sayfa == $i) {
echo ''.$i.'';
} else {
echo ''.$i.'';
}
}
if($sayfa != $toplam_sayfa_adedi){
?>

}
?>


<script>
var $satir = $('.tableARA tbody tr');
$('#ara').keyup(function() {
var deger = $.trim($(this).val()).replace(/ +/g, ' ').toLowerCase();

$satir.show().filter(function() {
var yazi = $(this).text().replace(/\s+/g, ' ').toLowerCase();
return !~yazi.indexOf(deger);
}).hide();
});
</script>

veya hazır kütüphane,
https://datatables.net/
 

 

Site Ayarları
  • Tema Seçeneği
  • Site Sesleri
  • Bildirimler
  • Özel Mesaj Al