Добавление свойства в название товара

Правила раздела: faq.php?mode=okay
Модератор: Модераторы

evgennova
evgennova
Репутация: 13
Сообщения: 201
Зарегистрирован: 17.02.2021
С нами: 3 года 1 месяц

Сообщение #1 evgennova » 24.06.2021, 09:51

Версия 4.1
Подскажите как можно вывести/добавить название свойства/свойств к названию товара ?

код - уж слишком как то намучено

Код: Выделить всё

{if $product->features}
{foreach $product->features as $f}
{foreach $f->values as $value}
{if $f->id == 1}
{$value->value|escape}
{/if}
{/foreach}
{/foreach}
{/if}
Версия 4.3.0 :smoke:

irekunenko
irekunenko
Репутация: 0
Сообщения: 8
Зарегистрирован: 30.09.2021
С нами: 2 года 5 месяцев

Сообщение #2 irekunenko » 12.10.2021, 10:21

evgennova писал(а):Версия 4.1
Подскажите как можно вывести/добавить название свойства/свойств к названию товара ?

код - уж слишком как то намучено

Код: Выделить всё

{if $product->features}
{foreach $product->features as $f}
{foreach $f->values as $value}
{if $f->id == 1}
{$value->value|escape}
{/if}
{/foreach}
{/foreach}
{/if}

Удалось разобраться?

GolDen
GolDen
Репутация: 0
Сообщения: 5
Зарегистрирован: 20.06.2022
С нами: 1 год 8 месяцев

Сообщение #3 GolDen » 24.09.2023, 14:11

Аналогичный вопрос

В файле \design\okay_shop_1\html\product.tpl делаю следующие изменения

Код: Выделить всё

      <h1 class="block__heading">
         <span data-product="{$product->id}" itemprop="name">{$h1|escape}</span>
         <span class="fn_variantname" data-product="{$product->id}" itemprop="variant">{$product->variant->name|escape}</span>
      </h1>


В файле \design\okay_shop_1\js\okay.js делаю следующие изменения

Код: Выделить всё

* Смена варианта в превью товара и в карточке */
$(document).on("change", ".fn_variant", function () {
   var selected = $(this).children(":selected"),

   parent = selected.closest(".fn_product"),
   price = parent.find(".fn_price"),
   cprice = parent.find(".fn_old_price"),
   sku = parent.find(".fn_sku"),
   variantname = parent.find(".fn_variantname"),
   stock = parseInt(selected.data("stock")),
   amount = parent.find('input[name="amount"]'),
   camoun = parseInt(amount.val()),
   units = selected.data("units");
   price.html(selected.data("price"));
   amount.data("max", stock);
  ...................
  /* Название варианта */
  if (selected.data("name")) {
   variantname.text(selected.data("name"));
   parent.find(".fn_variantname").removeClass("hidden-xs-up");
  } else {
   variantname.text("");
   parent.find(".fn_variantname").addClass("hidden-xs-up");
  }
  ...........


Но это не работает. По идее еще нужно где-то подтягивать сами данные (из столбца name таблицы ok_variants или ok_lang_variants ), так как если тут

Код: Выделить всё

  /* Название варианта */
  if (selected.data("name")) {
   variantname.text(selected.data("name"));
   parent.find(".fn_variantname").removeClass("hidden-xs-up");
  } else {
   variantname.text("");
   parent.find(".fn_variantname").addClass("hidden-xs-up");
  }

сделать замену "name" на к примеру "sku" - то все замечательно работает

П.С. Уже после написания увидел что тема немного другая. Тут про свойства, а мне нужно добавить название варианта товара к названию товара.

korshunov
korshunov
Репутация: 146
Сообщения: 1854
Зарегистрирован: 03.12.2015
С нами: 8 лет 3 месяца
Skype

Сообщение #4 korshunov » 25.09.2023, 06:05

GolDen писал(а):По идее еще нужно где-то подтягивать сами данные (из столбца name таблицы ok_variants или ok_lang_variants )

Это нужно не только по туманной "идее", это надо делать реально в строках

Код: Выделить всё

                                {foreach $product->variants as $v}
                                    <option{if $product->variant->id == $v->id} selected{/if} value="{$v->id}" data-price="{$v->price|convert}" data-name="{$v->name}" data-stock="{$v->stock}"{if $v->compare_price > 0} data-cprice="{$v->compare_price|convert}"{if $v->compare_price>$v->price && $v->price>0} data-discount="{round((($v->price-$v->compare_price)/$v->compare_price)*100, 2)}&nbsp;%"{/if}{/if}{if $v->sku} data-sku="{$v->sku|escape}"{/if} {if $v->units}data-units="{$v->units}"{/if}>{if $v->name}{$v->name|escape}{else}{$product->name|escape}{/if}</option>
                                {/foreach}


GolDen
GolDen
Репутация: 0
Сообщения: 5
Зарегистрирован: 20.06.2022
С нами: 1 год 8 месяцев

Сообщение #5 GolDen » 25.09.2023, 14:32

Спасибо что ответили.

Код: Выделить всё

                                {foreach $product->variants as $v}
                                    <option{if $product->variant->id == $v->id} selected{/if} value="{$v->id}" data-price="{$v->price|convert}" data-name="{$v->name}" data-stock="{$v->stock}"{if $v->compare_price > 0} data-cprice="{$v->compare_price|convert}"{if $v->compare_price>$v->price && $v->price>0} data-discount="{round((($v->price-$v->compare_price)/$v->compare_price)*100, 2)}&nbsp;%"{/if}{/if}{if $v->sku} data-sku="{$v->sku|escape}"{/if} {if $v->units}data-units="{$v->units}"{/if}>{if $v->name}{$v->name|escape}{else}{$product->name|escape}{/if}</option>
                                {/foreach}


Этот код я видел, но он выводит выпадающий список с вариантом товара. А мне необходимо при смене варианта, добавлять в его название выбранный вариант. Вставка этого куска

Код: Выделить всё

{if $v->name}{$v->name|escape}


не решает проблему (сразу так пробовал).

Добавлено спустя 2 часа 29 минут:
Или имеете в виду что сюда

Код: Выделить всё

<select name="variant" class="fn_variant variant_select fn_select2 select2-hidden-accessible" data-select2-id="1" tabindex="-1" aria-hidden="true">
   <option selected="" value="284" data-price="12 900,00" data-stock="50" data-sku="ccv6346" data-select2-id="3">Оранжевый</option>
   <option value="285" data-price="13 900,00" data-stock="50" data-sku="ccv6546">Белый</option>
   <option value="286" data-price="14 000,00" data-stock="0" data-sku="ccv6586">Бежевый</option>
</select>

Нужно добавить еще data-variant="....." , куда вывести еще вариант?

П.С. Я прошу прощения что вопросу могут звучать глупо, но я первый раз работаю с этой системой (не совсем понимаю устройство CMS, и что у нее за что отвечает), и с файлами .tpl

korshunov
korshunov
Репутация: 146
Сообщения: 1854
Зарегистрирован: 03.12.2015
С нами: 8 лет 3 месяца
Skype

Сообщение #6 korshunov » 25.09.2023, 17:19

У меня работает так (сделано по аналогии в стандартном шаблоне 4.4.0):

Код: Выделить всё

                                {foreach $product->variants as $v}
                                    <option{if $product->variant->id == $v->id} selected{/if} value="{$v->id}" data-price="{$v->price|convert}" data-name="{$v->name}" data-stock="{$v->stock}"{if $v->compare_price > 0} data-cprice="{$v->compare_price|convert}"{if $v->compare_price>$v->price && $v->price>0} data-discount="{round((($v->price-$v->compare_price)/$v->compare_price)*100, 2)}&nbsp;%"{/if}{/if}{if $v->sku} data-sku="{$v->sku|escape}"{/if} {if $v->units}data-units="{$v->units}"{/if}>{if $v->name}{$v->name|escape}{else}{$product->name|escape}{/if}</option>
                                {/foreach}

GolDen
GolDen
Репутация: 0
Сообщения: 5
Зарегистрирован: 20.06.2022
С нами: 1 год 8 месяцев

Сообщение #7 GolDen » 25.09.2023, 17:59

Но как потом эти данные вывести сюда?

Код: Выделить всё

      <h1 class="block__heading">
         <span data-product="{$product->id}" itemprop="name">{$h1|escape}</span>
         <span class="fn_variantname" data-product="{$product->id}" itemprop="variant">{$product->variant->name|escape}</span>
      </h1>

У меня выводится при загрузке странице самый первый вариант, и при изменении выбора через выпадающий список ничего не меняется.

Добавлено спустя 12 минут 53 секунды:
Большое спасибо!!!!! Разобрался


Название раздела: Полезные решения для OkayCMS
Правила раздела: faq.php?mode=okay

Быстрый ответ


Введите код в точности так, как вы его видите. Регистр символов не имеет значения.
Код подтверждения

   

Вернуться в «Полезные решения для OkayCMS»

Кто сейчас на форуме (по активности за 5 минут)

Сейчас этот раздел просматривают: 1 гость