Добавление категорий и подкатегорий в блог - PullRequest
0 голосов
/ 25 июня 2018

Хорошо, я провел много исследований и посмотрел на множество вопросов о переполнении стека, но ни один из них не ответил на мой вопрос.

Я строю простой блог и сейчас пытаюсь создатьпростая система категорий / подкатегорий, но столкнулась с препятствием в загрузке подкатегорий под своим родителем.Если вы знаете более простой метод, чем тот, который я делаю ниже, пожалуйста, дайте мне знать.

Вот как структурирована моя БД:

id || name || parent_id || status
------------------------------------------
1  || category1 || NULL || 1
2  || subcategory1 || 1 || 1

Тогда у меня есть код моей модели:

public function getCategories()
{
    $results = $this->db->select('msi_items_categories','status = 1 AND parent_id = NULL');
    if( !is_array($results[0]) ) {
        $new_results = array();
        array_push($new_results, $results);
        return $new_results;
    } else {
        return $results;
    }
}

public function getSubCategories($parent)
{
    $bind = [':parent' => $parent];
    $results = $this->db->select('msi_items_categories','status = 1 AND parent_id = :parent');
    if( !is_array($results[0]) ) {
        $new_results = array();
        array_push($new_results, $results);
        return $new_results;
    } else {
        return $results;
    }
}

Это мой код контроллера:

public function error()
{
    $getSettings = $this->setting->getAll();
    $getCategories = $this->setting->getCategories();
    $getSubCategories = $this->setting->getSubCategories();
    if(is_array($getCategories[0]) ) {
        $isCategory = true;
    } else {
        $isCategory = false;
    }
    if(is_array($getSubCategories[0]) ) {
        $isSubCategory = true;
    } else {
        $isSubCategory = false;
    }
    $data = [
        'settings' => $getSettings,
        'mainCategory' => $getCategories,
        'subCategory' => $getSubCategories,
        'isCategory' => $isCategory
        'isSubCategory' => $isSubCategory
    ];
    $this->view('index', $data);
}

Тогда у меня есть мой шаблонный код, где я пытаюсь выполнить foreach, и верхняя категория работает нормально, но я просто не могу понять,как я делаю подкатегории.Прежде чем я начал использовать модель MVC, я просто поместил бы класс в основную категорию foreach, а затем поместил идентификатор, но теперь все это делается в контроллере, поэтому я не могу понять, как я делаю подкатегории, используя модель MVC.

    <?php foreach($data['mainCategory'] as $category) : ?>
    <li class="dropdown">
        <a class="dropdown-toggle nav-link dropdown-toggle pl-0" data-toggle="dropdown" aria-expanded="false" href="#"><?php echo $category['name']; ?></a>
        <div class="dropdown-menu" role="menu">
            <a class="dropdown-item" role="presentation" href="#"><i class="text-black-50 fas fa-box"></i>&nbsp; All <?php echo $category['name']; ?></a>
            <div class="dropdown-divider" role="presentation"></div>
            <?php foreach($data['subCategory'] as $scategory) : ?>
                <a class="dropdown-item" role="presentation" href="#"><i class="text-black-50 <?php echo $scategory['icon']; ?>"></i>&nbsp; <?php echo $scategory['name']; ?></a>
            <?php endforeach; ?>
        </div>
    </li>
    <?php endforeach; ?>

Большое спасибо!

1 Ответ

0 голосов
/ 27 июня 2018
$query = 'SELECT id, parent_id, name, icon FROM categories ORDER BY name';
$result = mysqli_query($conn, $query) OR trigger_error($query.'<br>'.mysqli_error($conn),E_USER_ERROR);

$refs = Array();
$categories = Array();
while($row = mysqli_fetch_assoc($result))
{
  $thisref = &$refs[$row['id']];
  $thisref['name'] = $row['name'];
  $thisref['icon'] = $row['icon'];
  if($row['parent_id']) $refs[$row['parent_id']]['children'][$row['id']] = &$thisref;
    else $categories[$row['id']] = &$thisref;
}

echo '<ul class="nav navbar-nav mr-auto">';
foreach($categories as $category)
{
  echo '<li class="dropdown">';
  echo is_array($category['children'])
    ? '<a class="dropdown-toggle nav-link dropdown-toggle pl-0" data-toggle="dropdown" aria-expanded="false" href="#">'.$category['name'].'</a>'.sub($category['children'])
    : $category['name'];
  echo '</li>';
}
echo '</ul>';

function sub(&$subCat)
{
  echo '<div class="dropdown-menu" role="menu">
    <a class="dropdown-item hide-me" role="presentation" href="#"><i class="fas fa-fire mr-2"></i> Most Popular </a>
    <div class="dropdown-divider hide-me" role="presentation"></div>';
  foreach($subCat as $id => $subcategory)
  {
    echo '<a class="dropdown-item" role="presentation" href="'.FULL_ROOT.'/category/'.$id.'/"><i class="'.$subcategory['icon'].' mr-2"></i>'.$subcategory['name'].'</a>';
  }
  echo '</div>';
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...