Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
9 / 9 / 2
Регистрация: 29.05.2011
Сообщений: 524
1

Убрать разделы из меню сайта

22.06.2016, 07:30. Просмотров 1132. Ответов 12
Метки нет (Все метки)

Доброго времени суток!
Подскажите, пожалуйста, как возможно убрать разделы в меню сайта.
К примеру, на сайте есть меню (скрин "Убрать раздел"). Необходимо раздел "Женская одежда" убрать из меню.
Существует:
PHP
1
2
3
4
$arResult = array();
$arResult["ALL_ITEMS"] = $arAllItems;
$arResult["ALL_ITEMS_ID"] = $arMenuItemsIDs;
$arResult["MENU_STRUCTURE"] = $arMenuStructure;
Структура
PHP
1
$arResult["ALL_ITEMS"] = $arAllItems;
(скрин "Структура $arAllItems"),
Структура
PHP
1
$arResult["ALL_ITEMS_ID"] = $arMenuItemsIDs;
(скрин "Структура $arMenuItemsIDs"),
Структура
PHP
1
$arResult["MENU_STRUCTURE"] = $arMenuStructure;
(скрин "Структура $arMenuStructure").

Необходимо работать с
PHP
1
$arResult["ALL_ITEMS"] = $arAllItems;
. Тк в данном массиве есть ["LINK"], который для раздела "Женская одежда" выглядит так (скрин "Женская одежда").

К примеру, есть массив со значениями(символьными кодами разделов), которые необходимо исключить.
Как с помощью данного массива возможно в
PHP
1
$arResult["ALL_ITEMS"] = $arAllItems;
исключить разделы?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.06.2016, 07:30
Ответы с готовыми решениями:

Никак не могу убрать ненужную полоску между меню и основой сайта!
Вот таблица стилей менюшки , я проверил что именно отсюда вылезает полоса ) но найти никак не могу)...

При попытке убрать второе меню, на его месте появляется список всех материалов сайта
При попытке убрать второе меню, на его месте появляется список всех материалов сайта. Как убрать?...

Создать проект. Создать разделы меню. Вызвать форму из главного меню
Приветствую Всех. Недавно зарегистрировался на данном форуме. Вопрос и соответственно большая...

Разделы сайта
Первый раз работаю с Джумлой, не могу разобраться... На моем сайте создано главное навигационное...

12
9 / 9 / 2
Регистрация: 29.05.2011
Сообщений: 524
22.06.2016, 07:33  [ТС] 2
Скрины
0
Миниатюры
Убрать разделы из меню сайта   Убрать разделы из меню сайта   Убрать разделы из меню сайта  

9 / 9 / 2
Регистрация: 29.05.2011
Сообщений: 524
22.06.2016, 07:34  [ТС] 3
Скрин "Убрать раздел"
0
Миниатюры
Убрать разделы из меню сайта  
шКодер самоучка
2085 / 1829 / 892
Регистрация: 09.10.2013
Сообщений: 3,991
Записей в блоге: 7
22.06.2016, 08:17 4
_marisha, а что, в настройках CMS пункты не отключаются?)
Тут есть несколько путей:
Правильный путь №1 - скрыть в настройках
Правильный путь №2 - добавить условие в выборку(я не знаю как там у вас это делается)
простой и неправильный
PHP
1
unset($arAllItems[$id]); // где $id - индификатор раздела, который надо скрыть
Чуть посложнее и тоже неправильный
PHP
1
2
3
4
$arAllItems = array_filter($arAllItems, function($val, $key) {
    $val = strtolower($val);
    return strpos($val, 'женская одежда') === false;
}, ARRAY_FILTER_USE_BOTH);
0
9 / 9 / 2
Регистрация: 29.05.2011
Сообщений: 524
22.06.2016, 08:22  [ТС] 5
Дело в том, что данный раздел используется для сео, поэтому деактивировать его нельзя.
0
шКодер самоучка
2085 / 1829 / 892
Регистрация: 09.10.2013
Сообщений: 3,991
Записей в блоге: 7
22.06.2016, 08:38 6
Во 2м коде небольшая ошибка - ключ забыл указать
Надо что то вроде
PHP
1
2
3
4
$arAllItems = array_filter($arAllItems, function($val, $key) {
    $val = strtolower($val['TEXT']);
    return strpos($val, 'женская одежда') === false;
}, ARRAY_FILTER_USE_BOTH);
Добавлено через 10 минут
_marisha, Покажите код, как вы получаете этот список
0
9 / 9 / 2
Регистрация: 29.05.2011
Сообщений: 524
22.06.2016, 08:45  [ТС] 7
Первый простой и неправильный вариант не работает.
Распечатка $arAllItems выглядит так:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
[1397152208] => Array
        (
            [TEXT] => ЖЕНСКАЯ ОДЕЖДА
            [LINK] => /catalog/zhenskaya_odezhda/
            [SELECTED] => 
            [PERMISSION] => X
            [ADDITIONAL_LINKS] => Array
                (
                    [0] => /catalog/zhenskaya_odezhda/
                )
 
            [ITEM_TYPE] => D
            [ITEM_INDEX] => 4
            [PARAMS] => Array
                (
                    [FROM_IBLOCK] => 1
                    [IS_PARENT] => 1
                    [DEPTH_LEVEL] => 1
                    [item_id] => 1397152208
                    [picture_src] => 
                    [description] => 
                )
 
            [DEPTH_LEVEL] => 1
            [IS_PARENT] => 1
        )
Добавлено через 2 минуты
_marisha, Покажите код, как вы получаете этот список
Список разделов, которые не нужны?
0
шКодер самоучка
2085 / 1829 / 892
Регистрация: 09.10.2013
Сообщений: 3,991
Записей в блоге: 7
22.06.2016, 08:49 8
_marisha, я та понял ID раздела == 1397152208
Тогда вам нужно было
PHP
1
2
$id = '1397152208';
unset($arAllItems[$id]);
ЗЫ: в редакторе сообщений куча кнопочек для выделения кода, тыкайте в них, не стесняйтесь ;)

Добавлено через 1 минуту
Цитата Сообщение от _marisha Посмотреть сообщение
Список разделов, которые не нужны?
то как вы получаете массив $arAllItems
0
9 / 9 / 2
Регистрация: 29.05.2011
Сообщений: 524
22.06.2016, 08:59  [ТС] 9
Если смотреть ID раздела в административной части сайта, то ID=55.
Массив $arAllItems:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
$arAllItems = array();
foreach($arResult as $key=>$arItem)
{
    if($arItem["DEPTH_LEVEL"] > $arParams["MAX_LEVEL"])
    {
        unset($arResult[$key]);
        continue;
    }
 
    $arItem["PARAMS"]["item_id"] = crc32($arItem["LINK"]);
    $arItem["PARAMS"]["picture_src"] = $arSectionsInfo[$arItem["PARAMS"]["item_id"]]["PICTURE"];
    $arItem["PARAMS"]["description"] = $arSectionsInfo[$arItem["PARAMS"]["item_id"]]["DESCRIPTION"];
 
    if ($arItem["DEPTH_LEVEL"] == "1")
    {
        $arMenuItemsIDs[$arItem["PARAMS"]["item_id"]] = array();
        if ($arItem["IS_PARENT"])
        {
            $curItemLevel_1 = $arItem["PARAMS"]["item_id"];
        }
        $arAllItems[$arItem["PARAMS"]["item_id"]] = $arItem;
    }
    elseif($arItem["DEPTH_LEVEL"] == "2")
    {
        $arMenuItemsIDs[$curItemLevel_1][$arItem["PARAMS"]["item_id"]] = array();
        if ($arItem["IS_PARENT"])
        {
            $curItemLevel_2 = $arItem["PARAMS"]["item_id"];
        }
        $arAllItems[$arItem["PARAMS"]["item_id"]] = $arItem;
    }
    elseif($arItem["DEPTH_LEVEL"] == "3")
    {
        $arMenuItemsIDs[$curItemLevel_1][$curItemLevel_2][] = $arItem["PARAMS"]["item_id"];
        $arAllItems[$arItem["PARAMS"]["item_id"]] = $arItem;
    }
}
Могу прислать весь код данного файла.
0
шКодер самоучка
2085 / 1829 / 892
Регистрация: 09.10.2013
Сообщений: 3,991
Записей в блоге: 7
22.06.2016, 09:11 10
Цитата Сообщение от _marisha Посмотреть сообщение
Массив $arAllItems:
Так значит его вы самостоятельно формируете...
после строки $arItem["PARAMS"]["item_id"] = crc32($arItem["LINK"]); в этом участке добавьте
PHP
1
if ($arItem["PARAMS"]["item_id"] == '1397152208') continue;
Но это тоже неправильный путь...
Правильнее будет добавить фильтр при получении $arResult
Цитата Сообщение от _marisha Посмотреть сообщение
Могу прислать весь код данного файла.
давайте.
0
9 / 9 / 2
Регистрация: 29.05.2011
Сообщений: 524
22.06.2016, 09:20  [ТС] 11
https://yadi.sk/d/XszChEJgshZtX
0
шКодер самоучка
2085 / 1829 / 892
Регистрация: 09.10.2013
Сообщений: 3,991
Записей в блоге: 7
22.06.2016, 10:41 12
Лучший ответ Сообщение было отмечено _marisha как решение

Решение

_marisha, получился следующий костыль
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
$arMenuItemsIDs = array();
$arAllItems = array();
 
/** @var array $hide_items список того, что прячем */
$hide_items = array(
    'ЖЕНСКАЯ ОДЕЖДА'
);
/** @var integer $hide флаг, что нужно спрятать */
$hide = 0;
foreach($arResult as $key=>$arItem)
{
    if($arItem["DEPTH_LEVEL"] > $arParams["MAX_LEVEL"])
    {
        unset($arResult[$key]);
        continue;
    }
 
    $current_id = crc32($arItem["LINK"]);
    $arItem["PARAMS"]["item_id"] = $current_id;
    $arItem["PARAMS"]["picture_src"] = $arSectionsInfo[$current_id]["PICTURE"];
    $arItem["PARAMS"]["description"] = $arSectionsInfo[$current_id]["DESCRIPTION"];
 
    if ($arItem["DEPTH_LEVEL"] == "1")
    {
        $current_text = $arItem["TEXT"];
        $hide = in_array($current_text, $hide_items);
        if ($hide) {
            // текущий элемент в списке для сокрытия
            unset($arSectionsInfo[$current_id]);
            continue;
        }
        $arMenuItemsIDs[$current_id] = array();
        if ($arItem["IS_PARENT"])
        {
            $curItemLevel_1 = $current_id;
        }
        $arAllItems[$current_id] = $arItem;
    }
    else {
        // прячем дочерние пункты меню
        if ($hide) {
            unset($arSectionsInfo[$current_id]);
            continue;
        }
        switch ($arItem["DEPTH_LEVEL"]) {
            case "2":
                $arMenuItemsIDs[$curItemLevel_1][$current_id] = array();
                if ($arItem["IS_PARENT"]) {
                    $curItemLevel_2 = $current_id;
                }
                $arAllItems[$current_id] = $arItem;
                break;
            case "3":
                $arMenuItemsIDs[$curItemLevel_1][$curItemLevel_2][] = $current_id;
                $arAllItems[$current_id] = $arItem;
                break;
        }
    }
}
не проверял.
1
Вложения
Тип файла: 7z result.7z (2.4 Кб, 4 просмотров)
9 / 9 / 2
Регистрация: 29.05.2011
Сообщений: 524
22.06.2016, 11:34  [ТС] 13
Cra3y, В таком случае пропадает всё меню =)

Добавлено через 3 минуты
А вот так
Цитата Сообщение от Cra3y Посмотреть сообщение
после строки $arItem["PARAMS"]["item_id"] = crc32($arItem["LINK"]); в этом участке добавьте
if ($arItem["PARAMS"]["item_id"] == '1397152208') continue;
работает без проблем =)
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.06.2016, 11:34

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Как создать разделы в меню
Господа, честно даже стыдно писать. Сложнейшие части кода будущей программы написаны(в C#, WPF), а...

Активировать разделы и элементы из меню каталога
Помогите у нас сайте по какой-то причине из меню каталога не открываются ни разделы ни элементы?

в выдаче только разделы сайта
Вопрос к бывалым Гуру после недели простоя сервера сайт полностью вылетел из выдачи яндекса, в...

Как скрыть пустые разделы в меню битрикс?
Меню вывожу так <?$APPLICATION->IncludeComponent( "bitrix:menu", "vertical_multilevel",...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.