Невозможно установить название меню - PullRequest
0 голосов
/ 18 января 2011

Мне сложно отобразить меню с этим кодом.В родительском меню вместо имени меню отображается «Массив».Вот код.

модель

function getCategoriesNav(){
    //page 157

    $data = array();
    $this->db->select('id, name, parentid');
    $this->db->where('status', 'active');
    $this->db->order_by('parentid', 'asc');
    $this->db->order_by('name', 'asc');
    $this->db->group_by('parentid', 'id');
    $Q = $this->db->get('categories');
    if($Q->num_rows >0){
        foreach($Q->result() as $row){
            if($row->parentid > 0){
                $data[0][$row->parentid]['children'][$row->id] = $row->name;
            }else{
            $data[0][$row->id]['name'] = $row->name;
            }
        }
    }
    $Q->free_result();
    return $data;
}

контроллер

function index()
{
    $data['title'] = 'News';
    $data['navlist'] = $this->MCats->getCategoriesNav();
    $data['mainf'] = $this->MProducts->getMainFeature();
    $skip = $data['mainf']['id'];
    $data['sidef'] = $this->MProducts->getRandomProducts(3, $skip);
    $data['main'] = 'home';
    $this->load->vars($data);
    $this->load->view('template');
}

и вид

<?php

if(count($navlist)){
    echo "<ul>";
    foreach($navlist as $key => $list){
            foreach($list as $topkey => $toplist){
                echo "<li class='cat'>";
                echo anchor("welcome/cat/$topkey", $toplist);
                echo "</li>\n";
                    if(count($toplist['children'])){
                        foreach($toplist['children'] as $subkey => $subname){
                            echo "\n<li class='subcat'>";
                            echo anchor("welcome/cat/$subkey", $subname);
                            echo "</li>";
                }
            }
        }

    }
    echo "</ul>\n";

}


?>

пожалуйста, помогите

1 Ответ

1 голос
/ 18 января 2011

Это мой анализ структуры вашего массива:

У вас есть четырехуровневый многомерный массив для хранения имени строки.

[0] [родительский идентификатор] ['children'] [id строки] = имя строки.

Ваш foreach(navlist as key=>list) устанавливает [родительский идентификатор] как $key и ['children'] [идентификатор строки] = имя строки как $list.

Ваш foreach($list as $topkey=>$toplist) устанавливает ['children'] как $topkey и [id строки] = имя строки как $toplist.

Ваш вызов anchor('welcome/cat/$topkey, $toplist) отправляет массив в вспомогательную функцию привязки, возможно, именно поэтому вы видите вывод «массива» в браузер. Эта функция принимает только строку для аргумента «текст для отображения».

EDIT

Чтобы ответить на ваш комментарий, попробуйте следующее:

Вместо:

echo anchor("welcome/cat/$topkey", $toplist);

Используйте это:

echo anchor("welcome/cat/$topkey", $toplist['name']);

Теперь вы будете передавать значение $data[0][$row->id]['name'], которое является вашей конструкцией для хранения $row->name в вашей модели.

РЕДАКТИРОВАТЬ 2:

Я также заметил, что вы используете

if($Q->num_rows >0){

Вам не хватает скобки для функции num_rows.

if($Q->num_rows() > 0) {

Это может иметь отношение к отсутствующим категориям родителей и детей. Если нет, я рекомендую удалить из запроса ваше предложение group_by(), просто чтобы посмотреть, не мешает ли это вам. Если это не поможет, уберите order_by() и посмотрите, что произойдет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...