v2.5.2
Giriş yap

Php anasayfada son konular listeleme

omerg
318 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

Cevap yaz
Cevaplar (9)
bmathers
481 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 :)

omerg
482 gün önce

yardim edin bana lazim

omerg
483 gün önce

yok benim istediğim o değil hangi kategoride son konu paylaşılmışsa o kategorinin sağında yazılmasını istiyorum gökçen desc i biliyorum

gokcin
484 gün önce

Merhaba,

PHP Verilerinde anasayfan için ayrı bir veri listelemesi oluşturabilirsin, ASC Değilde DESC olarak oluşturursan eğer son verileri sana verecektir. DESC LIMIT 25 yaparsan son 25 konuyu verecektir.
Tabi ki bu sadece basit olanı bunu daha temiz halde kategorilerin varsada onlara göre yapabilirsin.

omerg
485 gün önce

WordPress değil

miosavagee
485 gün önce
omerg
485 gün önce

db tablo yok

omerg
485 gün önce

bilen olursa iyi olacaktir

hakankorkz
485 gün önce

db tablo yapını bilmeden buna cevap vermek biraz zor olacaktır