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

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

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

 

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

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

 

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

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

 

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

 

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

замените функцию 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);
	}
}
Изменено пользователем mishanya
Ссылка на сообщение
Поделиться на другие сайты
mishanya, спасибо большое!

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

 

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

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

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)-->		
Изменено пользователем mishanya
Ссылка на сообщение
Поделиться на другие сайты

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

 

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

 

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

Ссылка на сообщение
Поделиться на другие сайты
  • 5 месяцев спустя...

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

 

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

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

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

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

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

if (!empty($_GET['clear_browsed']))
{
    setcookie('browsed_products', null);
    header('Location: /');
}
Ссылка на сообщение
Поделиться на другие сайты

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

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

 

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

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

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

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

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

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

Ссылка

<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;
}
Изменено пользователем Andrey Terkin
Ссылка на сообщение
Поделиться на другие сайты

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

<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)));
			}
Ссылка на сообщение
Поделиться на другие сайты

 

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

<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)));
			}

 

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

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

 

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

<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 (кажется, это идейно более правильно)

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

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

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

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

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

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

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

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

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

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