Реализация сопутствующих товаров


Здравствуйте! Появилась проблема, не знаю как решить, надеюсь на вашу помощь.
Нужно вывести 6 товаров(или больше) как сопутствующие из категории товара, на странице которого мы находимся.
Хотелось бы в случайном порядке и без товара на котором вы находимся, чтобы не дублировать.
И если в категории товаров меньше 6 штук — забирать из другой необходимое кол-во.
Есть ли стандартные способы решения проблемы?
А я полагаю что нет)) Если знаете, не подскажите как подступиться?
Спасибо!
28 сентября 2012, 23:11    Илья   
0    796 0

Комментарии (16)

    1. Роман Садоян 10 июля 2015, 11:37 # 0
      Добрый день!
      Я новичок и возможно проблема элементарная.
      Не хочу создавать новую тему, получается следующая ситуация, может кто-нибудь сталкивался:

      Код сниппета:
      [[!msProducts?
            &parents=`0`
            &master=`[[*id]]`
            &link=`1`
            &showUnpublished=`1`
            &showLog=`1`
            &tpl=`related.products`
            ]]
      Код чанка related.topics:
      <img src="[[+thumb:default=`[[++assets_url]]components/minishop2/img/web/ms2_small.png`]]" width="120" height="90" />
      <a href="[[~[[+id]]]]">[[+pagetitle]]</a>
      
      На выходе имеем следующее (страница обрезается с низу, пропадает футер, за место него начинает вставляться код с самого верха шаблона карточки товаров):

      Как должно быть (красным помечено место вывода блока):


      Основу кода взял с комментария Василия
      1. Константин Ильин 10 июля 2015, 12:32 # +1
        в коде

        &tpl=`related.products`
        а сюда пишете код чанка related.topics

        Уточните какой вам нужен, видимо не тот используете.
        1. Роман Садоян 10 июля 2015, 12:36 # 0
          Да нет, использую тот, это просто опечатка при составлении комментария!
          Каким то образом начинает подгружаться шаблон карточки товара, после первого выведенного товара.
          Вызов сниппета размещен в шаблоне карточки товара!
          Выборка происходит, т.е. при указании &tpl=`` я вижу 2 нужных мне массива, стоит мне переключиться на свой шаблон или на стандартный, начинается ересь.
          1. Константин Ильин 10 июля 2015, 12:42 # +1
            «за место него начинает вставляться код с самого верха шаблона карточки товаров»

            такого не может быть если вы используете правильный чанк.

            На картинке видно, что есть изображение и ссылка — значит msProducts выводит товар.

            все что ниже надо смотреть код, что там не так.

            можно код шаблона
            1. Роман Садоян 10 июля 2015, 12:50 # 0
              Всё может быть, пожалуйста, вот код шаблона:
              [[!FormIt?
              &hooks=`email,redirect`
              &customValidators=`fiValidatorLink`
              &validate=`link:fiValidatorLink,feedbackname:required,feedbackcontact:required`
              &redirectTo=`5106`
              &emailTo=`###`
              &emailFrom=`###`
              &emailSubject=`Предложение о снижении стоимости на [[*pagetitle]]`
              &emailTpl=`tpl.ownPrice`
              &store=`1`
              ]]
              <!DOCTYPE html>
              <html lang="ru">
              <head>
                [[$miniShop2.head]]
                [[$postHead]]
              </head>
              <body class="fixed blue [[!+fi.validation_error_message:notempty=`modal-open`]]">
              [[$btn.Facebook.head]]
              [[preWrapper]]
              [[$navbar.fixed.blue]]
              <div class="container">
                [[$breadcrumbs]]
                <div class="row phones">
                  [[$ContactPhones]]
                </div>
                <div id="content" class="">
                  <div id="msProduct" class="row padding-left-sm">
                    <div class="col-sm-6 col-md-4">
                      [[!msGallery? &tplOuter=`tpl.Product.Gallery.outer`]]
                    </div>
                    <div class="col-sm-6 col-md-4 col-lg-5">
                      [[!+price[[!+affiliator.prefix]]:toPlaceholder=`newPrice`]]
                      [[!+newPrice:gt=`0`:then=``:else=`<div class="layer" style="position: absolute;top: 0;bottom: 0;left: 0;right: 0;background-color: rgba(255, 255, 255, 0.9);z-index: 1;text-align: center;"><div style="position: absolute;left: 50%;top: 32%;font-size: 20px;font-weight: 800;width: 300px;margin-left: -150px;">Этого товара нет в выбранном вами регионе</div></div>`]]
              
                      <table class="table table-striped table-bordered">
                        <tbody>
                        <tr>
                          <th><span class="title">Артикул</span></th>
                          <td>[[+[[+article:len:gt=`8`:then=``:else=`article`]]]]</td>
                        </tr>
                        <th><span class="title">В наличии</span></th>
                        <td>[[!+request_[[!+affiliator.key]]:is=``:then=`да`:else=`доступен для предзаказа`]]</td>
                        </tr>
                        <tr>
                          <th><span class="title">Бренд</span></th>
                          <td><img src="[[+vendor.logo]]" class="img-responsive" alt="[[+vendor.name]]" style="max-height: 60px;"></td>
                        </tr>
                        <tr>
                          <th><span class="title">Страна производителя</span></th>
                          <td>[[+vendor.country]]</td>
                        </tr>
                        [[!msOptions? &tplOuter=`tpl.my.msOptions.outer` &tplRow=`tpl.msOptions.row` &name=`color`]]
                        [[!msOptions? &tplOuter=`tpl.my.msOptions.outer` &tplRow=`tpl.msOptions.row` &name=`size`]]
                        <tr>
                          <th><span class="title">Цена</span></th>
                          <td class="text-center">
                            <span style="font-weight: 700; font-size: 20px;">[[!+newPrice]] [[%ms2_frontend_currency]]</span>
                            [[!+old_price[[!+affiliator.prefix]]:gt=`[[!+newPrice]]`:then=`
                            <sub class="old_price">[[!+old_price[[!+affiliator.prefix]]]]</sub>
                            `:else=``]]
                            [[!+affiliator.key:is=`spb`:then=`<button type="button" class="btn btn-link btn-sm btn-block" data-toggle="modal" data-target="#ownprice">Знаете, где дешевле?</button>`]]
                          </td>
                        </tr>
                        <tr>
                        </tbody>
                      </table>
              
                      <form class="form-horizontal ms2_form" method="post">
                        <input type="hidden" name="id" value="[[*id]]">
                        <input type="hidden" name="count" value="1">
                        <div class="form-group">
                          <div class="col-xs-offset-1 col-xs-10 col-md-offset-0 col-md-12 col-lg-offset-5 col-lg-7">
                            [[!+newPrice:gt=`0`:then=`<button type="submit" name="ms2_action" class="btn btn-block btn-success btn-lg" style="border-radius: 0;" value="cart/add">Купить <i class="glyphicon glyphicon-shopping-cart"></i></button>`:else=``]]
                          </div>
                        </div>
                      </form>
              
                    </div>
                    <div class="hidden-xs col-sm-6 col-md-4 col-lg-3 text-center">
              ####################
                    </div>
                  </div>
                  <ul id="myTab" class="nav nav-tabs padding-left-sm_">
                    <li class="active"><a href="#description-text" data-toggle="tab"><h4>Описание</h4></a></li>
                    <li><a href="#features" data-toggle="tab"><h4>Технические характеристики</h4></a></li>
                    <li><a href="#materials" data-toggle="tab"><h4>Материалы</h4></a></li>
                  </ul>
                  <div id="myTabContent" class="tab-content padding-left-sm">
                    <div class="tab-pane fade in active" id="description-text">
                      <p class="hidden-xs"> </p>
                      [[xContent]]
                    </div>
                    <div class="tab-pane fade" id="features">
                      <p class="hidden-xs"> </p>
                      <table class="table table-hover">
                        [[getImageList?
                        &tvname=`product_features`
                        &tpl=`product_features.row`
                        ]]
                      </table>
                    </div>
                    <div class="tab-pane fade" id="materials">
                      <p class="hidden-xs"> </p>
                      <dl class="dl-horizontal">
                        [[*product_booklet:notempty=`
                        <dt>Буклет</dt>
                        <dd><a href="[[*product_booklet]]">скачать</a></dd>
                        `]]
                        [[*product_leafleat:notempty=`
                        <dt>Листовка</dt>
                        <dd><a href="[[*product_leafleat]]">скачать</a></dd>
                        `]]
                        [[*product_memo:notempty=`
                        <dt>Памятка</dt>
                        <dd><a href="[[*product_memo]]">скачать</a></dd>
                        `]]
                        [[*product_guide:notempty=`
                        <dt>Руководство</dt>
                        <dd><a href="[[*product_guide]]">скачать</a></dd>
                        `]]
                        [[*product_certificate:notempty=`
                        <dt>Сертификат</dt>
                        <dd><a href="[[*product_certificate]]">скачать</a></dd>
                        `]]
                        [[*product_license:notempty=`
                        <dt>Лицензия</dt>
                        <dd><a href="[[*product_license]]">скачать</a></dd>
                        `]]
                      </dl>
                    </div>
                  </div>
                  <div class="red">
                    [[!msProducts?
                    &parents=`0`
                    &master=`[[*id]]`
                    &link=`1`
                    &showUnpublished=`1`
                    &showLog=`1`
                    &tpl=`related.products`
                    ]]
                  </div>
                  <div class="margin20 pull-left">
                    [[$LikeButtons]]
                  </div>
                  <div class="pull-right">[[$YandexShare]]</div>
                  <div class="clearfix"></div>
                  <p> </p>
                  [[pdoNeighbors@CatalogNeighbors]]
                </div>
                [[$footer]]
                [[$postFooter]]
              </div>
              <div class="modal fade" id="ownprice" tabindex="-1">
                <div class="modal-dialog modal-lg">
                  <div class="modal-content">
                    <div class="modal-header">
                      <button type="button" class="close" data-dismiss="modal">×</button>
                      <h4 class="modal-title">Нашли товар дешевле?</h4>
                    </div>
                    <div class="modal-body row">
                      <div class="col-md-7">
                        <p>Вы нашли в нашем каталоге нужный товар (<b>[[*pagetitle]]</b> за <b>[[!+price]] [[%ms2_frontend_currency]]</b>), но в другом магазине он продаётся дешевле?</p>
                        <p>Сообщите нам об этом, и мы постараемся снизить для вас цену:</p>
                        <form role="form" action="[[*uri]]" method="post" class="well">
                          <input type="hidden" name="pagetitle" value="[[*pagetitle]]">
                          <input type="hidden" name="fromlink" value="[[*uri]]">
                          <div class="form-group [[!+fi.error.link:notempty=`has-error`]]">
                            <label for="link">Ссылка на товар в другом магазине</label>
                            <input type="text" class="form-control" name="link" id="link" placeholder="http://" value="[[!+fi.link]]" required>
                          </div>
                          <div class="form-group [[!+fi.error.feedbackname:notempty=`has-error`]]">
                            <label for="feedbackname">Как вас зовут</label>
                            <input type="text" class="form-control" name="feedbackname" id="feedbackname" placeholder="напр. Илья" value="[[!+fi.feedbackname]]">
                            <small class="help-block">Нам важно знать, кто помогает нам придерживаться конкурентной ценовой политике</small>
                          </div>
                          <div class="form-group [[!+fi.error.feedbackcontact:notempty=`has-error`]]">
                            <label for="feedbackcontact">Обратная связь</label>
                            <input type="text" class="form-control" name="feedbackcontact" id="feedbackcontact" placeholder="email или телефон" value="[[!+fi.feedbackcontact]]" required>
                            <small class="help-block">Мы не рассылаем спам и не передаём ваши контактные данные <i>третьим лицам</i></small>
                          </div>
                          <div class="form-group">
                            <textarea class="form-control" name="comment" rows="4" placeholder="Если у вас есть дополнительная информация, которая, как вы считаете, поможет нам быстрее принять решение, напишите, пожалуйста, об этом здесь.">[[!+fi.comment]]</textarea>
                          </div>
                          [[*id:is=`274`:then=``:else=`<button type="submit" class="btn btn-success btn-lg btn-block">Получить скидку</button>`]]
                        </form>
                      </div>
                    </div>
                  </div>
                </div>
              </div>
              [[!+fi.validation_error_message:notempty=`<script>$(document).ready(function(){ $('#ownprice').modal('toggle'); });</script>`]]
              </body>
              </html>
              1. Константин Ильин 10 июля 2015, 12:59 # +1
                если чанк related.products такой:
                <img src="[[+thumb:default=`[[++assets_url]]components/minishop2/img/web/ms2_small.png`]]" width="120" height="90" />
                <a href="[[~[[+id]]]]">[[+pagetitle]]</a>
                то проблем не должно вроде как быть.

                ответ на вопрос ниже: понимаю
              2. Роман Садоян 10 июля 2015, 12:55 # 0
                Вы понимаете в чем смысл то, в том, что если я убираю вызов сниппета, то всё — нормально, если же вставляю — начинается вот такое безобразие.
                1. Константин Ильин 10 июля 2015, 13:01 # +1
                  <div class="red">
                  Код который здесь выдает покажите
                  </div>
                  1. Роман Садоян 10 июля 2015, 13:06 # 0
                    Если Вы имели в ввиду код чанка, то вот
                    <img src="[[+thumb:default=`[[++assets_url]]components/minishop2/img/web/ms2_small.png`]]" width="120" height="90" />
                    <a href="[[~[[+id]]]]">[[+pagetitle]]</a>
                    Смысл в том, что по связям у меня 2 товара, если поставить tpl=`` увидим следующее:

                    Но если мы вообще удалим tpl или поставим свой, то появляются проблемы.
                    Кэш чистил — не понимаю в чем дело…
                    1. Константин Ильин 10 июля 2015, 13:11 # +1
                      на самой странице что выдает, html код с чанком
                      <div class="red">
                      Код который здесь выдает покажите
                      </div>
                    2. Роман Садоян 10 июля 2015, 13:10 # 0
                      О боже мой…
                      У меня нет слов…
                      Спасибо Вам за помощь, всё изначально работало верно. Проблема была связана совершенно с другим!
                      1. Константин Ильин 10 июля 2015, 13:11 # 0
                        с чем?
                        1. Роман Садоян 10 июля 2015, 13:14 # 0
                          С тем, что в чанке был вызов Tv цены товара в зависимости от региона. Убрав его, товары вывелись
                          1. Роман Садоян 10 июля 2015, 13:37 # 0
                            Можете сказать как мне добавить префикс для всех плейсхолдеров, получаемых в результате работы плагина?
                            [[!msProducts?
                                  &tpl=`related.products`
                                  &tvPrefix=`rl`
                                  &parents=`0`
                                  &master=`[[*id]]`
                                  &link=`1`
                                  &showUnpublished=`1`
                            
                            
                                  ]]
                            &tvPrefix — почему то не срабатывает…
                            1. Константин Ильин 10 июля 2015, 14:01 # 0
                              для плейсхолдеров я чет не нашел префикса только
                              параметр toSeparatePlaceholders

                              &tvPrefix — почему то не срабатывает…
                              насколько знаю tvPrefix только для ТВ которые перечисленны в параметре includeTVs

                              если не секрет для чего вам это?
            Вы должны авторизоваться, чтобы оставлять комментарии.