Учитывая приведенное выше сообщение об ошибке PHP, оно говорит, что вы сказали методу Cat_menu :: make_menu () принять аргумент. В этом случае функция make_menu ($ parent) в контроллере Cat_menu .
Если эта функция не требует ввода - не похоже, что используется $ parent - просто удалите аргумент $ parent из make_menu.
В качестве альтернативы, установите значение по умолчанию, если вы хотите, чтобы функция не принимала аргументы. Смотрите ниже:
cat_menu.php (Controller)
<?php
class Cat_menu extends Controller
{
function Cat_menu()
{
parent::Controller();
}
function make_menu($parent = FALSE) //Is this $parent argument needed?
{
$this->load->model('cat_menu_model');
$data['navlist'] = $this->cat_menu_model->get_categories_nav();
//If you want to parse data to a view you need to state it
$this->load->view('menu', $data);
}
}
Предполагая, что остальная часть вашего кода верна, теперь это должно работать. Пожалуйста, см. Руководство пользователя CodeIgniter для справки. В частности, просматривает документацию о разборе значений.
OP * ответил в комментариях ниже, это мой ответ.
** OP = Оригинальный постер *
При запуске print_r ($ navlist) в представлении. ОП получает следующий вывод:
Array (
[0] => Array (
[7] => clothes
[8] => fun
)
[7] => Array (
[3] => pants
[2] => shirts
[1] => shoes
)
[8] => Array (
[6] => games
[5] => toys
)
)
Однако стоит отметить, что запрос ActiveRecord модели CI OP значительно отличается от исходного запроса (не MVC):
SELECT
id,
parentid,
name
FROM
categories
ORDER BY
parentid ASC
против
$this->db->select('id,name,parentid');
$this->db->where('status', 'active');
$this->db->orderby('parentid','asc');
$this->db->orderby('name','asc');
$Q = $this->db->get('categories');
Запрос модели CI отличается от исходного SQL для начала. При преобразовании в SQL получится следующее:
SELECT
id,
name,
parentid
FROM
categories
WHERE
status = 'active'
ORDER BY
parentid ASC,
name ASC
Однако, похоже, что верные данные возвращаются, поэтому я продолжу.
ОП хотел бы, чтобы массив был отформатирован как иерархия. Для дальнейшего использования, пожалуйста, смотрите: PHP / MySQL - построение иерархии навигационного меню . Самый простой способ сделать это - следовать исходной функции OP (не MVC) и добавить ее в качестве функции модели. Эта функция модели создаст вложенный массив, а не прямой вывод html - причина этого состоит в том, чтобы отделить логику приложения от вывода.
Вы можете добавить следующее к вашей модели как функцию. Изначально взято из Вложенных множеств, массива php и преобразования , но с тех пор переписано из-за ошибок, появившихся для OP:
function to_hierarchy($collection = NULL)
{
if (is_null($collection)) return false;
$tree = array();
foreach($collection[0] as $key => $value)
{
$tree[$value] = array();
foreach($collection[$key] as $item)
{
array_push($tree[$value], $item);
}
}
return $tree;
}
Теперь мы можем обновить наш контроллер следующим образом:
cat_menu.php (Контроллер)
<?php
class Cat_menu extends Controller
{
function Cat_menu()
{
parent::Controller();
}
function make_menu($parent = FALSE) //Is this $parent argument needed?
{
$this->load->model('cat_menu_model');
$get_nav_list = $this->cat_menu_model->get_categories_nav();
$format_nav_list = $this->cat_menu_model->to_hierarchy($get_nav_list);
//Load the HTML helper for ul/ol conversion
$this->load->helper('html');
$data['navlist'] = $format_nav_list;
//If you want to parse data to a view you need to state it
$this->load->view('menu', $data);
}
}
Теперь мы можем обновить наш взгляд следующим образом:
menu.php (Просмотр)
<?php
echo ul($navlist);
?>
Отказ от ответственности: Ничто из вышеперечисленного не было проверено с использованием PHP, так как в настоящее время у меня нет доступа к переводчику с этого компьютера. Пожалуйста, убедитесь, что вы проверили любой синтаксис.