Новости Joomla

0 Пользователей и 1 Гость просматривают эту тему.
  • 19 Ответов
  • 4306 Просмотров
*

Arthmost

  • Осваиваюсь на форуме
  • 34
  • 0 / 0
Добрый день. Вебсайт jaluzor.ru - очень интересует, как можно сделать так, чтобы 1-й уровень подкатегорий был всегда виден в меню слева. Там сейчас только 4 позиции, я где-то читал, что можно все дерево развернуть, а можно ли как-то сделать развернутым на постоянной основе только 1-й уровень подкатегорий?
Спасибо.
*

dmayak

  • Захожу иногда
  • 80
  • 5 / 0
А на основе какого модуля сделано меню? В стандартном меню Joomla можно поставить отображаемую глубину вложенности, оно будет одинаково везде, у тебя на сайте меню формируется отдельно для страниц, на странице категории к нему добавляется список подкатегорий, на остальных ничего нет, тоесть разворачивать там нечего. Если разбираешься, открой контроллер модуля и посмотри какое условие формирует список пунктов.
*

Arthmost

  • Осваиваюсь на форуме
  • 34
  • 0 / 0
А на основе какого модуля сделано меню? В стандартном меню Joomla можно поставить отображаемую глубину вложенности, оно будет одинаково везде, у тебя на сайте меню формируется отдельно для страниц, на странице категории к нему добавляется список подкатегорий, на остальных ничего нет, тоесть разворачивать там нечего. Если разбираешься, открой контроллер модуля и посмотри какое условие формирует список пунктов.
Это модуль JoomShopping categories, меню в общем-то я не "делал", я просто включил этот модуль.
*

dmayak

  • Захожу иногда
  • 80
  • 5 / 0
Ясно, ну собственно так он и должен работать, вот его код, который формирует список:
Код
$category_id = JRequest::getInt('category_id');  //получает из URL id текущей категории
    $category = JTable::getInstance('category', 'jshop');       
    $category->load($category_id); //получает из базы по id её название
    $categories_id = $category->getTreeParentCategories(); //получает из базы подкатегории текущей категории
    $categories_arr = jShopCategoriesHelper::getCatsArray($field_sort, $ordering, $category_id, $categories_id); //получает список категорий, если есть текущая то подтягивается и список её подкатегорий.
Тоесть подкатегории добавляются в список только для той категории, для которой указан в урле id.
Тебе или надо чтобы тянулись подкатегории всех категорий, тоесть не получать категорию из URL, а вытягивать список категорий и подкатегорий из базы, или если не знаком с программированием, создать еще одно обычное меню в Joomla, там поделать пункты для категорий и подкатегорий и разместить вместо этого модуля.
*

Arthmost

  • Осваиваюсь на форуме
  • 34
  • 0 / 0
Ясно, ну собственно так он и должен работать, вот его код, который формирует список:
Код
$category_id = JRequest::getInt('category_id');  //получает из URL id текущей категории
    $category = JTable::getInstance('category', 'jshop');       
    $category->load($category_id); //получает из базы по id её название
    $categories_id = $category->getTreeParentCategories(); //получает из базы подкатегории текущей категории
    $categories_arr = jShopCategoriesHelper::getCatsArray($field_sort, $ordering, $category_id, $categories_id); //получает список категорий, если есть текущая то подтягивается и список её подкатегорий.
Тоесть подкатегории добавляются в список только для той категории, для которой указан в урле id.
Тебе или надо чтобы тянулись подкатегории всех категорий, тоесть не получать категорию из URL, а вытягивать список категорий и подкатегорий из базы, или если не знаком с программированием, создать еще одно обычное меню в Joomla, там поделать пункты для категорий и подкатегорий и разместить вместо этого модуля.

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

Так создание еще одного меню в Joomla будет в главном меню, как я понимаю? Там, в принципе, уже есть такое ("продукция" называется), куда выводится как раз из самого плагина JoomShopping, опять же, 4 главные категории. Но меня интересует именно древообразное меню в левой части страницы с открытым первым уровнем подкатегорий..
*

dmayak

  • Захожу иногда
  • 80
  • 5 / 0
Нет, не в уже имеющееся меню подпункты добавляете, а в менеджере меню новое меню создаете, потом создаете модуль типа "меню" (такой же как для основного меню), и ставите его в позицию где нужно, потом еще стили подправить надо будет и готово, единственный минус - надо будет изменения в категориях вручную добавлять.
*

Arthmost

  • Осваиваюсь на форуме
  • 34
  • 0 / 0
Нет, не в уже имеющееся меню подпункты добавляете, а в менеджере меню новое меню создаете, потом создаете модуль типа "меню" (такой же как для основного меню), и ставите его в позицию где нужно, потом еще стили подправить надо будет и готово, единственный минус - надо будет изменения в категориях вручную добавлять.

Стал пробовать делать, как Вы говорите, но пока не выходит. Создал еще одно меню кроме главного, засунул его в левую часть, но появилось два но. Во-первых, если я выбираю тип меню и категорию джумшопинга, то он выводит мне корень из 4-х категорий. Как мне сделать чтобы он выводил подкорень только одной из них, ума не приложу. Во-вторых, слева от пунктов этого нового меню везде логотип сайта появился, можно его убрать как-то?

Спасибо!
*

dmayak

  • Захожу иногда
  • 80
  • 5 / 0
Не совсем понял, какой тип меню вы выбираете, потестил на своем сайте только что: создаю пункт меню Joomshopping: категории, в обязательных параметрах выбираю Show->Category or Manufacturer or StaticPage, ниже вписываю Category ID->айди нужной категории, и все, создается только один пункт меню где отображается именно эта нужная категория, так же для остальных категорий и подкатегой. Насчет логотипа рядом - смотрите стили, через FireBug или стандартные средства разработки браузера, это скорее всего псевдоэлемент before или after привязан к классу, используемому в меню.
*

Arthmost

  • Осваиваюсь на форуме
  • 34
  • 0 / 0
Вроде начинаю разбираться, спасибо. Есть возможность открыть сайт?
Спойлер
[свернуть]
Смотрите, слева сверху меню джумшоппинга, с которым ничего не сделать, а ниже мое, которое я от руки прописываю. Значит, вопрос следующий. А как мне сделать так, чтобы допустим, первый уровень подкатегорий был виден (это я знаю, как), а вот второй и третий и т.д. были видны в меню слева только когда пользователь нажимает на подкатегорию первого уровня?
А, и еще беда. При открытии меню "жалюзи" у меня почему-то корень категорий вылезает, хотя айдишник я именно этого меню указал отдельный. Почему так происходит?

Логотип рядом с каждой позицией меню нашел в template.css, но не пойму как от него избавиться. Закомментил картинку в этом блоке, но эффекта 0..
Код
.art-blockcontent-body ul li
{
   text-decoration: none;
   color: #696969;
   padding: 0 0 0 21px;
   /*background-image: url('../images/blockcontentbullets.png');
   background-repeat: no-repeat;
   background-position: top left;*/
}
« Последнее редактирование: 23.09.2013, 19:55:09 от Arthmost »
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
Только средством CSS и стандартного меню Joomla не добьетесь результата. Если разбираетесь в PHP, то изучите код модуля. Самое главное - массив данных товаров. От него зависит, какие категории будут загружены (раскрыты), а он динамический.
Не будь паразитом, сделай что-нибудь самостоятельно!
*

dmayak

  • Захожу иногда
  • 80
  • 5 / 0
Смотрите, слева сверху меню джумшоппинга, с которым ничего не сделать, а ниже мое, которое я от руки прописываю. Значит, вопрос следующий. А как мне сделать так, чтобы допустим, первый уровень подкатегорий был виден (это я знаю, как), а вот второй и третий и т.д. были видны в меню слева только когда пользователь нажимает на подкатегорию первого уровня?
Насколько я понял, вы хотите чтобы они разворачивались? Тоесть пользователь жмет на первый уровень и ему все на той же странице показываются остальные. Это делается с помощью опять же стилей:
скрываете подпункты по умолчанию - .parent ul{display:none;}
подпункты активного меню показываете - .parent.active ul{display:block;}
затем, чтобы они разворачивались/сворачивались без перехода на новую страницу, добавляете JavaScript, который будет просто менять класс элементу на который нажимает пользователь, что-то типа: jQuery('.parent>a').click(function(){jQuery(this).parent().toggleClass('active');return false;}); и у корневого пункта будет появляться и исчезать класс active, соответственно подкатегории будут сворачиваться/разворачиваться.
А, и еще беда. При открытии меню "жалюзи" у меня почему-то корень категорий вылезает, хотя айдишник я именно этого меню указал отдельный. Почему так происходит?
Проверьте в настройках пункта меню в Show должно стоять что я писал раньше а не all, при all всегда выводятся все категории.
Логотип рядом с каждой позицией меню нашел в template.css, но не пойму как от него избавиться. Закомментил картинку в этом блоке, но эффекта 0..
Код
.art-blockcontent-body ul li
{
   text-decoration: none;
   color: #696969;
   padding: 0 0 0 21px;
   /*background-image: url('../images/blockcontentbullets.png');
   background-repeat: no-repeat;
   background-position: top left;*/
}
А сохранили то что закомментировали? Потому что да, это тот стиль и он все там же, активный.
*

Arthmost

  • Осваиваюсь на форуме
  • 34
  • 0 / 0
Насколько я понял, вы хотите чтобы они разворачивались? Тоесть пользователь жмет на первый уровень и ему все на той же странице показываются остальные. Это делается с помощью опять же стилей:
скрываете подпункты по умолчанию - .parent ul{display:none;}
подпункты активного меню показываете - .parent.active ul{display:block;}
затем, чтобы они разворачивались/сворачивались без перехода на новую страницу, добавляете JavaScript, который будет просто менять класс элементу на который нажимает пользователь, что-то типа: jQuery('.parent>a').click(function(){jQuery(this).parent().toggleClass('active');return false;}); и у корневого пункта будет появляться и исчезать класс active, соответственно подкатегории будут сворачиваться/разворачиваться.Проверьте в настройках пункта меню в Show должно стоять что я писал раньше а не all, при all всегда выводятся все категории.А сохранили то что закомментировали? Потому что да, это тот стиль и он все там же, активный.

А Вы не могли бы пояснить где именно прописывать то, что в первой части Вашего сообщения?
По поводу разворачивания - нужно, чтобы при нажатии на подкатегорию первого уровня соотв-но после загрузки нужной страницы было развернуто меню подкатегорий 2-го уровня (а изначально спрятано). Соответственно, при нажатии на подкатегорию второго уровня - чтобы после загрузки было развернуто 3-го и т.д.

Картинку - да, сохранил, конечно. Видимо там не все так просто..
*

dmayak

  • Захожу иногда
  • 80
  • 5 / 0
Код
.parent ul{display:none;}
.parent.active ul{display:block;}
стили, вставляете в .css, в тот же ваш template.css
Код
jQuery('.parent>a').click(function(){jQuery(this).parent().toggleClass('active');return false;});
JavaScript, вставлять в .js файл шаблона.
По поводу разворачивания - нужно, чтобы при нажатии на подкатегорию первого уровня соотв-но после загрузки нужной страницы было развернуто меню подкатегорий 2-го уровня (а изначально спрятано). Соответственно, при нажатии на подкатегорию второго уровня - чтобы после загрузки было развернуто 3-го и т.д.
Извините, но я что-то перестал понимать, что вы хотите сделать, потому что модуль категорий как раз и делает то, что вы описали: разворачивает подкатегории для той категории, куда вы зашли. Меню с теми стилями что я описал выше, будет делать то же самое:  .parent ul{display:none;} скрывает все подкатегории, а .parent.active ul{display:block;} отменяет предыдущее для пункта с классом active, а Joomla ставит класс active текущим пунктам меню: тоесть если зайдете на страницу жалюзи, то у этого пункта меню будет класс active. Для того что вы описали, JavaScript не нужен, можете его не вставлять: он нужен если вы хотите сворачивать/разворачивать меню, не переходя на новую страницу.
*

dmayak

  • Захожу иногда
  • 80
  • 5 / 0
Картинку - да, сохранил, конечно. Видимо там не все так просто..
Не картинку, а .css файл, и если вы его скачали и редактировали, то могли забыть залить обратно, или у вас нет прав на запись, или надо почистить кеш в Joomla.
*

Arthmost

  • Осваиваюсь на форуме
  • 34
  • 0 / 0
Код
.parent ul{display:none;}
.parent.active ul{display:block;}
стили, вставляете в .css, в тот же ваш template.css
Код
jQuery('.parent>a').click(function(){jQuery(this).parent().toggleClass('active');return false;});
JavaScript, вставлять в .js файл шаблона.Извините, но я что-то перестал понимать, что вы хотите сделать, потому что модуль категорий как раз и делает то, что вы описали: разворачивает подкатегории для той категории, куда вы зашли. Меню с теми стилями что я описал выше, будет делать то же самое:  .parent ul{display:none;} скрывает все подкатегории, а .parent.active ul{display:block;} отменяет предыдущее для пункта с классом active, а Joomla ставит класс active текущим пунктам меню: тоесть если зайдете на страницу жалюзи, то у этого пункта меню будет класс active. Для того что вы описали, JavaScript не нужен, можете его не вставлять: он нужен если вы хотите сворачивать/разворачивать меню, не переходя на новую страницу.

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

Я вообще не в каком-то файле правки делал (не качал ничего), а в настройках шаблона в ПУ Joomla в файле template.css закомментил эту картинку. Кэш очистил, она по-прежнему там висит (меню спрятано пока в разработке находится, я включил, проверил и выключил его).
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
Arthmost, я прочитал все 7 ваших постов, но так и не очень понял, чего вы хотите.
Код
А0
-С1
--H2
-D1
--I2
B0
-E1
--J2
-G1
--K2
Вы хотите, чтобы все пункты с номером 1 всегда были видны. При нажатии на любой пункт с номером 1 все пункты с номером 2 должны быть раскрыты. И так далее с номером 2, 3... Так, что ли?
« Последнее редактирование: 24.09.2013, 23:08:17 от robert »
Не будь паразитом, сделай что-нибудь самостоятельно!
*

Arthmost

  • Осваиваюсь на форуме
  • 34
  • 0 / 0
Arthmost, я прочитал все 7 ваших постов, но так и не очень понял, чего вы хотите.
Код
А0
-С1
--H2
-D1
--I2
B0
-E1
--J2
-G1
--K2
Вы хотите, чтобы все пункты с номером 1 всегда были видны. При нажатии на любой пункт с номером 1 все пункты с номером 2 должны быть раскрыты. И так далее с номером 2, 3... Так, что ли?

Все верно, только не абсолютно все пункты с номером 2, а те, которые отвечают именно своим пунктам под номером один.
*

Efanych

  • Глобальный модератор
  • 4684
  • 644 / 0
  • Меняю свою жизнь на 360°!
Попробуйте так...
[spoiler title=Полное содержимое helper.php]<?php
class jShopCategoriesHelper{
    
    function getTreeCats($order, $ordering, $category_id, $categories_id, &$categories, $level=0){
        $cat = &JTable::getInstance('category', 'jshop');
        $cat->category_parent_id = 0;
        $cats = $cat->getSisterCategories($order, $ordering);
        foreach($cats as $key=>$value){
            $cats[$key]->level = $level;
            $categories[] = $value;
            jShopCategoriesHelper::getTreeCats2($order, $ordering, $value->category_id, $categories_id, $categories, $level);
        }
    }
    
    function getTreeCats2($order, $ordering, $category_id, $categories_id, &$categories, $level){
        ++$level;
        $cat = &JTable::getInstance('category', 'jshop');
        $cat->category_id = $category_id;
        $cats = $cat->getChildCategories($order, $ordering);
        foreach($cats as $key=>$value){
            $cats[$key]->level = $level;
            $categories[] = $value;
         if (in_array($value->category_id, $categories_id)){
            jShopCategoriesHelper::getTreeCats2($order, $ordering, $value->category_id, $categories_id, $categories, $level);
         }
        }
    }

    function getCatsArray($order, $ordering, $category_id, $categories_id = array()){
       $res_arr = array();
       jShopCategoriesHelper::getTreeCats($order, $ordering, $category_id, $categories_id, $res_arr, 0);
       return $res_arr;
    }
    
}
?>[/spoiler]

Взято отсюда mod_jshopping_categories Как показать все подкатегории?
Создание сайтов, шаблонов, помощь в решении проблем.
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
Все верно, только не абсолютно все пункты с номером 2, а те, которые отвечают именно своим пунктам под номером один.
Делал что-то подобное, только пункты с номером 2 - бренды. Можно посмотреть на donna-doni точка ru.
Не будь паразитом, сделай что-нибудь самостоятельно!
*

Arthmost

  • Осваиваюсь на форуме
  • 34
  • 0 / 0
Попробуйте так...
[spoiler title=Полное содержимое helper.php]<?php
class jShopCategoriesHelper{
   
    function getTreeCats($order, $ordering, $category_id, $categories_id, &$categories, $level=0){
        $cat = &JTable::getInstance('category', 'jshop');
        $cat->category_parent_id = 0;
        $cats = $cat->getSisterCategories($order, $ordering);
        foreach($cats as $key=>$value){
            $cats[$key]->level = $level;
            $categories[] = $value;
            jShopCategoriesHelper::getTreeCats2($order, $ordering, $value->category_id, $categories_id, $categories, $level);
        }
    }
   
    function getTreeCats2($order, $ordering, $category_id, $categories_id, &$categories, $level){
        ++$level;
        $cat = &JTable::getInstance('category', 'jshop');
        $cat->category_id = $category_id;
        $cats = $cat->getChildCategories($order, $ordering);
        foreach($cats as $key=>$value){
            $cats[$key]->level = $level;
            $categories[] = $value;
         if (in_array($value->category_id, $categories_id)){
            jShopCategoriesHelper::getTreeCats2($order, $ordering, $value->category_id, $categories_id, $categories, $level);
         }
        }
    }

    function getCatsArray($order, $ordering, $category_id, $categories_id = array()){
       $res_arr = array();
       jShopCategoriesHelper::getTreeCats($order, $ordering, $category_id, $categories_id, $res_arr, 0);
       return $res_arr;
    }
   
}
?>[/spoiler]

Взято отсюда mod_jshopping_categories Как показать все подкатегории?

Огромное спасибо, именно то, что я искал и без танцев с бубном, просто код нужно было заменить старый в хелпер.пхп! Самое интересное, что я как-то просматривал ту тему, но увидев там коды решил, что это все эксперименты и рабочий вариант так и не найден.

robert, да, на Вашем сайте как раз, как мне нужно было!

dmayak, спасибо и Вам большое за труды, Вашу методику не успел опробовать, более простое и быстрое решение нашлось!
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться