• 29-10-2024, 22:00:46
    #1
    Platin üye
    Merhabalar,
    Bir php scriptte ana kategori ürünlerini ve alt kategori ürünlerini aynı sayfada çekmek istiyorum. Uzun denemeler sonucunda başarıya ulaşamadım.
    Veritabanı yapısı bu şekilde;
    CREATE TABLE `urun_kategori_lokma` (
      `id` int(11) NOT NULL,
      `adi` text CHARACTER SET utf8 COLLATE utf8_turkish_ci,
      `sira` text CHARACTER SET utf8 COLLATE utf8_turkish_ci,
      `resim` text CHARACTER SET utf8 COLLATE utf8_turkish_ci,
      `kategori` text CHARACTER SET utf8 COLLATE utf8_turkish_ci,
      `onaciklama` text CHARACTER SET utf8 COLLATE utf8_turkish_ci,
      `durum` text CHARACTER SET utf8 COLLATE utf8_turkish_ci,
      `aciklama` text CHARACTER SET utf8 COLLATE utf8_turkish_ci,
      `seo` text CHARACTER SET utf8 COLLATE utf8_turkish_ci,
      `tur` text CHARACTER SET utf8 COLLATE utf8_turkish_ci,
      `eklenme_tarihi` text CHARACTER SET utf8 COLLATE utf8_turkish_ci,
      `guncelleme_tarihi` text CHARACTER SET utf8 COLLATE utf8_turkish_ci,
      `adi_en` text CHARACTER SET utf8 COLLATE utf8_turkish_ci,
      `aciklama_en` text CHARACTER SET utf8 COLLATE utf8_turkish_ci,
      `onaciklama_en` text CHARACTER SET utf8 COLLATE utf8_turkish_ci,
      `seo_en` text CHARACTER SET utf8 COLLATE utf8_turkish_ci,
      `icon` text
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
    Veritabanı içeriği de bu şekilde;
    INSERT INTO `urun_kategori_lokma` (`id`, `adi`, `sira`, `resim`, `kategori`, `onaciklama`, `durum`, `aciklama`, `seo`, `tur`, `eklenme_tarihi`, `guncelleme_tarihi`, `adi_en`, `aciklama_en`, `onaciklama_en`, `seo_en`, `icon`) VALUES
    (1, 'Lokma', '1', 'resim-yok', '0', '', 'on', '', 'lokma', 'urun_kategori_lokma', '29.10.2024', NULL, NULL, NULL, NULL, '', NULL),
    (2, 'Bubble', '2', 'resim-yok', '0', '', 'on', '', 'bubble', 'urun_kategori_lokma', '29.10.2024', NULL, NULL, NULL, NULL, '', NULL),
    (3, 'Regnum', '3', 'resim-yok', '0', '', 'on', '', 'regnum', 'urun_kategori_lokma', '29.10.2024', NULL, NULL, NULL, NULL, '', NULL),
    (4, 'İçecekler', '4', 'resim-yok', '0', '', 'on', '', 'icecekler', 'urun_kategori_lokma', '29.10.2024', NULL, NULL, NULL, NULL, '', NULL),
    (5, 'Süslemeler', '5', 'resim-yok', '0', '', 'on', '', 'suslemeler', 'urun_kategori_lokma', '29.10.2024', NULL, NULL, NULL, NULL, '', NULL),
    (6, 'İç Dolgu', '6', 'resim-yok', '5', '', 'on', '', 'ic-dolgu', 'urun_kategori_lokma', '29.10.2024', NULL, NULL, NULL, NULL, '', NULL);
    İç Dolgu haricindeki diğer kategoriler ana kategori, İç Dolgu kategorisi Süslemeler kategorisinin alt kategorisi şeklinde. Ana kategorilerin kategori sütunu değerini 0 yaparak, alt kategorinin değerini de ana kategorinin id değeri yaparak belirliyoruz.
    Php kodlarımız da aşağıdaki gibi;
    <div class="main category">
        <div class="container">
            <h5 class="page-subtitle text-center"><?=$adi?></h5><br/>
            <div class="row">
                <?php
                if (strstr($_SERVER["SCRIPT_URL"], "kategori")) {
                    // Ana kategorileri çekelim
                    $anaKategoriler = $db->query("SELECT * FROM urun_kategori_lokma WHERE kategori='0' ORDER BY sira ASC")->fetchAll(PDO::FETCH_ASSOC);
                    
                    foreach ($anaKategoriler as $anaKategori) {
                        echo "<h3>" . $anaKategori["adi"] . "</h3>";  // Ana kategori başlığı
                        
                        // Alt kategorileri ve ana kategoriyi birleştirerek ürünleri çekmeyi deniyorum.
                        $kategoriID = $anaKategori['id'];
                        $urunler = $db->query("SELECT * FROM urunler_lokma WHERE kategori='$kategoriID' OR kategori IN (SELECT id FROM urun_kategori_lokma WHERE kategori='$kategoriID') ORDER BY sira ASC")->fetchAll(PDO::FETCH_ASSOC);
                        
                        foreach ($urunler as $goster) {
                            ?>
                            <div class="col-6 col-lg-3 col-sm-4 col-md-3">
                                <a title="<?=$goster["adi"]?>" href="<?=$goster["seo"]?>">
                                    <div class="product box-shadow">
                                        <div class="medium-img image" data-src="resimler/<?=$goster["resim"]?>">
                                            <img class="blur" title="<?=$goster["adi"]?>" alt="<?=$goster["adi"]?>" src="resimler/<?=$logo?>">
                                        </div>
                                        <div class="detail">
                                            <span class="name"><?=$goster["adi"]?></span>
                                            <span class="price"><?=$goster["fiyat"]?> <i class='fa fa-try'></i></span>
                                        </div>
                                    </div>
                                </a>
                            </div>
                            <?php
                        }
                    }
                } else {
                    $cek = $db->query("SELECT * FROM urunler_lokma WHERE kategori='$id' ORDER BY sira ASC")->fetchAll(PDO::FETCH_ASSOC);
                    foreach ($cek as $goster) {
                        ?>
                        <div class="col-12 col-md-3">
                            <div class="card border-0 shadow-light text-center mb-4">
                                <div class="card-body position-relative">
                                    <div class="h-300 position-relative overflow-hidden">
                                        <div class="background background-h-300">
                                            <img src="resimler/<?=$goster["resim"]?>" alt="">
                                        </div>
                                    </div>
                                    <a title="<?=$goster["adi"]?>" href="<?=$goster["seo"]?>">
                                        <h4 class="text-default"><?=$goster["adi"]?></h4>
                                    </a>
                                    <div class="row">
                                        <div class="col text-center">
                                            <p class="text-success my-0"><?=$goster["fiyat"]?></p>
                                        </div>
                                    </div>
                                </div>
                            </div>
                        </div>
                        <?php
                    }
                }
                ?>
            </div>
        </div>
    </div>
    Ekrana Ana Kategori başlığı altında ana kategori ürünlerini, alt kategori başlığı altına da alt kategori ürünlerini bastırmak istiyorum. Desteğinizi rica ederim.
  • 29-10-2024, 22:05:00
    #2
    <div class="main category">
        <div class="container">
            <h5 class="page-subtitle text-center"><?= $adi ?></h5><br/>
            <div class="row">
                <?php
                if (strstr($_SERVER["SCRIPT_URL"], "kategori")) {
                    $anaKategoriler = $db->query("SELECT * FROM urun_kategori_lokma WHERE kategori='0' ORDER BY sira ASC")->fetchAll(PDO::FETCH_ASSOC);
                    foreach ($anaKategoriler as $anaKategori) {
                        echo "<h3>" . $anaKategori["adi"] . "</h3>";  // Ana kategori başlığı
                        $kategoriID = $anaKategori['id'];
                        $anaKategoriUrunler = $db->query("SELECT * FROM urunler_lokma WHERE kategori='$kategoriID' ORDER BY sira ASC")->fetchAll(PDO::FETCH_ASSOC);
                        foreach ($anaKategoriUrunler as $goster) {
                            ?>
                            <div class="col-6 col-lg-3 col-sm-4 col-md-3">
                                <a title="<?=$goster["adi"]?>" href="<?=$goster["seo"]?>">
                                    <div class="product box-shadow">
                                        <div class="medium-img image" data-src="resimler/<?=$goster["resim"]?>">
                                            <img class="blur" title="<?=$goster["adi"]?>" alt="<?=$goster["adi"]?>" src="resimler/<?=$logo?>">
                                        </div>
                                        <div class="detail">
                                            <span class="name"><?=$goster["adi"]?></span>
                                            <span class="price"><?=$goster["fiyat"]?> <i class='fa fa-try'></i></span>
                                        </div>
                                    </div>
                                </a>
                            </div>
                            <?php
                        }
    
                        $altKategoriler = $db->query("SELECT * FROM urun_kategori_lokma WHERE kategori='$kategoriID' ORDER BY sira ASC")->fetchAll(PDO::FETCH_ASSOC);
    
                        foreach ($altKategoriler as $altKategori) {
                            echo "<h4 class='ml-3'>" . $altKategori["adi"] . "</h4>";  // Alt kategori başlığı
                            $altKategoriID = $altKategori['id'];
                            $altKategoriUrunler = $db->query("SELECT * FROM urunler_lokma WHERE kategori='$altKategoriID' ORDER BY sira ASC")->fetchAll(PDO::FETCH_ASSOC);
    
                            foreach ($altKategoriUrunler as $goster) {
                                ?>
                                <div class="col-6 col-lg-3 col-sm-4 col-md-3">
                                    <a title="<?=$goster["adi"]?>" href="<?=$goster["seo"]?>">
                                        <div class="product box-shadow">
                                            <div class="medium-img image" data-src="resimler/<?=$goster["resim"]?>">
                                                <img class="blur" title="<?=$goster["adi"]?>" alt="<?=$goster["adi"]?>" src="resimler/<?=$logo?>">
                                            </div>
                                            <div class="detail">
                                                <span class="name"><?=$goster["adi"]?></span>
                                                <span class="price"><?=$goster["fiyat"]?> <i class='fa fa-try'></i></span>
                                            </div>
                                        </div>
                                    </a>
                                </div>
                                <?php
                            }
                        }
                    }
                } else {
                    $cek = $db->query("SELECT * FROM urunler_lokma WHERE kategori='$id' ORDER BY sira ASC")->fetchAll(PDO::FETCH_ASSOC);
                    foreach ($cek as $goster) {
                        ?>
                        <div class="col-12 col-md-3">
                            <div class="card border-0 shadow-light text-center mb-4">
                                <div class="card-body position-relative">
                                    <div class="h-300 position-relative overflow-hidden">
                                        <div class="background background-h-300">
                                            <img src="resimler/<?=$goster["resim"]?>" alt="">
                                        </div>
                                    </div>
                                    <a title="<?=$goster["adi"]?>" href="<?=$goster["seo"]?>">
                                        <h4 class="text-default"><?=$goster["adi"]?></h4>
                                    </a>
                                    <div class="row">
                                        <div class="col text-center">
                                            <p class="text-success my-0"><?=$goster["fiyat"]?></p>
                                        </div>
                                    </div>
                                </div>
                            </div>
                        </div>
                        <?php
                    }
                }
                ?>
            </div>
        </div>
    </div>
    bunu bir denermisin hocam.
  • 29-10-2024, 22:28:25
    #3
    Platin üye
    Semotion adlı üyeden alıntı: mesajı görüntüle
    <div class="main category">
        <div class="container">
            <h5 class="page-subtitle text-center"><?= $adi ?></h5><br/>
            <div class="row">
                <?php
                if (strstr($_SERVER["SCRIPT_URL"], "kategori")) {
                    $anaKategoriler = $db->query("SELECT * FROM urun_kategori_lokma WHERE kategori='0' ORDER BY sira ASC")->fetchAll(PDO::FETCH_ASSOC);
                    foreach ($anaKategoriler as $anaKategori) {
                        echo "<h3>" . $anaKategori["adi"] . "</h3>";  // Ana kategori başlığı
                        $kategoriID = $anaKategori['id'];
                        $anaKategoriUrunler = $db->query("SELECT * FROM urunler_lokma WHERE kategori='$kategoriID' ORDER BY sira ASC")->fetchAll(PDO::FETCH_ASSOC);
                        foreach ($anaKategoriUrunler as $goster) {
                            ?>
                            <div class="col-6 col-lg-3 col-sm-4 col-md-3">
                                <a title="<?=$goster["adi"]?>" href="<?=$goster["seo"]?>">
                                    <div class="product box-shadow">
                                        <div class="medium-img image" data-src="resimler/<?=$goster["resim"]?>">
                                            <img class="blur" title="<?=$goster["adi"]?>" alt="<?=$goster["adi"]?>" src="resimler/<?=$logo?>">
                                        </div>
                                        <div class="detail">
                                            <span class="name"><?=$goster["adi"]?></span>
                                            <span class="price"><?=$goster["fiyat"]?> <i class='fa fa-try'></i></span>
                                        </div>
                                    </div>
                                </a>
                            </div>
                            <?php
                        }
    
                        $altKategoriler = $db->query("SELECT * FROM urun_kategori_lokma WHERE kategori='$kategoriID' ORDER BY sira ASC")->fetchAll(PDO::FETCH_ASSOC);
    
                        foreach ($altKategoriler as $altKategori) {
                            echo "<h4 class='ml-3'>" . $altKategori["adi"] . "</h4>";  // Alt kategori başlığı
                            $altKategoriID = $altKategori['id'];
                            $altKategoriUrunler = $db->query("SELECT * FROM urunler_lokma WHERE kategori='$altKategoriID' ORDER BY sira ASC")->fetchAll(PDO::FETCH_ASSOC);
    
                            foreach ($altKategoriUrunler as $goster) {
                                ?>
                                <div class="col-6 col-lg-3 col-sm-4 col-md-3">
                                    <a title="<?=$goster["adi"]?>" href="<?=$goster["seo"]?>">
                                        <div class="product box-shadow">
                                            <div class="medium-img image" data-src="resimler/<?=$goster["resim"]?>">
                                                <img class="blur" title="<?=$goster["adi"]?>" alt="<?=$goster["adi"]?>" src="resimler/<?=$logo?>">
                                            </div>
                                            <div class="detail">
                                                <span class="name"><?=$goster["adi"]?></span>
                                                <span class="price"><?=$goster["fiyat"]?> <i class='fa fa-try'></i></span>
                                            </div>
                                        </div>
                                    </a>
                                </div>
                                <?php
                            }
                        }
                    }
                } else {
                    $cek = $db->query("SELECT * FROM urunler_lokma WHERE kategori='$id' ORDER BY sira ASC")->fetchAll(PDO::FETCH_ASSOC);
                    foreach ($cek as $goster) {
                        ?>
                        <div class="col-12 col-md-3">
                            <div class="card border-0 shadow-light text-center mb-4">
                                <div class="card-body position-relative">
                                    <div class="h-300 position-relative overflow-hidden">
                                        <div class="background background-h-300">
                                            <img src="resimler/<?=$goster["resim"]?>" alt="">
                                        </div>
                                    </div>
                                    <a title="<?=$goster["adi"]?>" href="<?=$goster["seo"]?>">
                                        <h4 class="text-default"><?=$goster["adi"]?></h4>
                                    </a>
                                    <div class="row">
                                        <div class="col text-center">
                                            <p class="text-success my-0"><?=$goster["fiyat"]?></p>
                                        </div>
                                    </div>
                                </div>
                            </div>
                        </div>
                        <?php
                    }
                }
                ?>
            </div>
        </div>
    </div>
    bunu bir denermisin hocam.
    Maalesef, yine çıkmadı. Teşekkür ederim
  • 18-11-2024, 01:16:35
    #4
    merhaba konu kapanmadığı için sorunun çözülmediğini düşünerek yazıyorum bu şekilde denermisiniz.

    <?php
    function getAllSubcategories($db, $parentID) {
        // İlk olarak doğrudan alt kategorileri çekelim
        $categories = $db->query("SELECT id FROM urun_kategori_lokma WHERE kategori='$parentID'")->fetchAll(PDO::FETCH_COLUMN);
        $allCategories = $categories;
        // Her alt kategori için tekrar fonksiyonu çağır
        foreach ($categories as $categoryID) {
            $subcategories = getAllSubcategories($db, $categoryID);
            $allCategories = array_merge($allCategories, $subcategories);
        }
        return $allCategories;
    }
    function getCategoryHierarchy($db, $categoryID, $delimiter = " > ") {
        $category = $db->query("SELECT * FROM urun_kategori_lokma WHERE id='$categoryID'")->fetch(PDO::FETCH_ASSOC);
        if (!$category) {
            return ""; // Kategori bulunamadıysa boş döndür
        }
        // Eğer ana kategori değilse (kategori != 0), üst kategoriyi bul
        if ($category['kategori'] != '0') {
            $parentHierarchy = getCategoryHierarchy($db, $category['kategori'], $delimiter);
            return $parentHierarchy . $delimiter . $category['adi'];
        }
        // Ana kategori ise sadece kendi adını döndür
        return $category['adi'];
    }
    
    ?>
    
    <div class="main category">
        <div class="container">
            <h5 class="page-subtitle text-center"></h5><br/>
            <div class="row">
                <?php
                if (strstr($_SERVER["SCRIPT_URL"], "kategori")) {
                    // Ana kategorileri çekelim
                    $anaKategoriler = $db->query("SELECT * FROM urun_kategori_lokma WHERE kategori='0' ORDER BY sira ASC")->fetchAll(PDO::FETCH_ASSOC);
                
                    foreach ($anaKategoriler as $anaKategori) {
                        echo "<h3>" . $anaKategori["adi"] . "</h3>"; // Ana kategori başlığı
                
                        // Alt kategorileri alalım
                        $kategoriID = $anaKategori['id'];
                        $altKategoriler = getAllSubcategories($db, $kategoriID);
                
                        // Ana kategoriyi ve tüm alt kategorileri sorguya dahil edelim
                        $kategoriListesi = implode(",", array_merge([$kategoriID], $altKategoriler));
                        $urunler = $db->query("SELECT * FROM urunler_lokma WHERE kategori IN ($kategoriListesi) ORDER BY sira ASC")->fetchAll(PDO::FETCH_ASSOC);
                
                        foreach ($urunler as $goster) {
                            // Ürünün bağlı olduğu kategori hiyerarşisini alın
                            $kategoriHiyerarsi = getCategoryHierarchy($db, $goster["kategori"]);
                
                            ?>
                            <div class="col-6 col-lg-3 col-sm-4 col-md-3">
                                <a title="<?=$goster["adi"]?>" href="<?=$goster["seo"]?>">
                                    <div class="product box-shadow">
                                        <div class="medium-img image" data-src="resimler/<?=$goster["resim"]?>">
                                            <img class="blur" title="<?=$goster["adi"]?>" alt="<?=$goster["adi"]?>" src="resimler/<?=$logo?>">
                                        </div>
                                        <div class="detail">
                                            <span class="name"><?=$goster["adi"]?></span>
                                            <span class="category"><?=$kategoriHiyerarsi?></span> <!-- Hiyerarşik kategori adı -->
                                            <span class="price"><?=$goster["fiyat"]?> <i class='fa fa-try'></i></span>
                                        </div>
                                    </div>
                                </a>
                            </div>
                            <?php
                        }
                    }
                }
                
                
                ?>
            </div>
        </div>
    </div>