Сообщение #3 wisma » 12.12.2017, 00:09
AlexusTdV писал(а):Не работает. при добавлении
"$this->design->smarty->registerPlugin("function", "get_products", array($this, 'get_products_plugin'));"
Ошибка 500
В инструкции вы не правильно выполнили
первый пункт, написано
после чего добавить
я добавил почти
в конец:
Код: Выделить всё
/*Выборка групп баннеров*/
$this->design->smarty->registerPlugin("function", "get_banner", array($this, 'get_banner_plugin'));
/*Универсальный виджет для товаров*/
$this->design->smarty->registerPlugin("function", "get_products", array($this, 'get_products_plugin'));
/*Иницализация капчи*/
$this->design->smarty->registerPlugin("function", "get_captcha", array($this, 'get_captcha_plugin'));
Тестировалось на Okay pro 2.1.3 С хорошим каталогом товаров и
никаких проблем.
Добавлено спустя 11 минут 8 секунд:transinffo писал(а):Всем привет.
Тз:
1. okaycms 2.1 lite шаблон stok.
2. Вывести товары определенной категории на главной странице.
Решение взято
здесь.
1. \view\View.php в части // Настраиваем плагины для смарти добавим наш:
Код: Выделить всё
/*Универсальный виджет для товаров*/
$this->design->smarty->registerPlugin("function", "get_products", array($this, 'get_products_plugin'));
далее под:
добавим:
Код: Выделить всё
public function get_products_plugin($params, &$smarty)
{
if(!isset($params['visible']))
$params['visible'] = 1;
if(!empty($params['var']))
{
foreach($this->products->get_products($params) as $p)
$products[$p->id] = $p;
if(!empty($products))
{
// id выбранных товаров
$products_ids = array_keys($products);
// Выбираем варианты товаров
$variants = $this->variants->get_variants(array('product_id'=>$products_ids, 'in_stock'=>true));
// Для каждого варианта
foreach($variants as &$variant)
{
// добавляем вариант в соответствующий товар
$products[$variant->product_id]->variants[] = $variant;
}
// Выбираем изображения товаров
$images = $this->products->get_images(array('product_id'=>$products_ids));
foreach($images as $image)
$products[$image->product_id]->images[] = $image;
foreach($products as &$product)
{
if(isset($product->variants[0]))
$product->variant = $product->variants[0];
if(isset($product->images[0]))
$product->image = $product->images[0];
}
}
$smarty->assign($params['var'], $products);
}
}
2. \design\stok_1\html\main.tpl - в шаблон для главной добавим такое:
Код: Выделить всё
{get_products var=custom_products category_id=29 limit=20}
{if $custom_products}
<!-- Список товаров-->
<div id="fn-products_content" class="row gridBlock">
{foreach $custom_products as $product}
<!-- Товар -->
<div class="col-xs-12 col-md-4 col-lg-4 col-xl-3 product">
<div class="fn-product card anim-all">
<div class="card-block fn-transfer">
{if $product->image}
<div class="card-image image m-b-sm">
<img class="fn-img" src="{$product->image->filename|resize:212:212}" alt="{$product->name|escape}" title="{$product->name|escape}" style="opacity: 0.96;">
<a class="fn-zoom over-all" href="products/{$product->url}"></a>
</div>
{/if}
<h3 class="card-title m-a-0 p-x-sm" data-product="{$product->variant->id}">
<a href="/products/{$product->url}">{$product->name|escape}</a>
</h3>
<div class="row m-x-0 card-price price">
<div class="col-xs-12">
<span class="fn-price">{$product->variant->price|convert}</span> {$currency->sign|escape}
</div>
</div>
<form class="fn-variants okaycms" action="/cart">
<div class="input-group btn-group">
<button class="btn ico-btn_cart fn-is_stock" title="Купить" data-language="tiny_products_add_cart" type="submit"></button>
<a class="btn ico-btn_compare fn-comparison okaycms" href="#" title="В сравнение" data-result-text="Из сравнения" data-id="{$product->variant->id}"></a>
<a href="#" class="btn ico-btn_wishlist fn-wishlist okaycms" data-id="{$product->variant->id}" title="В закладки" data-result-text="Из закладок"></a>
</div>
<select name="variant" class="hidden fn-variant okaycms form-control c-select hidden-xs-up">
<option value="{$product->variant->id}" data-price="{$product->variant->price|convert}" data-stock="50" selected="selected">{$product->name|escape}</option>
</select>
</form>
<div class="product-labels">
</div>
</div>
</div>
</div>
<!-- Товар (The End) -->
{/foreach}
</div>
<!-- Список товаров (The End) -->
{/if}
в category_id пишем id нужной категории. Наслаждаемся.
Можно еще чучуть изменив (как писал автор = универсальный плагин) вывод Новых товаров из определенной категории... ( Okay cms lite или pro 2+ )Добавить после пункта
2. \design\stok_1\html\main.tpl - в шаблон для главной добавим такое:
Код: Выделить всё
{get_products var=new_products category_id=25 limit=4}
{if $new_products}
<!-- Список товаров-->
<div id="fn-products_content" class="row gridBlock">
{foreach $new_products as $product}
Вместо:Код: Выделить всё
{get_products var=custom_products category_id=29 limit=20}
{if $custom_products}
<!-- Список товаров-->
<div id="fn-products_content" class="row gridBlock">
{foreach $custom_products as $product}
В итоге должно выйти вот так вот: (готовый код, как вывести категории на главной в Okay cms 2+)
Шаблон Stok (под другие уже дорабатывайте сами)
{get_products var=new_products category_id=25 limit=4}
{if $new_products}
<!-- Список товаров-->
<div id="fn-products_content" class="row gridBlock">
{foreach $new_products as $product}
<!-- Товар -->
<div class="col-xs-12 col-md-4 col-lg-4 col-xl-3 product">
<div class="fn-product card anim-all">
<div class="card-block fn-transfer">
{if $product->image}
<div class="card-image image m-b-sm">
<img class="fn-img" src="{$product->image->filename|resize:212:212}" alt="{$product->name|escape}" title="{$product->name|escape}" style="opacity: 0.96;">
<a class="fn-zoom over-all" href="products/{$product->url}"></a>
</div>
{/if}
<h3 class="card-title m-a-0 p-x-sm" data-product="{$product->variant->id}">
<a href="/products/{$product->url}">{$product->name|escape}</a>
</h3>
<div class="row m-x-0 card-price price">
<div class="col-xs-12">
<span class="fn-price">{$product->variant->price|convert}</span> {$currency->sign|escape}
</div>
</div>
<form class="fn-variants okaycms" action="/cart">
<div class="input-group btn-group">
<button class="btn ico-btn_cart fn-is_stock" title="Купить" data-language="tiny_products_add_cart" type="submit"></button>
<a class="btn ico-btn_compare fn-comparison okaycms" href="#" title="В сравнение" data-result-text="Из сравнения" data-id="{$product->variant->id}"></a>
<a href="#" class="btn ico-btn_wishlist fn-wishlist okaycms" data-id="{$product->variant->id}" title="В закладки" data-result-text="Из закладок"></a>
</div>
<select name="variant" class="hidden fn-variant okaycms form-control c-select hidden-xs-up">
<option value="{$product->variant->id}" data-price="{$product->variant->price|convert}" data-stock="50" selected="selected">{$product->name|escape}</option>
</select>
</form>
<div class="product-labels">
</div>
</div>
</div>
</div>
<!-- Товар (The End) -->
{/foreach}
</div>
<!-- Список товаров (The End) -->
{/if}
[quote="AlexusTdV"]Не работает. при добавлении
"$this->design->smarty->registerPlugin("function", "get_products", array($this, 'get_products_plugin'));"
Ошибка 500[/quote]
В инструкции вы не правильно выполнили [u]первый пункт[/u], написано [b]после чего[/b] добавить
[code]// Настраиваем плагины для смарти[/code]
я добавил почти [b]в конец[/b]:
[code] /*Выборка групп баннеров*/
$this->design->smarty->registerPlugin("function", "get_banner", array($this, 'get_banner_plugin'));
/*Универсальный виджет для товаров*/
$this->design->smarty->registerPlugin("function", "get_products", array($this, 'get_products_plugin'));
/*Иницализация капчи*/
$this->design->smarty->registerPlugin("function", "get_captcha", array($this, 'get_captcha_plugin'));[/code]
[b]Тестировалось на Okay pro 2.1.3[/b] С хорошим каталогом товаров и [u]никаких проблем[/u].
[quote="transinffo"]Всем привет.
Тз:
1. okaycms 2.1 lite шаблон stok.
2. Вывести товары определенной категории на главной странице.
Решение взято [url=http://simpla-addons.org/blog/modules/2xx-universalnyj-vidzhet-dlya-tovarov]здесь[/url].
1. \view\View.php в части // Настраиваем плагины для смарти добавим наш:
[code]
/*Универсальный виджет для товаров*/
$this->design->smarty->registerPlugin("function", "get_products", array($this, 'get_products_plugin'));
[/code]
далее под:
[code]
function fetch() {
return false;
}
[/code]
добавим:
[code]
public function get_products_plugin($params, &$smarty)
{
if(!isset($params['visible']))
$params['visible'] = 1;
if(!empty($params['var']))
{
foreach($this->products->get_products($params) as $p)
$products[$p->id] = $p;
if(!empty($products))
{
// id выбранных товаров
$products_ids = array_keys($products);
// Выбираем варианты товаров
$variants = $this->variants->get_variants(array('product_id'=>$products_ids, 'in_stock'=>true));
// Для каждого варианта
foreach($variants as &$variant)
{
// добавляем вариант в соответствующий товар
$products[$variant->product_id]->variants[] = $variant;
}
// Выбираем изображения товаров
$images = $this->products->get_images(array('product_id'=>$products_ids));
foreach($images as $image)
$products[$image->product_id]->images[] = $image;
foreach($products as &$product)
{
if(isset($product->variants[0]))
$product->variant = $product->variants[0];
if(isset($product->images[0]))
$product->image = $product->images[0];
}
}
$smarty->assign($params['var'], $products);
}
}
[/code]
2. \design\stok_1\html\main.tpl - в шаблон для главной добавим такое:
[code]
{get_products var=custom_products category_id=29 limit=20}
{if $custom_products}
<!-- Список товаров-->
<div id="fn-products_content" class="row gridBlock">
{foreach $custom_products as $product}
<!-- Товар -->
<div class="col-xs-12 col-md-4 col-lg-4 col-xl-3 product">
<div class="fn-product card anim-all">
<div class="card-block fn-transfer">
{if $product->image}
<div class="card-image image m-b-sm">
<img class="fn-img" src="{$product->image->filename|resize:212:212}" alt="{$product->name|escape}" title="{$product->name|escape}" style="opacity: 0.96;">
<a class="fn-zoom over-all" href="products/{$product->url}"></a>
</div>
{/if}
<h3 class="card-title m-a-0 p-x-sm" data-product="{$product->variant->id}">
<a href="/products/{$product->url}">{$product->name|escape}</a>
</h3>
<div class="row m-x-0 card-price price">
<div class="col-xs-12">
<span class="fn-price">{$product->variant->price|convert}</span> {$currency->sign|escape}
</div>
</div>
<form class="fn-variants okaycms" action="/cart">
<div class="input-group btn-group">
<button class="btn ico-btn_cart fn-is_stock" title="Купить" data-language="tiny_products_add_cart" type="submit"></button>
<a class="btn ico-btn_compare fn-comparison okaycms" href="#" title="В сравнение" data-result-text="Из сравнения" data-id="{$product->variant->id}"></a>
<a href="#" class="btn ico-btn_wishlist fn-wishlist okaycms" data-id="{$product->variant->id}" title="В закладки" data-result-text="Из закладок"></a>
</div>
<select name="variant" class="hidden fn-variant okaycms form-control c-select hidden-xs-up">
<option value="{$product->variant->id}" data-price="{$product->variant->price|convert}" data-stock="50" selected="selected">{$product->name|escape}</option>
</select>
</form>
<div class="product-labels">
</div>
</div>
</div>
</div>
<!-- Товар (The End) -->
{/foreach}
</div>
<!-- Список товаров (The End) -->
{/if}
[/code]
в category_id пишем id нужной категории. Наслаждаемся.[/quote]
[color=#BF40FF]Можно еще чучуть изменив (как писал автор = универсальный плагин) вывод Новых товаров из определенной категории... ( Okay cms lite или pro 2+ )[/color]
Добавить после пункта
[quote]2. \design\stok_1\html\main.tpl - в шаблон для главной добавим такое:
[/quote]
[code] {get_products var=new_products category_id=25 limit=4}
{if $new_products}
<!-- Список товаров-->
<div id="fn-products_content" class="row gridBlock">
{foreach $new_products as $product}[/code]
[b][u]Вместо:[/u][/b]
[code]{get_products var=custom_products category_id=29 limit=20}
{if $custom_products}
<!-- Список товаров-->
<div id="fn-products_content" class="row gridBlock">
{foreach $custom_products as $product}[/code]
В итоге должно выйти вот так вот: (готовый код, как вывести категории на главной в Okay cms 2+)
[u]Шаблон Stok[/u] [tt](под другие уже дорабатывайте сами)[/tt]
[quote]
{get_products var=new_products category_id=25 limit=4}
{if $new_products}
<!-- Список товаров-->
<div id="fn-products_content" class="row gridBlock">
{foreach $new_products as $product}
<!-- Товар -->
<div class="col-xs-12 col-md-4 col-lg-4 col-xl-3 product">
<div class="fn-product card anim-all">
<div class="card-block fn-transfer">
{if $product->image}
<div class="card-image image m-b-sm">
<img class="fn-img" src="{$product->image->filename|resize:212:212}" alt="{$product->name|escape}" title="{$product->name|escape}" style="opacity: 0.96;">
<a class="fn-zoom over-all" href="products/{$product->url}"></a>
</div>
{/if}
<h3 class="card-title m-a-0 p-x-sm" data-product="{$product->variant->id}">
<a href="/products/{$product->url}">{$product->name|escape}</a>
</h3>
<div class="row m-x-0 card-price price">
<div class="col-xs-12">
<span class="fn-price">{$product->variant->price|convert}</span> {$currency->sign|escape}
</div>
</div>
<form class="fn-variants okaycms" action="/cart">
<div class="input-group btn-group">
<button class="btn ico-btn_cart fn-is_stock" title="Купить" data-language="tiny_products_add_cart" type="submit"></button>
<a class="btn ico-btn_compare fn-comparison okaycms" href="#" title="В сравнение" data-result-text="Из сравнения" data-id="{$product->variant->id}"></a>
<a href="#" class="btn ico-btn_wishlist fn-wishlist okaycms" data-id="{$product->variant->id}" title="В закладки" data-result-text="Из закладок"></a>
</div>
<select name="variant" class="hidden fn-variant okaycms form-control c-select hidden-xs-up">
<option value="{$product->variant->id}" data-price="{$product->variant->price|convert}" data-stock="50" selected="selected">{$product->name|escape}</option>
</select>
</form>
<div class="product-labels">
</div>
</div>
</div>
</div>
<!-- Товар (The End) -->
{/foreach}
</div>
<!-- Список товаров (The End) -->
{/if}
[/quote]