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

Товары с 0 количеством

  • 17 сентября 2014 г.
  • Доброго дня!
    Может кто делал - как сделать так, чтобы товары, которых нет в наличии не были видны в магазине вообще. Нужно отображать только доступное. Все перерыл- ничего не нашел
    Спасибо
    • 17 сентября 2014 г.
    • Не самый оптимизированный вариант, но рабочий )

      В файле shop.view.list.php в цикле "вывод списка товаров" сделать проверку

      Код
      if ( $row['count'])


      а можно еще сделать так

      Код
      if ( $row['count'] && !$row['no_buy'] )


      тогда не будут отображаться товары у которых количество 0 и у которых стоит галочка "нет в наличии"
      • 17 сентября 2014 г.
      • Вставил код- не помогло.
        И у меня после выгрузки товаров из учетной программы у нулевых товаров стоит не "0" в кол-ве, а пусто просто - это равноценно?
        Тогда может я вставляю код не туда куда-то?
        Спасибо
        • 17 сентября 2014 г.
        • Так 0 и пусто - это одно и то же
          Нашел цикл "вывод списка товаров"
          Попробовал вставить- ничего. Пропадают все товары
          • 17 сентября 2014 г.
          • Да кстати файл shop.view.list.php - это для версии 5.3
            Для версии 5.4 - это условие надо добавлять в файл shop.view.rows.php

            Какая у вас версия?
          • 17 сентября 2014 г.
          • Если для 5.4 то вам надо в файле shop.view.rows.php - сделать проверку внутри цикла:

            Код
            foreach ($rows as $value)
            {

            echo '<div class="shop-col">';
            foreach ($value as $row)
            {
            if ( $row['count'] && !$row['no_buy'] )
            {
            ..............
            }


            Я сейчас попробовал специально, все работает.
            • 17 сентября 2014 г. , редакция: 17 сентября 2014 г.
            • 5.4 стоит
              Туплю видимо сильно сегодня - не понимаю куда именно вставить данный код
            • 17 сентября 2014 г. , редакция: 17 сентября 2014 г.
            • У меня вот есть код:
              Код

              //вывод списка товаров
              if (!empty($result["rows"]))
              {

              //вывод сортировки товаров
              if(! empty($result["link_sort"]))
              {
              echo $this->get('sort_block', 'shop', $result);
              }

              echo '<div class="shop-pane">';

              $rows = array(array(), array(), array(), array());

              $t = 0;
              foreach ($result["rows"] as $row => $value)
              {
              if($t > 3) $t = 0;
              $rows[$t][] = $value;
              $t++;
              }

              foreach ($rows as $value)
              {
              echo '<div class="shop-col">';
              foreach ($value as $row)
              {
              echo '<div class="js_shop shop-item shop">';



              и тд

              Я так понимаю куда-то сюда:
              Код
              foreach ($rows as $value)
              {
              echo '<div class="shop-col">';
              foreach ($value as $row)
              {
              echo '<div class="js_shop shop-item shop">';



              Куда здесь вставлять не соображу :(
              • 17 сентября 2014 г.
              • Файл shop.view.rows.php

                Код
                <?php
                /**
                * Шаблон списка товаров
                *
                * @package Diafan.CMS
                * @author diafan.ru
                * @version 5.4
                * @license http://cms.diafan.ru/license.html
                * @copyright Copyright (c) 2003-2014 OOO «Диафан» (http://diafan.ru)
                */
                if (!defined('DIAFAN'))
                {
                include dirname(dirname(dirname(__FILE__))).'/includes/404.php';
                }

                //вывод списка товаров
                if (!empty($result["rows"]))
                {
                //вывод сортировки товаров
                if(! empty($result["link_sort"]))
                {
                echo $this->get('sort_block', 'shop', $result);
                }

                echo '<div class="shop-pane">';

                $rows = array(array(), array(), array(), array());

                $t = 0;
                foreach ($result["rows"] as $row => $value)
                {
                if($t > 3) $t = 0;
                $rows[$t][] = $value;
                $t++;
                }

                foreach ($rows as $value)
                {

                echo '<div class="shop-col">';
                foreach ($value as $row)
                {
                if ( $row['count'] && !$row['no_buy'] ){
                echo '<div class="js_shop shop-item shop">';

                //вывод изображений товара
                if (!empty($row["img"]))
                {
                echo '<div class="shop_img shop-photo">';
                foreach ($row["img"] as $img)
                {
                switch ($img["type"])
                {
                case 'animation':
                echo '<a href="'.BASE_PATH.$img["link"].'" rel="prettyPhoto[gallery'.$row["id"].'shop]">';
                break;
                case 'large_image':
                echo '<a href="'.BASE_PATH.$img["link"].'" rel="large_image" width="'.$img["link_width"].'" height="'.$img["link_height"].'">';
                break;
                default:
                echo '<a href="'.BASE_PATH_HREF.$img["link"].'">';
                break;
                }
                echo '<img src="'.$img["src"].'" width="'.$img["width"].'" height="'.$img["height"].'" alt="'.$img["alt"].'" title="'.$img["title"].'" image_id="'.$img["id"].'" class="js_shop_img">';
                echo '<span class="shop-photo-labels">';
                if (!empty($row['hit']))
                {
                echo '<img src="' . BASE_PATH . Custom::path('img/label_hot.png').'"/>';
                }
                if (!empty($row['action']))
                {
                echo '<img src="' . BASE_PATH . Custom::path('img/label_special.png').'"/>';
                }
                if (!empty($row['new']))
                {
                echo '<img src="' . BASE_PATH . Custom::path('img/label_new.png').'"/>';
                }
                echo '</span>';
                echo '</a> ';
                }
                echo '<span class="js_shop_wishlist shop_wishlist shop-like'.(! empty($row["wish"]) ? ' active' : '').'">&nbsp;</span>';

                echo '</div>';
                }

                //вывод названия и ссылки на товара
                echo '<a href="'.BASE_PATH_HREF.$row["link"].'" class="shop-item-title">'.$row["name"].'</a>';
                //рейтинг товара
                if (!empty($row["rating"]))
                {
                echo ' '.$row["rating"];
                }

                //вывод краткого описания товара
                if (!empty($row["anons"]))
                {
                echo '<div class="shop_anons">'.$row['anons'].'</div>';
                }

                //вывод производителя
                if (!empty($row["brand"]))
                {
                echo '<div class="shop_brand">';
                echo $this->diafan->_('Производитель').': ';
                echo '<a href="'.BASE_PATH_HREF.$row["brand"]["link"].'">'.$row["brand"]["name"].'</a>';
                echo '</div>';
                }

                //вывод артикула
                if (!empty($row["article"]))
                {
                echo '<div class="shop_article">';
                echo $this->diafan->_('Артикул').': ';
                echo '<span class="shop_article_value">'.$row["article"].'</span>';
                echo '</div>';
                }

                //вывод параметров товара
                if (!empty($row["param"]))
                {
                echo $this->get('param', 'shop', array("rows" => $row["param"], "id" => $row["id"]));
                }

                //вывод скидки на товар
                if (!empty($row["discount"]))
                {
                echo '<div class="shop_discount">'.$this->diafan->_('Скидка').': <span class="shop_discount_value">'.$row["discount"].' '.$row["discount_currency"].($row["discount_finish"] ? ' ('.$this->diafan->_('до').' '.$row["discount_finish"].')' : '').'</span></div>';
                }

                //теги товара
                if (!empty($row["tags"]))
                {
                echo $row["tags"];
                }

                //вывод кнопки "Купить"
                echo $this->get('buy_form', 'shop', array("row" => $row, "result" => $result));

                if(empty($result["hide_compare"]))
                {
                echo $this->get('compare_form', 'shop', $row);
                }

                echo '</div>';
                }
                }
                echo '</div>';
                }
                echo '</div>';
                }
  • 17 сентября 2014 г.
  • Кеширование выключайте, не забывайте. А режим разработчика включайте на время правки кода, для порядку.
    Иначе ничего не увидите из-за одних правок РНР, там запросы к БД в кеше.
    • 17 сентября 2014 г.
    • Хм, спасибо, попробовал. Отключил кэширование, включил режим разработки, пока так же все.
    • 17 сентября 2014 г. , редакция: 17 сентября 2014 г.
    • Виталий, не подскажете в чём может быть дело? В админке, в Режиме разработки, отмечаю "Включить режим разработки" и "Отключить кэширование" и потом невозможно всё это отменить (снять галочки). Все кнопки "Сохранить" перестают функционировать (не сохраняют). В чём может быть причина, где смотреть?
      Если это случается, то делаю восстановление сайта из бакапа, иначе всё будет висеть.
      • 17 сентября 2014 г.
      • Включение режима разработки выводит все ошибки в консоль под страницами сайта. Посмотрите, на что ругается, конфликты JS какие-нибудь.
        Выключить режим разработки можно просто вписав
        Код
        define("MOD_DEVELOPER", false);

        в config.php, а не восстанавливая весь сайт
  • 17 сентября 2014 г.
  • В общем никакие варианты не помогли. Лучшее чего смог добиться - не видно нулевые позиции, но при этом на их месте пропуски и каталог выглядит как шахматная доска :(
    Странно, неужели у меня одного такая проблема? Вообще не понимаю зачем показывать товары, которых нет в наличии.
    • 17 сентября 2014 г.
    • В версии 5.3 нет цикла который разбивает на колонки и все ок работает. Тут надо либо убрать разбиение на колонки, либо конкретно смотреть, тут все на уровне php начального уровня. В какую сторону двигаться вам подсказали. Я думаю если хоть чуть чуть знаете php, то немного посидев и разобравшись без проблем сделаете.
      • 17 сентября 2014 г.
      • Спасибо, но конечно может и простая функция, но что-то не решается. И направление, может и не совсем верное.
        Вообще обычно везде есть сразу опция отображать или нет 0 остатки. Тут же весь мозг сломал.
        Оно или выводится все так, что в один столбец все товары или с пропусками.
        Чуть знать php тут не помогает.
        Вообще не понимаю что делать.
    • 17 сентября 2014 г.
    • черкните адрес, помогу.
      реальнопросто интересно чего ж вы за столько сообщений не смогли сделать)) ужеможно было половину движка переписать))
      • 17 сентября 2014 г.
      • Адрес сайта? или личный?
        • 17 сентября 2014 г.
        • Блин, да покажите хоть что-нибудь уже.
          Сайт, конечно.
          Ну примитивный же цикл, выводит пустые слои. На сайте их в коде видно сразу должно быть, в цикле их убрать и всё.
          • 17 сентября 2014 г.

          • Сайт будущий тут thechronicles.ru
            Логику понимаю, но не выходит (
  • 17 сентября 2014 г.
  • И кроме всего прочего, когда добиваюсь "невидимости" нулевых товаров в каталоге с пропусками, на главной, в модуле вывода рандомных товаров, продолжают появляться нулевые товары
    • 17 сентября 2014 г.
    • Конечно, потому что у модуля вывода товаров другой шаблон.
      • 17 сентября 2014 г.
      • Да я пониаю, но если справлюсь с одним- второй туда же пойдет )
        Но что-то пока тишина.
        Перепробовал все варианты - или падает или пропуски
  • 18 сентября 2014 г.
  • В общем служба поддержки направила в правильном направлении:
    Цитата
    Информаци о количестве товаров содержиться в таблице {shop_price}. По ней нужно сделать соединение и добавить в условие для этой таблицы count_goods>0.

    На примере запроса товаров в категории. Функция list_category_elements_query(). Соединение по этой таблице есть, но при выполнении условия

    $this->diafan->_route->sort == 1 || $this->diafan->_route->sort == 2

    Значит надо убрать это условие, чтобы таблица подключалась всегда и добавить после WHERE

    AND pr.count_good>0

    Аналогично нужно сделать для всех других запросов, в том числе там, где идет подсчет всех товаров в категории (функция list_category_elements_query_count()).



    Теперь вопрос- как лучше это все реализовать? Где что править?

    Спасибо
    • 18 сентября 2014 г.
    • Цитата
      Вообще не понимаю зачем показывать товары, которых нет в наличии.

      Кроме добрых покупателей, которые приносят вам деньги на сайт заходят злые поисковики, которые в случае отсутствия у вас на сайте товаров нещадно выбрасывают ваши страницы с этими товарами из индекса.
      А когда у вас товар появляется, то добрые покупатели не могут на них попасть из поисковика потому, что в поисковике их нет и опять появиться они там очень не скоро. Обычно они появляются в индексе, как раз тогда, когда их уже опять нет в наличии
      Поэтому обычно отсутствующие товары не удаляют с сайта! Их можно затемнить или как нибудь еще обособить и задвинуть в конец, чтобы не смущали добрых посетителей.
      И делается это в разы проще.
      • 18 сентября 2014 г.
      • Но можно же не выводить товары в списке товаров, а карточки товаров оставлять доступными по своему адресу - тогда если товар проиндексирован ПС, то в следующий раз робот без проблем попадет на карточку, но покупатель ее видеть не будет.
        • 18 сентября 2014 г.
        • Стандартно CMS работают так, что если товар не показывается, то не показывается везде:
          и в списках нет и карточек нет.

          А при желании и соловья можно научить квакать.
          • 18 сентября 2014 г.
          • Цитата
            Стандартно CMS работают так


            Что значит стандартно? Что за стандарты такие )) гост?
            Как в логику заложите, так и будет.
            • 18 сентября 2014 г.
            • Поисковики - поисковиками - но вот клиентов точно раздражает смотреть на модели часов, которых нет в наличии и листать тонны страниц в каталоге.
              А товар-то меняется по коллекциям из года в год. Думаю в 70-80% случаев у меня товары повторно уже не появляются в доступе. Новая коллекция - новые товары. Если все хранить, то через пару лет будет 100 страниц с товарами, которых нет.
              Простейшай функция, а реализовать никто не может :( Очень странно что ее нет в diafane. Раньше был магазин на shopify - там это вс делалось за один клик.
              • 18 сентября 2014 г.
              • А зачем на сайт выгружать товары, которых никогда больше не будет?
                Пусть даже с нулевым количеством.

                Может что-то нужно в логике работы подкрутить, прежде чем сайт подкручивать?

                Как глаза - зеркало души, так сайт отражение внутренней структуры работы.
            • 18 сентября 2014 г.
            • Для достижения консенсуса готов заменить слово "стандартно" на "по-умолчанию"
              • 18 сентября 2014 г.
              • Так модуль выгрузки moysklad --->>> diafan какой есть. Я бы с радостью не выгружал нулевое. Но сделано у них так
  • 30 сентября 2014 г.
  • У меня примерно такой же вопрос, но с компромиссным вариантом решения- я бы не убирал с сайта товары, которых нет в наличии, а просто при выводе в списке товаров сортировал по этому признаку и выводил их в самом хвосте- такое реально? Второй вопрос- 80% товаров с картинками, а 20- пока нет. можно как-то выполнить сортировку по наличию картинки, чтобы точно так же в первую очередь выводить товары с картинками, потом без картинок, а потом которых нет в наличии.
  • 08 декабря 2014 г.
  • Кто-нибудь смог реализовать чтобы по умолчанию список товаров формировался так, чтобы "нулевые товары" отправлялись в самый зад списка?

    У самого вот возникла надобность. Как бы в модельку лезть не пришлось...

Новости

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

Форум