We launched new forums in March 2019—join us there. In a hurry for help with your website? Get Help Now!
    • 2180
    • 22 Posts
    Задался вопросом умно вывести с помощью wayfinder в revolution меню в несколько колонок.

    Искал решение в сети, но к сожалению решения для MODx найти не удалось. Был вариант сделать на jquery, но решил сделать умнее.
    Написал небольшой сниппет, который считает количество основных пунктов меню, разбивает его на колонки и затем делает соответствующие вызовы wayfinder с параметром includeDocs. Может кому-то пригодится. С помощью этого сниппета можно удобно вывести каталог в несколько колонок, чтобы равномерно распределить пространство на странице.

    Сниппет выводит меню в 2 уровня.

    $id=3; // ID категории каталога
    $columns=3; //Количество колонок

    $ids = $modx->getChildIds($id,1); //Получаем id документов 1 уровня из категориии каталога
    $ids_kolvo = count($ids); //считаем количество документов
    $incol = ceil($ids_kolvo/$columns); //Делим на кол-во колонок и получаем округленное значение документов в колонке
    $parent_numb = 0; // заводим переменную для массива доков 1 уровня


    // Для каждой колонки...
    for($col=1; $col <= $columns; $col++) {

    $a = ""; // ...создаем пустую переменную $a или обнуляем ее


    //Для каждого пункта меню в данной колонке...
    for($i=0; $i < $incol; $i++) {

    $parent_id = $ids[$parent_numb]; // ...получаем id...
    $childs = $modx->getChildIds($parent_id,1);// ...берем дочерние ресурсы...
    $kolvo = count($childs); // ..считаем их...
    $k = 0; //.. создаем переменную для счетчика...


    //id каждого пункта меню второго уровня...
    for($r = 0; $r <= $kolvo; $r++){

    $a .= $childs[$k].’,’; //...пишем в массив через запятую...
    $k++; //...прибавляя счетчик.

    }

    $a .= $ids[$parent_numb].’,’; // Добавляем в конце родительскую категорию, через запятую
    $parent_numb++; // Переходим к следующему пункту меню 1 уровня

    }

    $output = $modx->runSnippet(’Wayfinder’, array(’includeDocs’ => $a)); // Для каждой колонки вызываем wayfinder включая документы только для этой колонки

    echo "<div class=\"column-wrap\">".$output."</div>"; //Выводим результаты работы вейфайндера обрамленные в div



    В итоге получаем 3 div с классом .column-wrap, в каждом из которых свой кусок двухуровневого меню сгенерированный wayfinder-ом.


    http://orbita.exitstudio.ru/blog/modx/7.html