v2.5.2
Giriş yap

Php anasayfada son konular listeleme

omerg
226 defa görüntülendi ve 1 kişi tarafından değerlendirildi

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

bmathers
293 gün önce

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 :)