Не нравятся результаты поиска? Попробуйте другой поиск!
DLE FAQ » Все вопросы » Общие вопросы по PHP » Как вывести подменю в меню сайта?

Как вывести подменю в меню сайта?


     05.10.2015    Общие вопросы по PHP, MySQL    2117

вопрос
Ситуация следующая, не могу вывести подменю в меню(dle шаблонизатор).

$menu = $db->super_query("SELECT `id`,`title`,`link`,`submenu`,`status` FROM `".PREFIX."_menu` ORDER by `position` ASC", 1);
if($menu){
foreach($menu As $row){

//Собираем в кучу подменю
$sql = $db->super_query("SELECT `id`,`title`,`link` FROM `".PREFIX."_submenu` WHERE `menu_id` = '".$row['id']."' ORDER by `position` ASC", 1);
if($sql){
foreach($sql AS $rows){
$tpl_module->load_template('menu/submenu.tpl');
$tpl_module->set('{id}', $rows['id']);
$tpl_module->set('{title}', $rows['title']);
$tpl_module->set('{link}', $rows['link']);
$tpl_module->compile('submenu');
}
}

//Собираем в кучу основное меню
$tpl_module->load_template('menu/a.tpl');
if(!empty($row['submenu'])){
$tpl_module->set('[submenu]', '');
$tpl_module->set('[/submenu]', '');
} else {
$tpl_module->set_block("'\\[submenu\\](.*?)\\[/submenu\\]'si","");
}
$tpl_module->set('{id}', $row['id']);
$tpl_module->set('{title}', $row['title']);
$tpl_module->set('{link}', $row['link']);
if($row['status'] == 1) {
$tpl_module->set('[disable]', '');
$tpl_module->set('[/disable]', '');
} else {
$tpl_module->set_block("'\\[disable\\](.*?)\\[/disable\\]'si","");
}
$tpl_module->set('{submenu}', isset($tpl_module->result['submenu']) ? $tpl_module->result['submenu'] : null); //Вывод подменю
$tpl_module->compile('a');
}

//Собираем основной шаблон меню
$tpl_module->load_template('menu/menu.tpl');
$tpl_module->set('{menu}', isset($tpl_module->result['a']) ? $tpl_module->result['a'] : null); //Вывод меню и их подменю
$tpl_module->compile('content');


На выходе:
# Главная
# Новости
> Зарубежные
> Спортивные
> Еще

# Тестовое меню
> Зарубежные
> Спортивные
> Еще

> Еще 2
> Еще 3
Почему-то данные дублируются.. (отмечено красным)

Ответа пока нет


3 комментария

misha-koder
Юзер

misha-koder - 5 октября 2015 19:32 -

Во-первых вынесите функцию $tpl_module->load_template() за пределы цикла, внутри она не нужна.
Во-вторых используйте $tpl_module->clear() перед тем, как загрузить новый шаблон.
Пример:

if ($sql) {
    $tpl_module->load_template('menu/submenu.tpl');
    foreach ($sql AS $rows) {
        $tpl_module->set('{id}', $rows['id']);
        $tpl_module->set('{title}', $rows['title']);
        $tpl_module->set('{link}', $rows['link']);
        $tpl_module->compile('submenu');
    }
    $tpl_module->clear();
}

maragon
Юзер

maragon - 6 октября 2015 15:07 -

Увы, не помогло ->clear()
может быть проблема в другом?

maragon
Юзер

maragon - 6 октября 2015 15:31 -

Если же выводить так:


$submenu = null;
$sql = $db->super_query("SELECT ..... FROM `".PREFIX."_submenu`", 1);
foreach($sql AS $row){
$submenu .= '<div>' . $row['title'] . '</div>';
}

//Собираем в кучу основное меню
$tpl_module->load_template('menu/a.tpl');
if(!empty($row['submenu'])){
$tpl_module->set('[submenu]', '');
$tpl_module->set('[/submenu]', '');
} else {
$tpl_module->set_block("'\\[submenu\\](.*?)\\[/submenu\\]'si","");
}
$tpl_module->set('{id}', $row['id']);
$tpl_module->set('{title}', $row['title']);
$tpl_module->set('{link}', $row['link']);
if($row['status'] == 1) {
$tpl_module->set('[disable]', '');
$tpl_module->set('[/disable]', '');
} else {
$tpl_module->set_block("'\\[disable\\](.*?)\\[/disable\\]'si","");
}
$tpl_module->set('{submenu}', isset($submenu) ? $submenu : null); //Вывод подменю ($submenu -> выше)
$tpl_module->compile('a');
}

//Собираем основной шаблон меню
$tpl_module->load_template('menu/menu.tpl');
$tpl_module->set('{menu}', isset($tpl_module->result['a']) ? $tpl_module->result['a'] : null); //Вывод меню и их подменю
$tpl_module->compile('content');


То все прекрасно выводится. Но не хочется смешивать php с html. Есть же какой-то выход.

Чтобы комментировать - войдите или зарегистрируйтесь на сайте

Похожие вопросы

наверх