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

Yulo

Постоялец
Регистрация
21 Апр 2008
Сообщения
153
Реакции
179
Задача думаю очень простая для тех кто знаком с php/ Вот код который выводит меню нужной иерархии

PHP:
<?if (!empty($arResult)){

        $i = 0;
        $b = 0;

    foreach($arResult as $arElement){

        if($arElement["DEPTH_LEVEL"] == 1){
            $i++;
            $sectionID = $arElement["PARAMS"]["ID"];
            $IBLOCK_ID = $arElement["PARAMS"]["IBLOCK_ID"];
            $arResult["SECTIONS"][$sectionID] = $sectionID;
            $arResult["ITEMS"][$i] = array(
                "TEXT" => $arElement["TEXT"],
                "LINK" => $arElement["LINK"],
                "ID" => $arElement["PARAMS"]["ID"],
                "SELECTED" => $arElement["SELECTED"],
                "PICTURE" => $arElement["PARAMS"]["PICTURE"],
                "DETAIL_PICTURE" => $arElement["PARAMS"]["DETAIL_PICTURE"],
                "UF_DESC" => $arElement["PARAMS"]["UF_DESC"],
                "IBLOCK_ID" => $arElement["PARAMS"]["IBLOCK_ID"],
                "ELEMENT_CNT" => $arElement["PARAMS"]["ELEMENT_CNT"]
            );
        }

        elseif($arElement["DEPTH_LEVEL"] == 2){
            $b++;
            $from = $arElement["PARAMS"]["FROM_IBLOCK"] <= 100 ? 1 : 2;
            $arResult["SECTIONS"][$arElement["PARAMS"]["ID"]] = $sectionID;
            $arResult["ITEMS"][$i]["ELEMENTS"][$from][$b] = array(
                "TEXT" => $arElement["TEXT"],
                "LINK" => $arElement["LINK"],
                "SELECTED" => $arElement["SELECTED"],
                "ELEMENT_CNT" => $arElement["PARAMS"]["ELEMENT_CNT"]
            );
        }elseif($arElement["DEPTH_LEVEL"] == 3){
            $arResult["SECTIONS"][$arElement["PARAMS"]["ID"]] = $sectionID;
            $arResult["ITEMS"][$i]["ELEMENTS"][$from][$b]["ELEMENTS"][] = array(
                "TEXT" => $arElement["TEXT"],
                "LINK" => $arElement["LINK"],
                "SELECTED" => $arElement["SELECTED"],
                "ELEMENT_CNT" => $arElement["PARAMS"]["ELEMENT_CNT"]
            );
        }

    }
}
?>

У элементов меню есть порядковый номер 1,2,..50..129..241.. и т.д. Я так понял что вот этот кусок кода
PHP:
 $from = $arElement["PARAMS"]["FROM_IBLOCK"] <= 100 ? 1 : 2;
выводит мне сейчас меню в 2 колонки, если у элелемента стоит номер меньше или равно 100 он в одну колонку идет если больше то уже в другую. Как подправить этот код чтоб я мог поделить меню на 4 колонки тоесть если я проставлю элементам номера меньше 100 от 101-200 от 201-300 и 301-400.
Вот кусок кода в шаблоне

PHP:
<?if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();?>
<?$this->setFrameMode(true);?>
<?if (!empty($arResult)):?>
    <ul id="leftMenu">
        <?foreach($arResult["ITEMS"] as $nextElement):?>
            <li<?if($nextElement["SELECTED"]):?> class="selected"<?endif;?>><a href="<?=$nextElement["LINK"]?>"><ins><?=(!empty($nextElement["PICTURE"]["src"]) ? '<img src="'.$nextElement["PICTURE"]["src"].'" alt="">' : '')?><span><?=$nextElement["TEXT"]?></span></ins></a>
                <div class="drop">
                    <?if(count($nextElement["ELEMENTS"][1])):?>
                        <ul>
                            <?foreach($nextElement["ELEMENTS"][1] as $next2Elements):?>
                                <li><a href="<?=$next2Elements["LINK"]?>"><span><?=$next2Elements["TEXT"]?></span></a></li>
                                    <?if(!empty($next2Elements["ELEMENTS"])):?>
                                        <?foreach($next2Elements["ELEMENTS"] as $next3Elements):?>
                                            <li><a href="<?=$next3Elements["LINK"]?>"><?=$next3Elements["TEXT"]?></a></li>
                                        <?endforeach;?>
                                    <?endif;?>
                            <?endforeach?>
                        </ul>
                    <?endif;?>
                    <?if(count($nextElement["ELEMENTS"][2])):?>
                        <ul>
                            <?foreach($nextElement["ELEMENTS"][2] as $next2Elements):?>
                                <li><a href="<?=$next2Elements["LINK"]?>"><span><?=$next2Elements["TEXT"]?></span></a></li>
                                    <?if(!empty($next2Elements["ELEMENTS"])):?>
                                        <?foreach($next2Elements["ELEMENTS"] as $next3Elements):?>
                                            <li><a href="<?=$next3Elements["LINK"]?>"><?=$next3Elements["TEXT"]?></a></li>
                                        <?endforeach;?>
                                    <?endif;?>
                            <?endforeach?>
                        </ul>
                    <?endif;?>
                    <?if(!empty($nextElement["DETAIL_PICTURE"])):?>
                    <ol>
                        <li><span><?=$nextElement["TEXT"]?></span></li>
                        <li><a href="<?=$nextElement["LINK"]?>" class="pic"><img src="<?=$nextElement["DETAIL_PICTURE"]["src"]?>" alt="<?=$nextElement["TEXT"]?>"></a></li>
                        <?=str_replace("#SITE_DIR#", SITE_DIR, $nextElement["UF_DESC"])?>
                    </ol>
                    <?endif;?>
                </div>
            </li>
        <?endforeach;?>
    </ul>
<?endif?>
 
Все верно, $from = $arElement["PARAMS"]["FROM_IBLOCK"] <= 100 ? 1 : 2; - определяет одну из 2х колонок.
Нужно поменять на:
Код:
$from = $arElement["PARAMS"]["FROM_IBLOCK"] <= 100 ? 1 :
       ($arElement["PARAMS"]["FROM_IBLOCK"] > 100 && $arElement["PARAMS"]["FROM_IBLOCK"] <= 200 ? 2 :
       ($arElement["PARAMS"]["FROM_IBLOCK"] > 200 && $arElement["PARAMS"]["FROM_IBLOCK"] <= 300 ? 3 : 4 ));
а в шаблоне перед <?if(!empty($nextElement["DETAIL_PICTURE"])) добавить
Код:
                    <?if(count($nextElement["ELEMENTS"][3])):?>
                        <ul>
                            <?foreach($nextElement["ELEMENTS"][3] as $next2Elements):?>
                                <li><a href="<?=$next2Elements["LINK"]?>"><span><?=$next2Elements["TEXT"]?></span></a></li>
                                    <?if(!empty($next2Elements["ELEMENTS"])):?>
                                        <?foreach($next2Elements["ELEMENTS"] as $next3Elements):?>
                                            <li><a href="<?=$next3Elements["LINK"]?>"><?=$next3Elements["TEXT"]?></a></li>
                                        <?endforeach;?>
                                    <?endif;?>
                            <?endforeach?>
                        </ul>
                    <?endif;?>
                    <?if(count($nextElement["ELEMENTS"][4])):?>
                        <ul>
                            <?foreach($nextElement["ELEMENTS"][4] as $next2Elements):?>
                                <li><a href="<?=$next2Elements["LINK"]?>"><span><?=$next2Elements["TEXT"]?></span></a></li>
                                    <?if(!empty($next2Elements["ELEMENTS"])):?>
                                        <?foreach($next2Elements["ELEMENTS"] as $next3Elements):?>
                                            <li><a href="<?=$next3Elements["LINK"]?>"><?=$next3Elements["TEXT"]?></a></li>
                                        <?endforeach;?>
                                    <?endif;?>
                            <?endforeach?>
                        </ul>
                    <?endif;?>
 
Последнее редактирование:
  • Нравится
Реакции: Yulo
Назад
Сверху