Вывести свойства товара Simpla

Вывести свойства товара Simpla

В замечательном движке для Интернет-магазинов Simpla есть отличная возможность задать товару некоторые свойства. Например, для мебели это может быть: размеры, материал, цвет и другие. На мой взгляд, это очень нужная возможность. Но есть очевидные минусы реализации...

Например, по-умолчанию можно вывести список этих свойств (вида: Имя и Значение) только в карточку товара. А иногда появляется необходимость отобразить эти свойства в категории, общем списке товаров или на главной странице (в новинках, рекомендуемых или акционных товарах). Сейчас мы научимся это делать.

Для начала вспомним, как вывести список свойств в карточку товара (выводится просто, без изменений в файлах сборки). Заходим в административную часть сайта, шаблоны, product.tpl и в нужное место вставляем:

{if $product->features}
<!-- Характеристики товара -->
<h2>Характеристики</h2>
<ul class="features">
{foreach $product->features as $f}
<li>
	<label>{$f->name}</label>
	<span>{$f->value}</span>
</li>
{/foreach}
</ul>
<!-- Характеристики товара (The End)-->
{/if}

Обратите внимание, что в стандартном шаблоне этот вывод уже сделан.

Разберемся, как вывести те же свойства в категорию (или общую ленту) товаров

Я делаю все изменения на версии Simpla CMS 2.3.3. Открываем файл на фтп - /view/ProductsView.php. Находим следующий отрывок кода (он закомментирован, у меня располагается на 178-182 строчках кода):

/*
$properties = $this->features->get_options(array('product_id'=>$products_ids));
foreach($properties as $property)
    $products[$property->product_id]->options[] = $property;
*/
 

Теперь меняем его (вместе с комментариями) на:

$properties = $this->features->get_product_options($products_ids);
foreach($properties as $property) {
    $products[$property->product_id]->options[] = $property;
}    

Вот и все. Теперь в шаблон products.tpl в нужное место пишем:

{if $product->options}
<!-- Характеристики товара -->
<ul class="features">
{foreach $product->options as $f}
<li>
	<label>{$f->name}</label>
	<span>{$f->value}</span>
</li>
{/foreach}
</ul>
<!-- Характеристики товара (The End)-->
{/if}

Отлично, все работает:)

Обновлено 12.02.2015

В особых случаях в связи с нюансом переноса характеристик (а именно при использовании импорта), данный код может не работать (или выводить лишнюю информацию). Тогда можно воспользоваться следующим кодом:

<!-- Характеристики товара -->
<ul class="features">
{if $product->options}
{foreach $product->options as $f}
{if ($f->name) and ($f->value)}
<li>
		<label>{$f->name}</label>
		<span>{$f->value}</span>
</li>
{/if}
{/foreach}
{/if}
</ul>
<!-- Характеристики товара (The End)-->

Здесь выполняется проверка на наличие названия свойства и значения. Если чего-то не хватает, то свойство не выводится.

Вывод характеристик (свойств) товара на главную страницу

1. В блок Рекомендуемые товары:

Открываем на фтп файл /view/View.php, находим функцию get_featured_products_plugin и в нее вставляем:

$properties = $this->features->get_product_options($products_ids);
foreach($properties as $property)  {
$products[$property->product_id]->options[] = $property;
}

Я вставил на 208 строку.

2. В блок Новинки:

Открываем тот же файл (/view/View.php), находим функцию get_new_products_plugin и в нее вставляем:

$properties = $this->features->get_product_options($products_ids);
foreach($properties as $property)  {
$products[$property->product_id]->options[] = $property;
}

Я вставил на 254 строку (без учета вставки кода в рекомендуемые товары).

3. В блок Акционные товары:

Все тот же файл /view/View.php, находим функцию get_discounted_products_plugin, вставляем в нее код:

$properties = $this->features->get_product_options($products_ids);
foreach($properties as $property)  {
$products[$property->product_id]->options[] = $property;
}

Я вставил на 299 строку кода (без учета 2-х предыдущих правок).

Как теперь вывести добавленные свойства на главную страницу? Очень просто. В шаблоне main.tpl в нужное место (в блок Рекомендуемые товары, Новинки или Акционные товары, а можно сразу во все) добавляем следующий код:

{if $product->options}
<!-- Характеристики товара -->
<ul class="features">
{foreach $product->options as $f}
<li>
	<label>{$f->name}</label>
	<span>{$f->value}</span>
</li>
{/foreach}
</ul>
<!-- Характеристики товара (The End)-->
{/if}

Вот и все:) Радуемся.

P.S. Если кто-то испытывает трудности с редактированием вышеописанных файлов на фтп, можете скачать мои, в которых сделан вывод везде (категории товаров, новинки, рекомендуемые и акционные товары). Не забывайте только, что мои файлы взяты с версии движка 2.3.3

26.03.17
Для просмотра сайта обновите браузер.