как получить из базы к каким спискам принадлежит товар для вывода в шаблоне? Есть решение

надо вывести в шаблоне блок с меткой, если товар есть в списке "promo".
как написать if?
как сюда вписать id товара?
{if $wa->shop->productSet('promo')}111{/if}
этот код выводит метку "111" во всех товарах, если в списке promo есть хоть один товар, а вот как выводить метку только в том случае, если именно этот товар есть в списке promo?

7 ответов

  • 0
    loony Партнер-эксперт 28 апреля 2014 08:04 # Решение
    РЕШЕНИЕ:
    1. файл /wa-apps/shop/lib/classes/shopCustom.class.php с содержанием:
    <?php

    class shopCustom
    {
    public static function getProductSets($product_id = null)
    {
    if(!is_null($product_id))
    {
    $model = new shopSetProductsModel();
    $sets = $model->select('set_id')->where('product_id='.$product_id)->fetchAll();
    return $sets;
    }
    }
    }
    2. в шаблоне (категории или товара) добавляем в нужное место:
    {$sets = shopCustom::getProductSets($product.id)}
    {foreach $sets as $set}
    {foreach $set as $item}
    {if $item=='promo'}ваш код метки{/if}
    {/foreach}
    {/foreach}

    ***
    хозяйке на заметку:
    в виде кода метки можно приляпать код наклейки. например, "новинка" или "хит продаж". тогда все товары этого списка при выводе будут иметь эту наклейку, и не надо ручками их обклеивать персонально. но в админке оно выделяцо не будет.
    • +1
      Виктор Виктор 7 июня 2020 08:23 #

      Этот хелпер не работает со списками типа «Фильтр», только с обычными списками, в которые товары добавляются вручную...

  • 1
    ClassicCode 1 мая 2017 14:08 #

    Проверяю принадлежит ли товар к списку "новинки" ( у меня newcomers) в карточке товара.Без создания хелпера

        {$newcomers = $wa->shop->productSet("newcomers")}
        {foreach $newcomers as $item}
        {if $item.id == $product.id}Новинка{/if}
        {/foreach}
    • +1
      Rusich Rusich 7 июля 2017 15:34 #

      Проверяет и другие списки, если проверку ставить друг за другом и выводит нужную наклейку. Подскажите как это прикрутить в категории (list-thumbs).

  • 0
    Можно написать хелпер
    public static function getProductSets($product_id = null)
    {
    if(!is_null($cat_id))
    {
    $model = new shopSetProductsModel();
    $sets = $model->select('set_id')->where('product_id='.$product_id)->fetchAll();
    return $sets;
    }
    }


    Как делать хелперы
    http://www.webasyst.ru/developers/docs/helpers/custom-helpers/
    • 0
      ошибочка, вместо if(!is_null($cat_id))
      if(!is_null($product_id))
      • 0
        %username% 18 апреля 2014 08:34 #
        я сделала файл shopCustom.class.php с содержанием:
        <?php

        class shopCustom
        {
        public static function getProductSets($product_id = null)
        {
        if(!is_null($product_id))
        {
        $model = new shopSetProductsModel();
        $sets = $model->select('set_id')->where('product_id='.$product_id)->fetchAll();
        return $sets;
        }
        }

        а в шаблоне карточки товара воткнула:
        {shopCustom::getProductSets($product_id)}
        • 0
          %username% 18 апреля 2014 08:35 #
          и фига! всё что ниже кода перестало выводицо ((
          что не так в коде? или что-то я не доделала?
  • 0
    loony Партнер-эксперт 18 апреля 2014 09:07 #
    может быть я ещё в каком-то файле написать что-то должна?
  • 0
    начал просматривать Ваш вызов функции
    {shopCustom::getProductSets($product_id)}

    переменная product_id должна быть определена
    если это страница товара, то в файле product.html должно быть так
    {$product_id = $product.id}

    если это страница категории, то
    в файле list-thumbs.html

    {$product_id = $p.id}
    ---------
    и только после этого вызывть
    {shopCustom::getProductSets($product_id)}
    • 0
      loony loony Партнер-эксперт 21 апреля 2014 07:18 #
      $product.id это я поменяла уже. т.к. карточка товара, то оно определено (для теста я вывожу id). а вот если выводить так:
      {shopCustom::getProductSets($product.id)}
      то выводится текст "Array"
      может тип данных не тот?
      • 0
        Это означает, что товар содержится в нескольких списках(ну или на языке программирования это массив)

        {$sets = shopCustom::getProductSets($product.id)}
        {foreach $sets as $set}
        {$set}
        {/foreach}

        Если так не получится, напишите, что у Вас выводится
        {$sets|var_dump} - это вывод массива
        • 0
          loony loony Партнер-эксперт 22 апреля 2014 10:50 #
          запуталась я в коде вся (((
          если так:
          <?php

          class shopCustom
          {
          public static function getProductSets($product.id = null)
          {
          if(!is_null($product_id))
          {
          $model = new shopSetProductsModel();
          {$sets = shopCustom::getProductSets($product.id)}
          {foreach $sets as $set}
          {$set}
          {/foreach}
          }
          }
          }

          то "NULL"

          и то же "NULL" если так:

          <?php

          class shopCustom
          {
          {$sets = shopCustom::getProductSets($product.id)}
          {foreach $sets as $set}
          {$set}
          {/foreach}
          }
          • 0
            loony loony Партнер-эксперт 22 апреля 2014 11:04 #
            ОЙ! тупанула я!!! в php файл пихать начала..
            поправила, уже лучше, но не то мальца.
            когда так: {$sets = shopCustom::getProductSets($product.id)}
            {foreach $sets as $set}
            {$set}
            {/foreach}
            такое:Array Array

            когда этот вариант:
            {$sets = shopCustom::getProductSets($product.id)}
            {foreach $sets as $set}
            {$set}
            {/foreach}
            {$sets|var_dump}
            то :
            Array Array array(2) { [0]=> array(1) { ["set_id"]=> string(5) "promo" } [1]=> array(1) { ["set_id"]=> string(9) "ya_market" } }
  • 0
    либо
    {foreach $sets as $set}
    {$set.set_id}
    {/foreach}

    либо
    {foreach $sets as $set}
    {foreach $set as $item}
    {$item}
    {/foreach}
    {/foreach}

    Пишите мне на личную почту tdmitriiv@gmail.com
    А то тему искать каждый раз
  • 0
    Valentin - 6 августа 2014 11:27 #
    Подскажите, что делаю не так.
    public static function getServices($product_ids)
    {
    if (!$product_ids) {
    return array();
    }
    $services_model = new shopProductServicesModel();
    $rows = $services_model->select('id,product_id,sku_id,service_id, price, primary_price')->
    where('product_id='.$product_id)->fetchAll();
    $services = array();
    foreach ($rows as $row) {
    $p_id = $row['product_id'];
    unset($row['product_id']);
    $services[$p_id][$row['id']] = $row;
    }
    return $services;
    }
    Скажите пожалуйста, что не правильно в обращении к бд?
    Хочу вывести в каталоге стоимость услуг у товаров. Спасибо.
    • 0
      Valentin - Valentin - 6 августа 2014 11:36 #
      Не много изменил, но место цены - ноль.
      public static function getServices($product_ids)
      {
      if (!$product_ids) {
      return array();
      }
      $services_model = new shopProductServicesModel();
      $rows = $services_model->select('id,product_id,sku_id,service_id, price, primary_price')->
      where('product_id IN (i:ids)', array('ids' => $product_ids))->fetchAll();
      $services = array();
      foreach ($rows as $row) {
      $p_id = $row['product_id'];
      unset($row['product_id']);
      $services[$p_id][$row['id']] = $row;
      }
      return $services;
      }

      вызов
      {$services = shopCustom::getServices(array_keys($products))}
      {if count($services[$p.id]) > 0}
      {foreach $services[$p.id] as $s}
      <p class="price-installation">{shop_currency_html($s.price, $s.currency)}</p>
      {/foreach}
      {/if}
      • 0
        Valentin - Valentin - 6 августа 2014 11:46 #
        Бррр... все работает так, но выводится почему то 2 раза, 1 раз цена, а второй раз ноль.
        И где в таблицах название сервиса? Возможно её вытянуть так же?
        • 0
          Михаил Ушенин Михаил Ушенин Webasyst 7 августа 2014 01:22 #
          Как минимум, в вашем коде не учитываются возможность указания процентов вместо фиксированной наценки и наличие нескольких вариантов у услуги. Проверьте это и хотя бы просто для отладки логируйте дамп массива данных, полученных из БД.

Добавить ответ

Чтобы добавить комментарий, зарегистрируйтесь или войдите