لا يتم عرض الفئات الفرعية الديناميكية بشكل صحيح

0

لدي التنقل الجانبي في موقع الويب الخاص بي وأريد عرض قائمة بالفئات والفئات الفرعية ديناميكيًا من قاعدة البيانات الخاصة بي. لقد عرضت فئاتي بشكل صحيح كعناصر قائمة ، لكن فئاتي الفرعية لا تعرض بالطريقة الصحيحة. في الوقت الحالي ، يتم عرض الفئات الفرعية فقط في الجزء السفلي من معظم الفئات بدلاً من عرض قائمة في كل قائمة منسدلة. لقد حاولت وضع وظيفة الفئة الفرعية في DELIMETER ولكن ذلك لم ينجح وقد نظرت في أسئلة أخرى ولكن لا يبدو أن أياً منها يتناسب مع ما أحتاج إليه. لذا سؤالي هو كيف يمكنني تنسيق ذلك بحيث تعرض كل فئة قائمة بالفئات الفرعية؟ هنا هو رمز بلدي للوظائف:

    function get_categories(){
      $query = query("SELECT * FROM categories");
      confirm($query);

      while ($row = fetch_array($query)) {
        $category_links = <<<DELIMETER
        <li><a href="category.php?id={$row['cat_id']}" >{$row['cat_title']}</a>
        <div class="megadrop">

    DELIMETER;
    echo $category_links;
      }
}


    function get_sub_categories(){
      $query = query("SELECT * FROM sub_categories");
      confirm($query);

      while ($row = fetch_array($query)) {

        $category_links = <<<DELIMETER
        <li><a href="sub_categories.php?id={$row['cat_id']}" >{$row['sub_title']}</a></li>
    DELIMETER;
    echo $category_links;
      }

    }

وهنا صفحة التنقل الجانبي:

<div class="col-md-3">
  <ul class="menu">

    <?php  get_categories();?>

        <div class="col">

          <ul>
            <?php      get_sub_categories(); ?>
            </li>

          </ul>
      </div>
    </li>
  </ul>
</div>

شكرا لك على أي مساعدة.

1 إجابة

0

Gandalf ، لا يمكن أن تعمل بالطريقة التي تريدها لأنك تقوم بتشغيل هاتين الحلقتين واحدة تلو الأخرى بدلاً من متشابكة.

ما يفعله هذا بشكل أساسي:

> get_categories()
<ul class="menu">
  <li> __CAT0__
  <li> __CAT1__
  <li> __CAT2__
  ...
    <div class="col">
      <ul>
        <li> __SUBCAT0.0__
        <li> __SUBCAT0.1__
        <li> __SUBCAT1.0__
        <li> __SUBCAT2.0__
        ...

هل ترى كيف أنها معيبة؟ تكمن الإجابة في إنشاء نوع بيانات مناسب قادر على تمثيل البنية المتداخلة التي تبحث عنها (ما تريده بالتأكيد هو صفيف متعدد الأبعاد).

لذلك دعونا نرى ما يمكننا القيام به:

<?php

function get_sub_categories() {
   $categories = [];

   $query = query("SELECT * FROM sub_categories");
   confirm($query);

   while ($row = fetch_array($query)) {
     $parent = $row['parent_id'];
     $categories[$parent][] = $row;
   }

   return function($parent) use ($categories) {
     return isset($categories[$parent])
       ? $categories[$parent]
       : [];
     };
   };
}

function get_categories(){
  $categories = [];

  $query = query("SELECT * FROM categories");
  confirm($query);

  $findSubCategoriesFor = get_sub_categories();

  while ($row = fetch_array($query)) {
    $id = $row['cat_id'];

    $categories[$id] = [
      'category' => $row,
      'children' => $findSubCategoriesFor($id),
    ];
  }

  return $categories;
}

كل ما تحتاجه لتقديم التنقل متعدد المستويات بشكل صحيح ، الآن ، هو الاتصال get_categories() وتقديم كل إدخال واحدًا تلو الآخر مع حلقات متداخلة (أي فئة -> أطفال ، فئة -> أطفال ...)

:مؤلف
فوق
قائمة طعام