Jump to content

Вывод рекомендуемых товаров в информере корзизны.


Recommended Posts

Здравствуйте ув. пользователи.

Прошу помощи хороших знатоков симплы  :)

 

Пытаюсь настроить вывод рекомендуемых товаров в информере корзизны, даже не спрашивайте зачем)) 

Проблема такая.

 

В ajax/cart.php добавил:

$featured = $simpla->products->get_products(array('featured'=>1));
$simpla->design->assign('featured', $featured);

 

Теперь в информере могу вывести foreach featured соответсвенно. Но не работают изображения, цены и кнопка "в корзину". Я прекрасно понимаю что нужно добавлять в ajax/cart "обработчики" всего этого, но опыта не хватает, как не кручу - не выходит. Кто может помочь?

Link to post
Share on other sites

а зачем это делать через аякс карт и обработчики аякс?. у вас же рекомендуемые товары это константа, она не меняется при добавлении/удалении товаров в корзину.

 

выводите как это делается в main.tpl только в cart_informer.tpl

Edited by mishanya
Link to post
Share on other sites

а зачем это делать через аякс карт и обработчики аякс?. у вас же рекомендуемые товары это константа, она не меняется при добавлении/удалении товаров в корзину.

 

выводите как это делается в main.tpl только в cart_informer.tpl

 

 

Fatal error: Call to a member function get_featured_products_plugin() on a non-object in /public_html/compiled/themename/2074eb64c04fb7cff1a0671531a69700ee5804e3.file.cart_informer.tpl.php on line 89
Link to post
Share on other sites

 

Fatal error: Call to a member function get_featured_products_plugin() on a non-object in /public_html/compiled/themename/2074eb64c04fb7cff1a0671531a69700ee5804e3.file.cart_informer.tpl.php on line 89

 

покажите код cart_informer

Edited by mishanya
Link to post
Share on other sites

<div class="card"><a href="/cart" >Корзина</a>
<span class="zero">{if $cart->total_products>0}</span>
<div class="cart">{$cart->total_products}</span></p>
<a href="/cart" ></a>
</div>
</div>

<div class="open-panel">

<div class="products-box {if $cart->purchases|count > 4} scroll{/if}">
{foreach $cart->purchases as $i => $purchase}
<div class="item-in-cart clearfix" id="item-in-cart-{$purchase->variant->id}">
{$image = $purchase->product->images|first}
{if $image}
<div class="image">
<img src="{$image->filename|resize:100:100}" alt="{$product->name|escape}" />
</div>
{/if}
<div class="desc">
<strong><a href="products/{$purchase->product->url}">{$purchase->product->name|escape}{if $purchase->vname}, <span class="light">{$purchase->vname|escape}</span>{/if}</a></strong>
<span class="light-clr qty">
Кол-во: <input type='number' data-delindx='{$i}' class='plusprod' data-min='{$purchase->amount}' data-id='{$purchase->variant->id}' style='width:40px;display:inline-block;' value='{$purchase->amount}'/>
 
<a title="Удалить из корзины" <a href="cart/remove/{$i}"><span class="remove-sign"></span></a>
</span>
</div>
<div class="price">
<strong id="total_cost_informer_{$purchase->variant->id}">{$purchase->total_price|convert} {$currency->sign}</strong>
</div>
</div>
{/foreach}
</div>

<div class="item-in-cart summary clearfix" id="item-in-cart-{$purchase->variant->id}">
<div class="image"> </div>
<div class="desc">Итого:</div>
<div class="price">
<strong class="size-16">{$cart->total_price|convert} {$currency->sign|escape}</strong>
</div>
</div>

<div class="proceed">
<a href="./cart" class="btn btn-danger pull-right bold higher">Оформить заказ <i class="icon-shopping-cart"></i></a>
</div>

</div>
{else}
<div class="cart">
<p class="items"><span class="dark-clr">{$cart->total_products}</span></p>

<a href="./cart" class="btn btn-danger">

</a>
</div>

<div class="open-panel">
<div class="item-in-cart clearfix">
<p class="empty">В корзине нет товаров.</p>
</div>
</div>
{/if}
Link to post
Share on other sites

так как я вам скажу где ошибка если вы убрали ту часть кода в которой ошибка?

 

....

 

Просто в любое место по вашему предложению вставляю 

{get_featured_products var=featured_products}

 

 

И выходит ошибка (ошибка в файле ajax/cart.php)

Link to post
Share on other sites

Что б так работало нужно перенести c view/View.php регистрации ф-и get_featured_products в api/Design.php 

 

К сожалению данный метод не работает (simpla 2.3.3)

Link to post
Share on other sites

Пробуйте в  ajax/cart.php  заменить

   require_once('api/Simpla.php');

   $simpla = new Simpla();

на

   require_once('view/IndexView.php');

   $simpla = new IndexView();

 

 

Спасибо, но все-же вышло по методу  yr4ik

 

Просто когда вставлял в api/Design.php код регистрации плагина

$this->design->smarty->registerPlugin("function", "get_is_new_products",   array($this, 'get_is_new_products_plugin'));

не убрал из него "design->"

Link to post
Share on other sites

1. Дублирование кода - сам по себе некрасивый и порочный метод. А уж когда такое предлагают специалисты, выглядит совсем нехорошо...

2. Представьте, что когда-нибудь Вы захотите изменить этот плагин. В каком месте будете менять? Надо в ДВУХ. Сразу виден недостаток - двойная работа. А в реальности, скорее всего, через некоторое время Вы забудете, что их  два и поменяете только в одном. В результате, очень вероятно, в одних случаях будет срабатывать новый измененный, в других - старый. Если Вы заметите это сразу и поправите, то хорошо. А если не сразу, то уже хуже...

3. А если потом еще Вам какой-то спец посоветует в другом подобном случае сдублировать код в ТРЕТЬЕ МЕСТО...

 

В итоге понемногу уничтожаем главное достоинство Simpla - простоту - и движемся прямым путем к Импере. Неверной дорогой идете, товарищ yr4ik...

Link to post
Share on other sites

1. Дублирование кода - сам по себе некрасивый и порочный метод. А уж когда такое предлагают специалисты, выглядит совсем нехорошо...

2. Представьте, что когда-нибудь Вы захотите изменить этот плагин. В каком месте будете менять? Надо в ДВУХ. Сразу виден недостаток - двойная работа. А в реальности, скорее всего, через некоторое время Вы забудете, что их  два и поменяете только в одном. В результате, очень вероятно, в одних случаях будет срабатывать новый измененный, в других - старый. Если Вы заметите это сразу и поправите, то хорошо. А если не сразу, то уже хуже...

3. А если потом еще Вам какой-то спец посоветует в другом подобном случае сдублировать код в ТРЕТЬЕ МЕСТО...

 

В итоге понемногу уничтожаем главное достоинство Simpla - простоту - и движемся прямым путем к Импере. Неверной дорогой идете, товарищ yr4ik...

 

Почему дублировать? Из view/View.php я его удалил, оставил только в api/Design.php

Link to post
Share on other sites

Таким способом, конечно,  лучше.

Но теперь у Вас get_featured_products в одном классе, а другие подобные - в другом. Тоже как-то странно...

Link to post
Share on other sites

1. Дублирование кода - сам по себе некрасивый и порочный метод. А уж когда такое предлагают специалисты, выглядит совсем нехорошо...

2. Представьте, что когда-нибудь Вы захотите изменить этот плагин. В каком месте будете менять? Надо в ДВУХ. Сразу виден недостаток - двойная работа. А в реальности, скорее всего, через некоторое время Вы забудете, что их  два и поменяете только в одном. В результате, очень вероятно, в одних случаях будет срабатывать новый измененный, в других - старый. Если Вы заметите это сразу и поправите, то хорошо. А если не сразу, то уже хуже...

3. А если потом еще Вам какой-то спец посоветует в другом подобном случае сдублировать код в ТРЕТЬЕ МЕСТО...

 

В итоге понемногу уничтожаем главное достоинство Simpla - простоту - и движемся прямым путем к Импере. Неверной дорогой идете, товарищ yr4ik...

 

Не прочитал внимательно - теперь начинаешь!

Про дублирование я ничего не писал. Сказал что нужно ПЕРЕНЕСТИ!

 

По поводу того что подобные функции теперь в другом классе:

 

Инициализацией View класса - ты вызываешь инициализацию целой кучи не нужных для нас методов и классов.

 

Тут из выходов - только 1. То что выполняется в ф-и get_featured_products нужно продублировать в ajax контроллере.

Но что тогда? Опять же дублирование кода... Так что как лучше?

Edited by yr4ik
Link to post
Share on other sites

Не прочитал внимательно - теперь начинаешь!

Про дублирование я ничего не писал. Сказал что нужно ПЕРЕНЕСТИ!

Сознаю свою ошибку. Прочитал невнимательно.

По поводу того что подобные функции теперь в другом классе:

 

Инициализацией View класса - ты вызываешь инициализацию целой кучи не нужных для нас методов и классов.

 

Тут из выходов - только 1. То что выполняется в ф-и get_featured_products нужно продублировать в ajax контроллере.

Но что тогда? Опять же дублирование кода... Так что как лучше?

Да, есть такой момент. Что лучше - вопрос непростой.
Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...