Вход • Регистрация

Добавить количество товаров в меню магазина

  • 03 июля 2014 г.
  • Как сделать вот такой вид меню, может кто уже делал?

    Мойки (20)
    Смесители (4)

    где в скоюках количество товаров в категории
    • 03 июля 2014 г.
    • Присоединяюсь к вопросу Как раз тоже возникла необходимость в этом.
    • 03 июля 2014 г.
    • Для категории. Добавить в шаблон меню:

      Код
      if($row["module_name"] == 'shop' && $row["element_type"] == 'cat')
      {
      echo ' (' . DB::query_result("SELECT COUNT(*) FROM {shop} WHERE cat_id=%d", $row["element_id"]) . ')';
      }
      • 03 июля 2014 г.
      • Цитата
        Добавить в шаблон меню

        Цитата
        DB::query_result


        • 05 июля 2014 г.
        • Нагибаем ресурсы лучше дороботать уже имеющиеся запросы к бд. Если есть поле в котором хранится количество деток то вообще красота добавляем в получаемый результат его и записываем в массив.
          • 06 июля 2014 г.
          • можно пример в студию?
            • 07 июля 2014 г.
            • Файл /modules/menu/menu.model.php, функция public function show_block($id)

              Можно изменить запрос таким образом, добавив подзапрос к таблице shop:
              Код
              $this->result["rows"] = DB::query_fetch_key_array(
              "SELECT m.id, m.[name], m.module_name, m.element_type, m.element_id, m.parent_id, m.othurl, m.attributes, m.target_blank, COUNT(s.id) AS count FROM {menu} AS m"
              .($this->diafan->_users->role_id ? " LEFT JOIN {access} AS a ON a.element_id=m.element_id AND a.module_name=m.module_name AND a.element_type=m.element_type" : "")
              ." LEFT JOIN {shop} AS s ON m.module_name = 'shop' AND m.element_type = 'cat' AND s.cat_id = m.element_id"
              ." WHERE m.cat_id=%d AND m.[act]='1' AND m.trash='0'"
              ." AND m.date_start<=%d AND (m.date_finish=0 OR m.date_finish>=%d)"
              ." AND (m.access='0'"
              .($this->diafan->_users->role_id ? " OR m.access='1' AND a.role_id=".$this->diafan->_users->role_id : '')
              .")"
              ." GROUP BY m.id ORDER BY m.sort ASC, m.id ASC",
              $id, $time, $time, "parent_id"
              );
  • 02 сентября 2014 г. , редакция: 03 сентября 2014 г.
  • Тема как вижу заглохла

    Но совсем недавно, нам довелось реализовать эту задачу на парочке сайтов, причем на разных версиях CMS, а именно версиях 5.3 и 5.4

    Поэтому спешу поделиться с вами данным решением.

    Для подсчета можно воспользоваться методом get_count_in_cat, определенном в Shop_model, только нужно предварительно изменить его модификатор доступа с private на public

    Теперь в Menu_model в методе Show_block ищем два вложенных цикла, в которых перебираются все пункты меню (строка 80):

    Код
    foreach ($this->result["rows"] as $parent_id => &$rows)
    {
    foreach ($rows as &$row)
    {


    перед циклами создаем модель магазина:

    Код

    $shopModel = new Shop_model($this->diafan);


    теперь во внутреннем цикле можно получить количество товаров для каждого пункта меню, в итоге вот как это выглядит:

    Код

    Custom::inc('modules/shop/shop.model.php');
    $shopModel = new Shop_model($this->diafan);
    foreach ($this->result["rows"] as $parent_id => &$rows)
    {
    foreach ($rows as &$row)
    {
    if($row['module_name']=='shop' && $row['element_type']=='cat') {
    $chn = $this->diafan->get_children($row["element_id"], "shop_category");
    $chn[] = $row["element_id"];
    $row["count"] = $shopModel->get_count_in_cat($chn, $time);
    }
    ...


    В шаблоне меню выводим:

    Код
    // название пункта меню
    if (! empty($row["name"]))
    {
    echo $row["name"].($row['module_name']=='shop' ? ' ('.$row['count'].')' : '');
    }


    Это было для версии 5.4.


    Для 5.3 код в Menu_model будет несколько отличаться. Здесь нам нужен цикл while на строке 90

    Код

    Customization::inc('modules/shop/shop.model.php');
    $shopModel = new Shop_model($this->diafan);
    while ($row = DB::fetch_array($result))
    {
    if ($row["module_name"] == "site")
    {
    $this->diafan->_route->prepare('site', $row["site_id"]);
    }
    else
    {
    if($row['module_name']=='shop') {
    $chn = $this->diafan->get_children($row["module_cat_id"], "shop_category");
    $chn[] = $row["module_cat_id"];
    $row["count"] = $shopModel->get_count_in_cat($chn, $time);
    }
  • 13 апреля 2015 г.
  • Подскажите, куда это все вводить? Дело в том, что я вообще в этом не волоку(
    поподробней, если не сложно. Буду премного благодарен!
    • 14 апреля 2015 г.
    • судя по описанию первые три блока надо вывести в menu.model.php
      а 4й блок с кодом в menu.view.show_level_topmenu.php, к примеру
  • 25 октября 2015 г.
  • Сделали данную доработку в виде free дополнения http://addons.diafan.ru/modules/modules-and-services/kolichestvo-tovarov-v-menyu/

    • 02 февраля 2016 г.
    • Скачал вашу доработку закачал на сайт, в админке есть а на сайте в меню не выводит, шаблон стандартный 5.4, в чем может быть проблема?
      • 02 февраля 2016 г.
      • Думаю, что в этом:
        Цитата
        В дополнении находиться модифицированный шаблон меню menu.view.show_block_leftmenu.php, для вывода количества в других шаблонах меню, вам необходимо самостоятельно добавить туда вывод $row['count']
        • 03 февраля 2016 г.
        • Странно заработало все само, в админке сразу заработало а на сайте через 8 часов примерно с чем связанно так и не понял, честно говоря.
          • 03 февраля 2016 г.
          • Кэш браузера или кэширование cms
            • 03 февраля 2016 г.
            • Редко причиной может стать акселератор PHP и его настройка на хостинге (OPcache, xcache). И очень редко (но тоже натыкался) этому может поспособствовать неправильная настройка временной зоны на сервере. Хотя последнее относилось только к публикации статей (появлялись с задержкой).
              • 03 февраля 2016 г. , редакция: 03 февраля 2016 г.
              • Ключевые слова:
                Цитата
                заработало а на сайте через 8 часов примерно

                Цитата
                Редко причиной может стать

                А какие причины могут влиять на временной интервал обновления информации?
                Цитата
                Кэш браузера или кэширование cms

                Или кэш сервера.
                Цитата
                OPcache, xcache

                и т.п.

                Есть, конечно, и другие причины. Но Вы и я не экстрасенсы, чтобы дать ответ не видя сам сервак. Поэтому мы лишь предполагаем.

                Цитата
                неправильная настройка временной зоны на сервере. Хотя последнее относилось только к публикации статей (появлялись с задержкой).

                Если действовать относительно выставленной временной зоны, то задержки не будет
    • 02 февраля 2016 г.
    • Скачал вашу доработку закачал на сайт, в админке есть а на сайте в меню не выводит, шаблон стандартный 5.4, в чем может быть проблема?

Новости

  • 18 июня
  • В сборке большое обновление demo-шаблона, дополнительная защита от спама, улучшение YML-импорта и еще много важного и интересного.
  • 24 апреля
  • В новой сборке совершили революцию в структурировании кастомизированной информации в шаблонах, добавили авторегистрацию пользователей, усовершенствовали защиту от спама, актуализировали накопительную скидку, а также улучшили производительность и стабильность работы системы.
  • 12 января
  • После выхода сборки 7.1 мы выпустили уже три патча, в каждом из которых улучшаем административную часть сайта. Сборка DIAFAN.CMS 7.1.3 уже доступна к установке. 

Форум