Перейти к содержанию
Официальный форум поддержки Simpla

Рекомендуемые сообщения

Ещё один вопрос.
Хочу что бы в url автоматически добавлялся артикул (как бренд и категория)
В шаблоне product.tpl есть функция

function set_meta()
{
var category_name = item_form.category_id.options[item_form.category_id.selectedIndex].getAttribute('category_name');
var brand_name = item_form.brand_id.options[item_form.brand_id.selectedIndex].getAttribute('brand_name');
var product_name = item_form.model.value;
var sku_name = ???;

..........
..........

// Url
if(!url_touched)
item_form.url.value = generate_url(category_name, brand_name, product_name, sku_name);

}

я добавил в неё параметр sku_name.
А вот как из формы вытащить переменную sku я не знаю.
var sku_name = ???;
перепробовал кучу вариантов, но ни один из них не работает.
Может кто нибудь подскажет?

Ссылка на сообщение
Поделиться на другие сайты

Дело в том, что артиколов может быть несколько.
Надо как-то на javascript вытащить его из этого:
<ul id=product_variants class=sortable>
{if $Item->variants}
{foreach from=$Item->variants item=variant name=variants}
<li>
<div class=variant_move><img {if $Item->variants|@count<=1}style='display:none;'{/if} src='images/move.gif'></div>
<div class=variant_name><input type=text name=variants[name][{$variant->variant_id}] value='{$variant->name|escape}' {if $Item->variants|@count<=1}id=first_variant_name style='display:none;'{/if}><input type=hidden name=variants[id][{$variant->variant_id}] value='{$variant->variant_id}'> <a href='#' class=add_variant id=add_multivariants {if $Item->variants|@count>1}style='display:none;'{/if}>Добавить вариант</a></div>
<div class=variant_sku><input type=text name=variants[sku][{$variant->variant_id}] value='{$variant->sku|escape}'></div>
<div class=variant_price><input type=text name=variants[price][{$variant->variant_id}] value='{$variant->price|escape}'></div>
<div class=variant_stock><input type=text name=variants[stock][{$variant->variant_id}] value='{$variant->stock|escape}'></div>
<div class=variant_delete><a {if $Item->variants|@count<=1}style='display:none;'{/if} href='#' class=delete_variant><img src='images/delete_variant.gif'></a></div>
</li>
{/foreach}

Ссылка на сообщение
Поделиться на другие сайты

Я Matrix'у говорил в скайпе (или асе от этом). Вся соль в том, что у товара с 1 вариантом как такового sku нету, а у товара с множеством - смысла нет делать подобное.
Единственный выход - вручную дописывать sku в url после генерации по названию.

Ссылка на сообщение
Поделиться на другие сайты

Артём, у товара с 1 вариантом sku есть, я его нормально использую в выводе товара. Только вот как его в скрипт засунуть, никак не найду решение.
Думал может сам создатель знает :-)
Решение нужно имеенно если вариант один, для множества не надо.

Ссылка на сообщение
Поделиться на другие сайты

# Matrix

В теле функции set_meta() файла admin/templates/products.tpl вместо следующих указанных вами строк

// Url
if(!url_touched)
item_form.url.value = generate_url(category_name, brand_name, product_name, product_description);

напишите так

// Url
if (!url_touched)
{/literal}
{if $Item->variants && ($Item->variants|@count == 1) && $Item->variants[0]->sku}
item_form.url.value = generate_url(category_name, brand_name, product_name + ' {$Item->variants[0]->sku|escape}');
{else}
item_form.url.value = generate_url(category_name, brand_name, product_name);
{/if}
{literal}

В данном случае артикул подставится в конец URL, но только если для товара этот артикул был задан. Для иных товаров URL будет обычным, то есть без артикула.
Если нужно, чтобы работало для любых товаров, вне зависимости от количества вариантов в них, тогда строки напишите так

// Url
if (!url_touched)
{/literal}
{if $Item->variants && ($Item->variants|@count >= 1) && $Item->variants[0]->sku}
item_form.url.value = generate_url(category_name, brand_name, product_name + ' {$Item->variants[0]->sku|escape}');
{else}
item_form.url.value = generate_url(category_name, brand_name, product_name);
{/if}
{literal}

В этом случае в URL для многовариантых товаров попадет артикул первого варианта в списке.

----------------------------------------------------

Если хотите, чтобы артикул оказался в начале URL, тогда строку

item_form.url.value = generate_url(category_name, brand_name, product_name + ' {$Item->variants[0]->sku|escape}');

напишите так

item_form.url.value = generate_url('{$Item->variants[0]->sku|escape} ' + category_name, brand_name, product_name);

Ссылка на сообщение
Поделиться на другие сайты

Проверил, все работает. Создаю новый товар, ввожу название, например "принтер", ввожу артикул "art0001", сохраняю. Сначала url поставился "принтер". Теперь захожу редактировать этот товар. Начинаю изменять его название, и в url сразу появляется "принтер_art0001".

Возможная причина "undefined" в вашем случае - есть какие-то принципиальные изменения/отличия в коде вашего файла products.tpl, из-за чего Smarty дает "undefined" на обращение к $Item->variants[0]->sku (если из вашей реплики я правильно понял место появления ошибки).

Вообще говоря, так как при создании товара ни $Item->variants, ни артикула в нем еще нет, то чтобы прикрепление артикула к url работало эффектно, нужно подключить событие onchange поля артикула у первого варианта к функции set_meta, а в ней убрать проверку условия if(!url_touched). Однако при удалении этого условия исчезнет возможность задавать url свой, автоматически не регенерируемый при изменении названия, категории, бренда, артикула товара.

Ссылка на сообщение
Поделиться на другие сайты

Матрикс, то что предложил АИматрикс - оно не отработает потому, что УРЛ генерится при создании товара, а массив вариантов есть только при редактировании. Чтобы работало так как Вы хотите - надо переписать функцию генерации... Дело в том, что она отрабатывает после ввода названия, а вариант находятся уже после этого названия.
Если очень-очень надо - напишите мне в асю или скайп - решим проблему за вознаграждение (работа такая).

Ссылка на сообщение
Поделиться на другие сайты

да это в общем то не проблема, просто захотелось сделать так. но раз это так сложно, то обойдусь. всем спасибо.

Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
×
×
  • Создать...