Php anasayfada son konular listeleme
php de olur ya arkadaşlar hani anasayfada kategorilerin sağında üstünde değil son paylaşılan konu olur kategoriye göre ondan yapmak istiyorum yardımcı olurmusunuz
Merhaba, sorunuzu net olarak anlayamadım ama genel mantığı anlamanız için aşağıda kod örnekleri mevcut. Veritabanını ve kodları paylaşman durumunda daha net cevaplar alabilirsin.
Örnek
Ana sayfa, sidebar kısmında kategorileri ve kategorilerin içerisindeki son 5 yazıyı oluşturulma tarihlerine göre listeleteceğiz.
Kategorilerimizin bulunduğu veritabanı (categories):
- category_id
- category_title => Kategori başlığı
- category_create => Kategori oluşturulma tarihi
Blog yazılarımızın bulunduğu veritabanı (blogs):
- blog_id
- blog_category => Blog yazısının bağlı olduğu kategori id
- blog_title => Blog başlığı
- blog_content => Blog yazısının içeriği
- blog_create => Blog oluşturulma tarihi
Kategorileri listeletme
Veritabanımızdan kategorileri, son eklenenler en yukarıda gözükecek şekilde tamamını çekiyoruz.
# $db değişkeninde veritabanı bağlantımız bulunuyor.
$query = $db->prepare("SELECT * FROM categories ORDER BY category_create DESC")->execute();
$categories = $query->fetchAll(PDO::FETCH_ASSOC);
"categories" tablomuzda eğer kategori mevcut ise mevcut olan kategorileri $categories değişkenine aldık.
Şimdi front-end tarafında önce if kontrolü daha sonrasında foreach döngüsü ile kategorilerimizi listeletiyoruz.
<?php if($categories): ?>
<ul>
<?php foreach($categories as $category): ?>
<li><?= $category['category_title'] ?></li>
<?php endforeach; ?>
</ul>
<?php else: ?>
<p>Henüz kategori oluşturulmamış.</p>
<?php endif;?>
Kategorileri ve Kategorilerin içerisinde bulunan yazıları listeletme
Şimdi ise hem kategorileri listeleteceğiz, hem de kategorilerin içerisinde bulunan blog yazılarını listeleteceğiz. Bunun için veritabanından öncelikle categories tablomuzdan kategorileri çekmemiz daha sonrasında kategoriye ait olan blog yazılarını çekmemiz gerekiyor.
# Kodların front-end tarafında daha anlaşılır olması için
# çektiğimiz verileri $data değişkeninin içerisine koyacağız
$data = [];
# Kategorileri çekiyoruz
$categoryQuery = $db->prepare("SELECT * FROM categories ORDER BY category_create DESC")->execute();
$categories = $categoryQuery->fetchAll(PDO::FETCH_ASSOC);
foreach($categories as $category){
# Kategori başlığımızı $data değişkeninin içerisine ekliyoruz.
$data[$category['category_id']]['title'] = $category['category_title'];
# Kategoriye ait olan son 5 blog yazısını blog oluşturulma tarihine göre çekiyoruz.
$blogs = $db->prepate("SELECT * FROM blogs WHERE blog_category = :category_id ORDER BY blog_create DESC LIMIT 5");
$blogs->bindValue(':category_id', $category['category_id'], PDO::PARAM_STR)->execute();
$blogs = $blogs->fetchAll(PDO::FETCH_ASSOC);
if($blogs){
# Eğer blog yazısı mevcut ise foreach döngüsüne alıyoruz
foreach($blogs as $blog){
# Blog başlığı, içeriği ve oluşturulma tarihi gibi verileri $data değişkeninin içerisine ekliyoruz.
$data[$category['category_id']]['posts'][$blog['blog_id']]['title'] = $blog['blog_title'];
$data[$category['category_id']]['posts'][$blog['blog_id']]['content'] = $blog['blog_content'];
$data[$category['category_id']]['posts'][$blog['blog_id']]['date'] = $blog['blog_create'];
}
}
}
Yukarıda veritabanımızdan önce kategorileri daha sonrasında kategoride bulunan blog yazılarını $data değişkeninin içerisine aktardık.
Şimdi front-end tarafında listelemesini yaptıralım.
# Çektiğimiz verileri $data değişkenine aktardığımız için bu sefer
# $categories değişkeninini kullanmak yerine $data değişkenini kullanıyoruz.
# Bunu yapma sebebimiz ise front-end tarafında veritabanı
# sorgusu kullanıp kodu karmaşık hale getirmemek için.
<ul>
<?php foreach($data as $category): ?>
<li>
<?= $category['category_title'] ?>
<?php if(isset($category['posts'])): ?>
<ul>
<?php foreach($category['posts'] as $blog): ?>
<li><?= $blog['title'] ?></li>
<?php endforeach; ?>
</ul>
<?php else: ?>
<p>Bu kategoride blog yazısı henüz eklenmemiş.</p>
<?php endif; ?>
</li>
<?php endforeach; ?>
</ul>
Sorunu net olarak anlamamış olsamda, anladığım kadarıyla yardımcı olmaya çalıştım. Umarım yardımcı olabilmişimdir :)