Условие на Fenom

Всем здравствуйте, подскажите пожалуйста, как возможно реализовать такое условие на fenom:

Есть опция товара Статус производителя и 2 значения Оригинал/Неоригинал

В шаблоне необходимо выводить, если значение Оригинал, то выводим изображение бренда, а в title подставляем titile=«Оригинал», если Неоригинал, то выводим картинку зачеркнутого бренда.

Сейчас для этого используется опция Производитель товара и выглядит это так, все работает отлично: disk.yandex.ru/i/3qxRRGR4goh8gA

И выводится в шаблоне так:
[[+{$_pls['vendor.logo']}:isnot=`0`:then=`<div class="vendor-logo">
		<img src="{$_pls['vendor.logo']}" title="[[+vendor.name]]" class="img-responsive" data-toggle="tooltip"/>
		</div>`:else=``]]
Но все же хотелось бы эту дефолтную опцию использовать по её прямому назначению, а как реализовать данный функционал не приложу ума… Додумался только так пока.
Константин
10 августа 2022, 18:08
modx.pro
845
0

Комментарии: 35

Артур Шевченко
10 августа 2022, 23:06
0
А Вы пробовали прикладывать ум не к гаданию, а к документации?
    Константин
    11 августа 2022, 07:54
    0
    Дак это понятно, так у меня к примеру наличие выводится:
    {if $available==1?}
    	<div class="stock"><span></span> <span class="status-stock">В наличии</span></div>
    {/if}
    {if $available==2?}
    	<div class="stock"><span></span> <span class="status-stock">Нет в наличии</span></div>
    {/if}
    {if $available==3?}
    	<div class="stock"><span></span> <span class="status-stock">Под заказ</span></div>
    {/if}
    {if $available==4?}
    	<div class="stock"><span></span> <span class="status-stock">Ожидается (в дороге)</span></div>
    {/if}
    Вопрос в другом. Как выводить 2 в 1 или даже 3 в 1, как на примере опции производитель. Ведь у этой опции есть еще поля, такие как наименование, логотип, страна производителя и проч.
    Это можно сделать через MIGX, но использовать TV нет желания, по этому и вопрос, как это сделать средствами minishop2 м возможно ли?
      Артур Шевченко
      11 августа 2022, 16:22
      0
      Аналогично этому плейсхолдеру
      {$_pls['vendor.logo']}
      Или проблема в том, чтобы получить значение опции Статус производителя? Если да, то для этого есть msProductOptions
        Константин
        12 августа 2022, 09:31
        0
        Именно от опции vendor задача отказаться. Еду опцию использовать не под статус производителя (оригинал/неоригинал), а под реального производителя бренд Bosch, Samsung и проч.
          Артур Шевченко
          12 августа 2022, 12:08
          0
          Я всё равно не понимаю в чём проблема? Надо отказаться — откажитесь. Используйте «Статус производителя» в условии.
          {if статус_производителя == 'оригинал'}
          {$_pls['vendor.logo']} {$_pls['vendor.name']}
          {else}
          {$другая_картинка} {$_pls['vendor.name']} (неоригинал)
          {/if}
          Выше псевдокод, не надо использовать кириллицу в именах переменных, это плохо с точки зрения эстетики.
            Константин
            12 августа 2022, 15:48
            0
            Допустим я звожу отдельную опцию и называю ее vendor_status. И если ее значение оригинал, то показываю одну картинку, если нет — другую. А как проверить значение опции, не используя кириллицу? И вывести ее значение в title картине?
              Артур Шевченко
              12 августа 2022, 20:22
              0
              Как-то так
              {if $vendor_status == 'original'}
              <img src="{$_pls['vendor.logo']}" title="{$vendor_status}"> {$_pls['vendor.name']}
              {else}
              <img src="{$other_img}" title="{$vendor_status}"> {$_pls['vendor.name']}
              {/if}
                Константин
                13 сентября 2022, 13:58
                0
                Есть опция combustion_chamber, если ее значение «Закрытая (турбированный)», то пытаюсь вывести картинку турбины в карточке товара, такой конструкцией, не получается…

                {if $combustion_chamber== 'Закрытая (турбированный)'}

                {/if}

                Скриншот: disk.yandex.ru/i/G7rd8tIVXlwTPw
                  Артур Шевченко
                  13 сентября 2022, 14:44
                  0
                  Без контекста непонятно ничего. Где ты пишешь это условие?
                    Константин
                    13 сентября 2022, 15:05
                    0
                    Вот опция в настройках минишопа: disk.yandex.ru/d/hJns36pPN6sKUw
                    Если ее значение у товара «Закрытая (турбированный)», то нужно выводить картинку под флагом логотипа так: disk.yandex.ru/i/_fk-YePq0yjO7g
                    В коде чанка делаю так: disk.yandex.ru/i/wIzG2T87HWPK9g

                    Код чанка:
                    <div class="grid col-md-4 col-sm-6 col-xs-12 ms2_product">
                      <form method="post" class="ms2_form">
                    	<input type="hidden" name="id" value="{$id}">
                    	<input type="hidden" name="count" value="1">
                    	<input type="hidden" name="options" value="[]">
                    	<div class="item item-hover">
                    	  <div class="item-image-wrapper">
                    		[[+{$_pls['vendor.logo']}:isnot=`0`:then=`<div class="vendor-logo-grid">
                    		<img src="{$_pls['vendor.logo']}" alt="Логотип производителя сантехники [[+vendor.name]]" class="img-responsive" title="[[+vendor.name]]" data-toggle="tooltip" />
                    		</div>`:else=``]]
                    		{if $combustion_chamber== 'Закрытая (турбированный)'}
                    <img src="assets/icons/turbine (1).png" title="Турбированный">
                    {/if}
                    		<figure class="item-image-container">
                    		  <a href="{$id | url}" class="product-image">
                    			{if $medium?}
                    			<img src="{$medium}" data-echo="{$medium}" alt="{$pagetitle}" title="{$pagetitle}" class="img-responsive"/>
                    			{else}
                    			<img src="{'assets_url' | option}components/minishop2/img/web/ms2_small.png"
                    			srcset="{'assets_url' | option}components/minishop2/img/web/ms2_small@2x.png 2x"
                    			alt="{$pagetitle}" title="{$pagetitle}"/>
                    			{/if}
                    		  </a>
                    		</figure>	
                    	  </div>
                    	  {if $favorite?}
                    	  <span class="discount-rect">Акция</span>
                    	  <p class="sale-product">[[+sale-product]]</p>
                    	  {/if}
                    	  {if $new?}
                    	  <span class="new-rect">Новинка</span>
                    	  {/if}
                    	  {if $popular?}
                    	  <div class="discount-rect"><span>Популярный</span></div>
                    	  {/if}
                    	  [[+old_price:isnot=`0`:then=`<span class="discoun-rect sale">СКИДКА [[!saving? &price=`[[+price]]` &old_price=`[[+old_price]]`]] %</span>`:else=``]]
                    	</div><!-- End .item-image-wrapper -->
                    	<div class="item-meta-container">
                    	  <h3 class="item-name"><a href="{$id | url}" title="Подробное описание товара">{$pagetitle}</a></h3>
                    	  <div class="price-container">
                    	      
                    	      {if $_pls['vendor.name'] in list ['Protherm (Протерм)', 'Bosch (Бош)', 'Buderus (Будерус)', 'Grundfos (Грундфос)', 'Viessmann (Виссманн)', 'Vaillant (Вайлант)', 'Kermi (Керми)', 'Baxi (Бакси)']}
                        <h3 class="price-on-request-product">Цена по запросу</h3>
                    {else}
                    	      
                    		{if $price?}<span class="item-price">{'!msMultiCurrencyPrice' | snippet : ['price' => $price,]} {$_modx->getPlaceholder('msmc.symbol_right')}</span> {else} <span class="price-grid">Цена по запросу</span>{/if}
                    		{/if}
                    		
                    		{if $old_price?}<span class="old-price">{$old_price} {$_modx->getPlaceholder('msmc.symbol_right')}</span>{/if}
                    		
                    	  </div>
                    
                    	  [[+article:gt=`0`:then=`
                    	  <div class="brand"><span>Артикул:</span> [[+article]]</div>
                    	  `:else=``]]
                    
                    	  {if $_pls['vendor.name'].0?}<div class="brand"><span>Производитель:</span> {$_pls['vendor.name']}</div>{/if}
                    	  {$_modx->runSnippet('msProductOptions', [
                    'product' => $id,
                    'ignoreOptions' => 'series,appointment',
                    'tpl' => 'msProductOptionsGridTpl'
                    ])}
                    	  <div class="item-action col-md-12 col-xs-12">
                    		<div class="col-md-6">
                    		  <button class="btn btn-custom" type="submit" name="ms2_action" value="cart/add" onclick="yaCounter51837074.reachGoal('addtocart'); return true;">Купить</button>
                    		</div>
                    		<div class="col-md-6">
                    		  <input type="number" name="count" class="input-sm form-control" value="1"/>
                    		</div>
                    		
                    	  </div>
                    	</div>
                    	[[!msOneClick?
                    	&id=`[[+id]]`
                    	&tplBtn=`msoneclickBtnTpl`
                    	&tplForm=`msOneClickFormTpl`
                    	]]
                      </form>
                    </div>
                      Артур Шевченко
                      13 сентября 2022, 15:17
                      0
                      А почему ты решил что в чанке есть $combustion_chamber?
                      Константин
                      13 сентября 2022, 16:14
                      0
                      Не вот я и не пойму, как вывести картинку в зависимости от значения опции…
                      Конструкция такая не работает…
                      {if $combustion_chamber== 'Закрытая (турбированный)'}
                      <img src="assets/icons/turbine (1).png" title="Турбированный">
                      {/if}
                      Артур Шевченко
                      13 сентября 2022, 17:15
                      0
                      Получить значение этой опции и проверить. Проверка у тебя есть, значение ты не получил. Значение можно получить используя сниппет msProductOptions и сохранив результат в переменную $combustion_chamber
                      Константин
                      13 сентября 2022, 17:22
                      0
                      А можно пример? Пока не понимаю как получить значение и сохранить в переменную(
                      Артур Шевченко
                      13 сентября 2022, 17:59
                      0
                      {set $combustion_chamber = 'msProductOptions' | snippet:[] }
                      Константин
                      13 сентября 2022, 18:19
                      0
                      Что то не выводит. Правильно дописал сниппет?
                      {set $combustion_chamber = 'msProductOptions' | snippet:['product' => $id,'onlyOptions' => 'combustion_chamber'] }
                      		{if $combustion_chamber== 'Закрытая (турбированный)'}
                      <img src="assets/icons/turbine (1).png" title="Турбированный">
                      {/if}
                      Артур Шевченко
                      13 сентября 2022, 19:51
                      0
                      Ты посмотрел, что в $combustion_chamber?
                      Константин
                      13 сентября 2022, 20:14
                      0
                      В каком смысле?
                      Артур Шевченко
                      13 сентября 2022, 20:31
                      0
                      {if $combustion_chamber== 'Закрытая (турбированный)'}
                      Справа строка со значением 'Закрытая (турбированный)', а слева что? Переменная? А в переменной что? Может там пусто? Может там совсем не то значение, которое ты ожидаешь. Выведи на экран значение переменной. Думаю там распарсен стандартный чанк вывода опций, а тебе нужно только значение.
                      Константин
                      13 сентября 2022, 20:54
                      0
                      Немного начинаю въезжать вроде.
                      Константин
                      14 сентября 2022, 09:19
                      0
                      Да, вывел тупо название опции и ее значение… Скриншот: disk.yandex.ru/i/f91DptgR2r3KaA
                      Не понял как это помогло получить значение и сохранить в переменную(
                      Артур Шевченко
                      14 сентября 2022, 11:32
                      0
                      А тебе надо сравнить название опции и значение или только значение?
                      Константин
                      14 сентября 2022, 11:51
                      0
                      Только значение
                      Артур Шевченко
                      14 сентября 2022, 14:06
                      1
                      0
                      Да, вывел тупо название опции и ее значение…
                      Зачем вывел и название? если сделать чанк для опции вот таким
                      {foreach $options as $option}   
                                  {if $option.value is array}
                                      {$option.value | join : ', '}
                                  {else}
                                      {$option.value}
                                  {/if}       
                      {/foreach}
                      то в $combustion_chamber попадёт строка со значением, и тогда оператор if сможет корректно сравнить две строки.
                      Константин
                      14 сентября 2022, 16:39
                      0
                      Да, супер, спасибо большое!!! То что надо!!!
                      Артур Шевченко
                      14 сентября 2022, 17:31
                      0
                      Плохо, что ты сам не додумался(((
      Роман
      15 августа 2022, 10:38
      0
      Используйте у производителя поле страна(country), и пропишите, там если не оригинал, скажем(Китай).
      И потом проверяйте
      {$vendor.country=='Китай'? 'Реплика' : 'Оригинал'}
      Или у вас у одного товара может быть несколько производителей?
      Верхний код нужно переписать, так не пишут.
      <div class="stock"><span></span> <span class="status-stock">
      {switch  $available}
      	{case 1}
      		В наличии
      	{case 2}
      		Нет в наличии
      	{case 3}
      		Под заказ
      	{case 4}
      		Ожидается (в дороге)
      	{case default}	
      		Нет в наличии
      {/switch}
      </span></div>
        Константин
        18 августа 2022, 14:22
        0
        Спасибо, статус производителя оригинал/неоригинал вывел в {$_pls['vendor.description']}

        А существует ли возможность настроить фильтр mfilter2?

        Пробую так, не работает
        'filters' => 'msoption|marka,
        		          msoption|model,
                    	ms|vendor.description:vendors,
                    	parent:parents',
                    	
        	'aliases' => 'ms|vendor==vendor,
        			     msoption|marka==marka,
        				 msoption|model==model',
          Роман
          18 августа 2022, 15:27
          0
          'filters' => 'msoption|marka,
          		msoption|model,
                      	msvendor|description
                      	parent:parents',
            Константин
            18 августа 2022, 15:40
            0
            Странно, выводит все равно наименование производителя

            'filters' => 'msoption|marka,
            		          msoption|model,
                        	msvendor|description,
                        	parent:parents',
                        	
            	'aliases' => 'msvendor|description==vendor-status,
              Константин
              18 августа 2022, 15:43
              0
              Извиняюсь, мой косяк, не в тот шаблон указал! Спасибо большое)
                Константин
                18 августа 2022, 15:51
                0
                Не получается tpl присвоить этому полю.
                Пробую так:

                'tplFilter.outer.vendor|msvendor:description' => 'filterCheckboxOuter',
                	        'tplFilter.row.vendor|msvendor:description' => 'filterCheckboxRow',
                ,
                'tplFilter.outer.msvendor|description' => 'filterCheckboxOuter',
                	        'tplFilter.row.msvendor|description' => 'filterCheckboxRow',
                ,
                'tplFilter.outer.msvendor' => 'filterCheckboxOuter',
                	        'tplFilter.row.msvendor' => 'filterCheckboxRow',
                ,
                'tplFilter.outer.msvendor' => 'filterCheckboxOuter',
                	        'tplFilter.row.msvendor' => 'filterCheckboxRow',
                  Константин
                  18 августа 2022, 15:51
                  0
                  Или лучше использовать для него tpl default?
                    Роман
                    18 августа 2022, 15:57
                    0
                    Можно не указывать, там все равно чекбоксы по умолчанию.
                      Роман
                      18 августа 2022, 16:00
                      0
                      Можно попробовать так:
                      msvendor|description:boolean
          Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
          35