Bootstrap paginations butonlarını sayfalama sistemine uyarlama
Hazır bulduğum sayfalama sistemini bootstrap paginations butonları ile uyarlamaya çalıştım ancak her defasında bir butonu uyduramadım yardımcı olabilir misiniz?
<?php
try{
$db = new PDO("mysql:host=localhost;dbname=veri;charset=utf8", "root",""); //veri tabını baglantısı
}catch(PDOException $e){
echo $e->getMessage();
}
$Sayfa = @ceil($_GET['sayfa']); //5,2 girilirse eğer get o zaman onu tam sayı yapar yanı 5 yapıyoruz bu kod ile
if ($Sayfa < 1) { $Sayfa = 1;} //eğer get değeri yerine girilen sayi 1 den küçükse sayfa değerini 1 yapıyoruz yani 1. sayfaya atıyoruz
$Say = $db->query("select * from urun order by id DESC"); //makale sayısını çekiyoruz
$ToplamVeri = $Say->rowCount(); //makale sayısını saydırıyoruz
$Limit = 3; //bir sayfada kaç içerik çıkacağını belirtiyoruz.
$Sayfa_Sayisi = ceil($ToplamVeri/$Limit); //toplam veri ile limiti bölerek her toplam sayfa sayısını buluyoruz
if($Sayfa > $Sayfa_Sayisi){$Sayfa = $Sayfa_Sayisi;} //eğer yazılan sayı büyükse eğer toplam sayfa sayısından en son sayfaya atıyoruz kullanıcıyı
$Goster = $Sayfa * $Limit - $Limit; // sayfa= 2 olsun limit=3 olsun 2*3=6 6-3=3 buranın değeri 2. sayfada 3'dür 3-4-5-6... sayfalarda da aynı işlem yapılıp değer bulunur
$GorunenSayfa = 5; //altta kaç tane sayfa sayısı görüneceğini belirtiyoruz.
$Makale = $db->query("select * from urun order by id DESC limit $Goster,$Limit"); //yukarda göstere attıgımız değer diyelim ki 3 o zaman 3.'id den başlayarak limit kadar veri ceker.
$MakaleAl = $Makale->fetchAll(PDO::FETCH_ASSOC);
?>
<div id="Makale">
<?php foreach($MakaleAl as $MakaleCek){?>
<div class="first">
<div class="card" style="width: 18rem;">
<img src="./cardimgs/card.jpg" width="50px" height="150px" class="card-img-top" alt="...">
<div class="card-body">
<h5 class="card-title"><?=$MakaleCek["urun_isim"]?></h5>
<p class="card-text"><?=$MakaleCek["urun_aciklama"]?></p>
<a href="#" class="btn btn-primary">İncele</a>
</div>
</div>
</div>
<?php } ?>
<?php if($Sayfa > 1){?>
<span class="say_sabit"><a href="index.php?sayfa=1">İlk</a></span> <!--1. Sayfaya gider-->
<div class="say_sabit"><a href="index.php?sayfa=<?=$Sayfa - 1?>">Geri</a></div> <!--Bir Önceki Sayfaya Gitmek İçin Sayfa Değerini 1 eksiltiyoruz-->
<?php } ?>
<?php
for($i = $Sayfa - $GorunenSayfa; $i < $Sayfa + $GorunenSayfa +1; $i++){ // i kaç ise o sayıdan başlar 1-2-3-4-5 yazmaya. mesela sayfa 7deyiz 7 - 5 = 2'dir 2 sayfadan sonra sayfalamaya başlar yani 2-3-4-5-6-7 gibi bu aynı mantıkla devam eder.
if($i > 0 and $i <= $Sayfa_Sayisi){
if($i == $Sayfa){
echo '<span class="say_aktif">'.$i.'</span>'; //eğer i ile sayfa değerleri aynıysa o zaman onu aktif css'si ekle
}else{
echo '<a class="say_a" href="index.php?sayfa='.$i.'">'.$i.'</a>'; //eğer aynı değilse normal listele
}
}
}
?>
<?php if($Sayfa != $Sayfa_Sayisi){?>
<div class="say_sabit"><a href="index.php?sayfa=<?=$Sayfa + 1?>">İleri</a></div><!--Bir Sonra ki Sayfaya Gitmek için sayfa değerini 1 artırıyoruz.-->
<div class="say_sabit"><a href="index.php?sayfa=<?=$Sayfa_Sayisi?>">Son</a></div><!--Buldugumuz Toplam Sayfa Sayısını buraya cekiyoruz tıklandıgında en son sayfaya gider-->
<?php } ?>
<nav aria-label="Page navigation example">
<ul class="pagination">
<li class="page-item"><a class="page-link" href="#">Previous</a></li>
<li class="page-item"><a class="page-link" href="#">1</a></li>
<li class="page-item"><a class="page-link" href="#">2</a></li>
<li class="page-item"><a class="page-link" href="#">3</a></li>
<li class="page-item"><a class="page-link" href="#">Next</a></li>
</ul>
</nav>
Yardımcı olan arkadaşlara şimdiden çok teşekkürler.
Soru hatalı mı? 👎
Eğer sorunun kurallara aykırı olduğunu düşünüyorsanız lütfen bize bildirin!
Cevaplar (4)
1.Sorunun cevabı @merchizm 'in de dediği gibi
function pagination($current_page, $total_pages, $page_url){
// bla bla bla
}
kısmını function.php ye atman yeterli.
2.Sorunuda anladığım kadarıyla mysql'deki JOIN
fonksiyonuyla halledebilirsin.
https://www.db-fiddle.com/f/u7iaQy3VT7tFjtFMEi4uRg/0
https://www.w3schools.com/sql/sql_join_inner.asp
https://www.w3schools.com/sql/sql_join_left.asp
@rephp7 birinci soruyu arkadaş yerine cevaplayım. fonksiyonu fonksiyonlar dosyana atabilirsin. fonksiyon dışındaki kodlar fonksiyonu nasıl kullanacağını gösteren bir kod. Tabi istersen sen bunları amacına göre birleştirip de bir fonksiyon oluşturabilirsin.
ikinci sorunuza dair ne yazık ki hiç bir şey anlamadım. farklı bir durumda fonksiyonu kullanmak istiyorsanız, sonuçta kodu okuyup dilediğiniz kısmı değiştirebilirsiniz.
@makifgokce, hocam fonksiyonunuz çalışıyor. Kullanmaya başladım bende. Bir şey de ben sormak istiyorum:
- Bu fonksiyonu başka sayfalarda kullanmak için hangi kısmını fonksiyon.php ye atmam lazım?
2.
$x = $db->prepare("select id from urun order by id DESC");
tablo adının bulunduğu sayfadaki verileri çağırdığım fonksiyonumdaki tablo adına (urunler, uyeler vs) göre otomatik almasını nasıl sağlarız? mümkün mü?
Özetle bu fonksiyonu farklı sayfalarda nasıl pratik olarak kullanabiliriz?
Teşekkürler, emeğinize sağlık.
function pagination($current_page, $total_pages, $page_url)
{
$pagination = '';
if($total_pages > 0 && $total_pages != 1 && $current_page <= $total_pages){
$pagination .= '<ul class="pagination">';
$right_links = $current_page + 3;
$previous = $current_page - 1;
$next = $current_page + 1;
$first_link = true;
if($current_page > 1){
$previous_link = ($previous==0)?1:$previous;
$pagination .= '<li class="page-item"><a class="page-link" href="'.$page_url.'?sayfa=1">İlk</a></li>';
$pagination .= '<li><a class="page-link" href="'.$page_url.'?sayfa='.$previous_link.'">Önceki</a></li>';
for($i = ($current_page-2); $i < $current_page; $i++){
if($i > 0){
$pagination .= '<li><a class="page-link" href="'.$page_url.'?sayfa='.$i.'">'.$i.'</a></li>';
}
}
$first_link = false;
}
if($first_link){
$pagination .= '<li class="page-item disabled"><a class="page-link">'.$current_page.'</a></li>';
}elseif($current_page == $total_pages){
$pagination .= '<li class="page-item disabled"><a class="page-link">'.$current_page.'</a></li>';
}else{ //regular current link
$pagination .= '<li class="page-item disabled"><a class="page-link">'.$current_page.'</a></li>';
}
for($i = $current_page+1; $i < $right_links ; $i++){
if($i<=$total_pages){
$pagination .= '<li class="page-item"><a class="page-link" href="'.$page_url.'?sayfa='.$i.'">'.$i.'</a></li>';
}
}
if($current_page < $total_pages){
$next_link = ($next > $total_pages)? $total_pages : $next;
$pagination .= '<li class="page-item"><a class="page-link" href="'.$page_url.'?sayfa='.$next_link.'">İleri</a></li>';
$pagination .= '<li class="page-item"><a class="page-link" href="'.$page_url.'?sayfa='.$total_pages.'">Son</a></li>';
}
$pagination .= '</ul>';
}
return $pagination;
}
$x = $db->prepare("select id from urun order by id DESC");
$x->execute();
$z = $x->fetchAll(PDO::FETCH_ASSOC);
$pageLength = 10;
$page = isset($_GET['sayfa']) ? $_GET['sayfa'] : 1;
$pages = ceil(count($z)/$pageLength);
if($page < 1) {
$page = 1;
}
if($page > $pages){
$page = $pages;
}
$start = ($page - 1) * $pageLength;
$dt = $db->prepare("select * from urun order by id DESC limit $start, $pageLength");
$dt->execute();
$data = $dt->fetchAll(PDO::FETCH_ASSOC);
foreach($data AS $item)
{
//verileri yazdır
}
echo pagination($page, $pages, "http://localhost/index.php");