Jump to content

Recommended Posts

Приветствую всех!

 

Я тут пытаюсь в блоке "Вы смотрели" (Недавно просмотренные товары) вставить те же данные, что и везде, т.е. для каждого товара своя цена, старая цена, вариант, кнопка "в корзину".

К сожалению, отображаются только картинки товаров, а вместе цена "Нет в наличии".

 

Быть может, кто доработал этот блок?!

Если не сложно, выложите пожалуйста это решение.

 

Спасибо большое!

 

Link to post
Share on other sites

замените функцию public function get_browsed_products($params, &$smarty) в view/View.php на эту

public function get_browsed_products($params, &$smarty)
{
	if(!empty($_COOKIE['browsed_products']))
	{
		$browsed_products_ids = explode(',', $_COOKIE['browsed_products']);
		$browsed_products_ids = array_reverse($browsed_products_ids);
		if(isset($params['limit']))
			$browsed_products_ids = array_slice($browsed_products_ids, 0, $params['limit']);

		$products = array();
		foreach($this->products->get_products(array('id'=>$browsed_products_ids, 'visible'=>1)) as $p)
			$products[$p->id] = $p;

		// Выбираем варианты товаров
		$variants = $this->variants->get_variants(array('product_id'=>$browsed_products_ids, 'in_stock'=>true));
		
		// Для каждого варианта
		foreach($variants as &$variant)
		{
			// добавляем вариант в соответствующий товар
			$products[$variant->product_id]->variants[] = $variant;
		}

		$browsed_products_images = $this->products->get_images(array('product_id'=>$browsed_products_ids));
		foreach($browsed_products_images as $browsed_product_image)
			if(isset($products[$browsed_product_image->product_id]))
				$products[$browsed_product_image->product_id]->images[] = $browsed_product_image;
		
		foreach($browsed_products_ids as $id)
		{	
			if(isset($products[$id]))
			{
				if(isset($products[$id]->images[0]))
					$products[$id]->image = $products[$id]->images[0];
				$result[] = $products[$id];
			}
		}
		$smarty->assign($params['var'], $result);
	}
}
Edited by mishanya
Link to post
Share on other sites

mishanya, спасибо большое!

а не поделитесь еще кодом, что в шаблоне. к примеру в карточке товара.?!

 

Спасибо огромное!

 

используйте стандартный код для просмотренных товаров, просто теперь у вас еще доступен массив вариантов - $browsed_product->variants

 

<!-- Просмотренные товары -->
{get_browsed_products var=browsed_products limit=20}
{if $browsed_products}

	<h2>Вы просматривали:</h2>
	<ul id="browsed_products">
	{foreach $browsed_products as $browsed_product}
		<li>
		<a href="products/{$browsed_product->url}"><img src="{$browsed_product->image->filename|resize:50:50}" alt="{$browsed_product->name|escape}" title="{$browsed_product->name|escape}"></a>

		{if $browsed_product->variants|count > 0}
		<!-- Выбор варианта товара -->
		<form class="variants" action="/cart">
			<table>
			{foreach $browsed_product->variants as $v}
			<tr class="variant">
				<td>
					<input id="discounted_{$v->id}" name="variant" value="{$v->id}" type="radio" class="variant_radiobutton" {if $v@first}checked{/if} {if $browsed_product->variants|count<2}style="display:none;"{/if}/>
				</td>
				<td>
					{if $v->name}<label class="variant_name" for="discounted_{$v->id}">{$v->name}</label>{/if}
				</td>
				<td>
					{if $v->compare_price > 0}<span class="compare_price">{$v->compare_price|convert}</span>{/if}
					<span class="price">{$v->price|convert} <span class="currency">{$currency->sign|escape}</span></span>
				</td>
			</tr>
			{/foreach}
			</table>
			<input type="submit" class="button" value="в корзину" data-result-text="добавлено"/>
		</form>
		<!-- Выбор варианта товара (The End) -->
		{else}
			Нет в наличии
		{/if}

		</li>
	{/foreach}
	</ul>
{/if}
<!-- Просмотренные товары (The End)-->		
Edited by mishanya
Link to post
Share on other sites

mishanya, извините пожалуйста.

 

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

 

Спасибо огромное!

Link to post
Share on other sites
  • 5 months later...

А каким образом очищается список просмотренных товаров и можно как-то кнопку прикрутить "Очистить"?

 

хранится в куках и очищается только по истечении срока хранения или при очистке браузера

Link to post
Share on other sites

в шаблоне где то делаем кнопку

<a href="?clear_browsed=1">очистить просмотренные товары</a>

А в файле index.php, после session_start(); ,который лежит в корне сайта добавляем код

if (!empty($_GET['clear_browsed']))
{
    setcookie('browsed_products', null);
    header('Location: /');
}
Link to post
Share on other sites

 

При такой очистке просмотренных пользователя перебрасывает на главную. Несколько кривенько выходит...

Если руки из одного места растут то AJAX и jQuery в помощь.

Link to post
Share on other sites

Зачем здесь аякс?

Можно немного допилить и будет с редиректом.

Вариант с возвратом на предыдущую страницу:

Ссылка

<a href="?clear_browsed=1&redirect={url|urlencode}">очистить просмотренные товары</a>

и обработчик в /index.php :

if (!empty($_GET['clear_browsed']))
{
    setcookie('browsed_products', null);
    header('Location: '. (empty($_GET['redirect']) ? '/' : $_GET['redirect']));
    exit;
}
Edited by Andrey Terkin
Link to post
Share on other sites

а почему бы не так:

<a href="{url clear_browsed=1}">очистить просмотренные товары</a>

И обработчик  в view/View.php

Рядом с валютой.

			if($this->request->get('clear_browsed', 'integer'))
			{
				setcookie('browsed_products', null);
				header("Location: ".$this->request->url(array('clear_browsed'=>null)));
			}
Link to post
Share on other sites

 

а почему бы не так:

<a href="{url clear_browsed=1}">очистить просмотренные товары</a>

И обработчик 

			if($this->request->get('clear_browsed', 'integer'))
			{
				setcookie('browsed_products', null);
				header("Location: ".$this->request->url(array('clear_browsed'=>null)));
			}

 

У меня так почему то работать не хочет

Link to post
Share on other sites

 

а почему бы не так:

<a href="{url clear_browsed=1}">очистить просмотренные товары</a>
И обработчик 
			if($this->request->get('clear_browsed', 'integer'))
			{
				setcookie('browsed_products', null);
				header("Location: ".$this->request->url(array('clear_browsed'=>null)));
			}

 

 

У меня так почему то работать не хочет

 

Потому что ошибки есть.  Если имелся в виду обработчик  в /index.php, как в посте #13, то сразу видна грубая ошибка: там не определено $this, естественно, так работать не будет.

Возможно, будет работать, если поместить обработчик в view/IndexView.php (кажется, это идейно более правильно)

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...