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

Сравнение товаров, избранное и любые другие списки


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

Скажите, как Cookie сохранять? Чтобы после закрытия браузера оставались товары в избранном и в сравнении ?

Спасибо. 

 

 

Специально для сохранения Cookie ничего не предусмотрено. Куки можно создавать с указанием времени жизни. Смотрите мануалы или рабочий код, например, в view/ProductView.php.

Чтобы после закрытия браузера оставались товары в избранном и в сравнении, надо переделывать всю работу, заменяя сессии на куки. Образец - стандартная работа Simpla с последними просмотренными...

Ссылка на сообщение
Поделиться на другие сайты
  • Ответов 94
  • Дата создания
  • Последний ответ

Лучшие авторы в теме

Лучшие авторы в теме

Изображения в теме

Скажите, как Cookie сохранять? Чтобы после закрытия браузера оставались товары в избранном и в сравнении ?

Спасибо.

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

Такая проблема,раньше на сайте были товары,их люди добавили в закладки и сравнения,потом товары с сайта удалили,но в информерах кол-во этих товаров осталось.При заходе на страницы "Избранное" и "Сравнения" пусто.Но в информерах отображаются цифры.

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

Народ, помогите решить проблему, пожалуйста.

При добавлении в списки избранного - на информере появляется  "уже в списке", а при переходе на страницу /wishlist - имею "товары не найдены."

при этом добавление в списки сравнения работает полностью корректно.

Simpla 2.2.4,

php 5.3

 

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

 

подключенные библиотеки::

 

jquerry 3.1.0

jquerry.migrate.1.4.1

 

что сделано:

 

в ajax/product_to_session.php добавлено

 

chdir('..');
require_once('api/Simpla.php');
 

 

в product_to_session.js менял .live на .on и обратно - без результата.

 

где еще искать траблу - не соображу. в общем не откажите в совете, хотя бы..

 

 

 

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

Добрый день

Симпла 2.3.7

Сделал все по инструкции, но выдает:

Fatal error: Uncaught --> Smarty Compiler: Syntax error in template "/home/c17525/public_html/dobrii-ogon.ru/design/media_42018/html/index.tpl" on line 97 "{get_session_products key=compare}" unknown tag "get_session_products" <-- thrown in /home/c17525/public_html/dobrii-ogon.ru/Smarty/libs/sysplugins/smarty_internal_templatecompilerbase.php on line 97

 

При заходе в любую категорию аналогично

 

Спасибо за помощь заранее!

Изменено пользователем Alexand25
Ссылка на сообщение
Поделиться на другие сайты

Добрый день

Симпла 2.3.7

Сделал все по инструкции, но выдает:

Fatal error: Uncaught --> Smarty Compiler: Syntax error in template "/home/c17525/public_html/dobrii-ogon.ru/design/media_42018/html/index.tpl" on line 97 "{get_session_products key=compare}" unknown tag "get_session_products" <-- thrown in /home/c17525/public_html/dobrii-ogon.ru/Smarty/libs/sysplugins/smarty_internal_templatecompilerbase.php on line 97

 

При заходе в любую категорию аналогично

 

Спасибо за помощь заранее!

 

Вы видимо в view/View.php правки не внесли, или внесли но не правильно

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

Вы видимо в view/View.php правки не внесли, или внесли но не правильно

 

Вставил блок сравнения с данными тегами, но сайт говорит что не знает их:

 

<?PHP

/**
 * Newcms CMS
 *
 *
 * Базовый класс для всех View
 *
 */

require_once('api/Newcms.php');

class View extends Newcms
{
	/* Смысл класса в доступности следующих переменных в любом View */
	public $currency;
	public $currencies;
	public $user;
	public $group;
	public $page;

	/* Класс View похож на синглтон, храним статически его инстанс */
	private static $view_instance;
	
	public function __construct()
	{
		parent::__construct();
		
		// Если инстанс класса уже существует - просто используем уже существующие переменные
		if(self::$view_instance)
		{
			$this->currency     = &self::$view_instance->currency;
			$this->currencies   = &self::$view_instance->currencies;
			$this->user         = &self::$view_instance->user;
			$this->group        = &self::$view_instance->group;	
			$this->page         = &self::$view_instance->page;	
		}
		else
		{
			// Сохраняем свой инстанс в статической переменной,
			// чтобы в следующий раз использовать его
			self::$view_instance = $this;

			// Все валюты
			$this->currencies = $this->money->get_currencies(array('enabled'=>1));
	
			// Выбор текущей валюты
			if($currency_id = $this->request->get('currency_id', 'integer'))
			{
				$_SESSION['currency_id'] = $currency_id;
				header("Location: ".$this->request->url(array('currency_id'=>null)));
			}
			
			// Берем валюту из сессии
			if(isset($_SESSION['currency_id']))
				$this->currency = $this->money->get_currency($_SESSION['currency_id']);
			// Или первую из списка
			else
				$this->currency = reset($this->currencies);
	
			// Пользователь, если залогинен
			if(isset($_SESSION['user_id']))
			{
				$u = $this->users->get_user(intval($_SESSION['user_id']));
				if($u && $u->enabled)
				{
					$this->user = $u;
					$this->group = $this->users->get_group($this->user->group_id);
				
				}
			}

			// Текущая страница (если есть)
			$subdir = substr(dirname(dirname(__FILE__)), strlen($_SERVER['DOCUMENT_ROOT']));
			$page_url = trim(substr($_SERVER['REQUEST_URI'], strlen($subdir)),"/");
			if(strpos($page_url, '?') !== false)
				$page_url = substr($page_url, 0, strpos($page_url, '?'));
			$this->page = $this->pages->get_page((string)$page_url);
			$this->design->assign('page', $this->page);		
			
			// Передаем в дизайн то, что может понадобиться в нем
			$this->design->assign('currencies',	$this->currencies);
			$this->design->assign('currency',	$this->currency);
			$this->design->assign('user',       $this->user);
			$this->design->assign('group',      $this->group);
			
			$this->design->assign('config',		$this->config);
			$this->design->assign('settings',	$this->settings);

			// Настраиваем плагины для смарти
			$this->design->smarty->registerPlugin("function", "get_posts",					array($this, 'get_posts_plugin'));
			$this->design->smarty->registerPlugin("function", "get_brands",					array($this, 'get_brands_plugin'));
			$this->design->smarty->registerPlugin("function", "get_browsed_products",		array($this, 'get_browsed_products'));
			$this->design->smarty->registerPlugin("function", "get_featured_products",		array($this, 'get_featured_products_plugin'));
			$this->design->smarty->registerPlugin("function", "get_new_products",			array($this, 'get_new_products_plugin'));
			$this->design->smarty->registerPlugin("function", "get_discounted_products",	array($this, 'get_discounted_products_plugin'));
			$this->design->smarty->registerPlugin("function", "get_popular_products",		array($this, 'get_popular_products_plugin'));

		}
	}
		
	/**
	 *
	 * Отображение
	 *
	 */
	function fetch()
	{
		return false;
	}

    // SimplaDev DaVinci MyList
	public function add_product_session_plugin($params, &$smarty)
	{
        $key  = $params['key'];
        $id   = $params['id'];
        if(empty($key) && empty($id))
            return false;
        if(!$this->design->smarty->templateExists('products_session_'.$key.'_informer.tpl'))
            return false;
        $product = $this->products->get_product((int)$id);
        if(empty($product))
            return false;
		$_SESSION[$key][$product->id] = $product->id;
	}
	public function remove_product_session_plugin($params, &$smarty)
	{
		if(!empty($params['key']) && $params['remove'] && !empty($_SESSION[$params['key']][$params['remove']]))
        {
            unset($_SESSION[$params['key']][$params['remove']]);
		}
	}
	public function get_session_products_plugin($params, &$smarty)
	{
		if(!empty($_SESSION[$params['key']]))
        {
            $result->key   = $params['key']; // ключ
            $result->ids   = $_SESSION[$params['key']]; // сессия
            $result->count = count($_SESSION[$params['key']]); // количество
            $smarty->assign($params['key'], $result);
		}
	}
	public function get_products_plugin($params, &$smarty)
	{
		if(!empty($params['var']))
		{
            if(!empty($params['get_session_products'])){
                if(!empty($_SESSION[$params['get_session_products']])){
                    $params['id'] = $_SESSION[$params['get_session_products']];
                    $params['visible'] = 1;
                }
                else{
                    return false;
                }
            }
			foreach($this->products->get_products($params) as $p)
				$products[$p->id] = $p;
			if(!empty($products))
			{
				$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;

                if(!empty($params['data_features'])){
    			    $properties = $this->features->get_product_options($products_ids);
    			    foreach($properties as $property)
    				    $products[$property->product_id]->options[] = $property;
                }
                if(!empty($params['data_categories'])){
    			    $categories = $this->categories->get_categories(array('product_id'=>$products_ids));
                    $product_categories = $this->categories->get_product_categories($products_ids);
    			    foreach($product_categories as $category)
    				    $products[$category->product_id]->categories[$category->category_id] = $categories[$category->category_id];
                }
				foreach($products as &$product)
				{
					if(isset($product->variants[0]))
						$product->variant = $product->variants[0];
					if(isset($product->images[0]))
						$product->image = $product->images[0];
					if(!empty($product->categories))
						$product->category = reset($product->categories);
				}
			}
			$smarty->assign($params['var'], $products);

		}
	}
    // SimplaDev DaVinci MyList END
	
	/**
	 *
	 * Плагины для смарти
	 *
	 */	
	public function get_posts_plugin($params, &$smarty)
	{
		if(!isset($params['visible']))
			$params['visible'] = 1;
		if(!empty($params['var'])) {
			$posts = $this->blog->get_posts($params);
				
			if(!empty($posts))
				foreach($posts as $post)
					$post->comments_count = $this->comments->count_comments(array('type'=>'blog', 'object_id'=>$post->id, 'approved'=>1));
				
			$smarty->assign($params['var'], $posts);
		}
	}
	
	/**
	 *
	 * Плагины для смарти
	 *
	 */	

	public function get_brands_plugin($params, &$smarty)
	{
		if(!isset($params['visible']))
			$params['visible'] = 1;
		if(!empty($params['var']))
			$smarty->assign($params['var'], $this->brands->get_brands($params));
	}
	
	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;
			
			// Категория товара
			$categories = $this->categories->get_product_categories($browsed_products_ids);
			foreach($categories as $cat)
				$products[$cat->product_id]->category = $this->categories->get_category((int)$cat->category_id);

			$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];
					if(isset($products[$id]->variants[0]))
						$products[$id]->variant = $products[$id]->variants[0];

					$result[] = $products[$id];
				}
			}
			$smarty->assign($params['var'], $result);
		}
	}
	
	
	public function get_featured_products_plugin($params, &$smarty)
	{
		if(!isset($params['visible']))
			$params['visible'] = 1;
		$params['featured'] = 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);
		
				// Категория товара
				$categories = $this->categories->get_product_categories($products_ids);
				foreach($categories as $cat)
					$products[$cat->product_id]->category = $this->categories->get_category((int)$cat->category_id);
					
				// Выбираем варианты товаров
				$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];
					$product->comments_count = $this->comments->count_comments(array('type'=>'product', 'object_id'=>$product->id, 'approved'=>1));

				}				
			}

			$smarty->assign($params['var'], $products);
			
		}
	}
		
	
	public function get_new_products_plugin($params, &$smarty)
	{
		if(!isset($params['visible']))
			$params['visible'] = 1;
		if(!isset($params['sort']))
			$params['sort'] = 'created';
		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);
		
				// Категория товара
				$categories = $this->categories->get_product_categories($products_ids);
				foreach($categories as $cat)
					$products[$cat->product_id]->category = $this->categories->get_category((int)$cat->category_id);
					

				// Выбираем варианты товаров
				$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);
			
		}
	}
	
	
	public function get_discounted_products_plugin($params, &$smarty)
	{
		if(!isset($params['visible']))
			$params['visible'] = 1;
		$params['discounted'] = 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);
		
				// Категория товара
				$categories = $this->categories->get_product_categories($products_ids);
				foreach($categories as $cat)
					$products[$cat->product_id]->category = $this->categories->get_category((int)$cat->category_id);
					
				// Выбираем варианты товаров
				$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);
			
		}
	}

	public function get_popular_products_plugin($params, &$smarty)
	{
		if(!isset($params['visible']))
			$params['visible'] = 1;
		if(!isset($params['limit']))
			$params['limit'] = 10;
			
		foreach($this->orders->get_purchases($params) as $p)
			$purchases_ids[] = $p->product_id;
			
		if(!empty($purchases_ids)) {
			$purchases_ids = array_count_values($purchases_ids);
			arsort($purchases_ids);
			$params['id'] = array_keys($purchases_ids);
		}
		
		if(!empty($params['var']) && !empty($params['id']))
		{
			foreach ($params['id'] as $key => $id){
				$products[$id] = $this->products->get_product($id);
				if ($key == $params['limit'] -1)
					break;
			}

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

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

// Настраиваем плагины для смарти

 

Не прописаны функции

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

Всем привет, всё сделал по инструкции и всё вроде как работает, только если нахожусь на главной, где выводятся рекомендуемые товары , новинки и акционные товары , если список сравнения пуст то добавляется только первый товар , а все последующие нажатия на ссылку добавить к сравнению товар к списку не добавляет, хотя пишет что товар добавлен. Если перехожу в какую нибудь категорию то всё работает как надо. Подскажите пожалуйста как победить проблему.

Автору большое спасибо.

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

Здравствуйте, подскажите пожалуйста почему у меня не работает скрипт и по нажатию на ссылку добавить к сравнению открывается список сравнения. oldtiflis.zz.mu

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

Всем привет! Все вроде сделал - работает нормально, все добавляется в избранное. Но при переходе на страницу /wishlist выдает 404-ю ошибку...

 

С чем это может быть связано?

Папку compiled чистил

Simpla 2.3.6

Ставил не на чистую CMS, но функционал работает.

 

Заранее благодарю

Изменено пользователем DmitryCH
Ссылка на сообщение
Поделиться на другие сайты

Значит не вроде а ТОЧНО сделали не всё, слишком банально это выглядит.

Ещё раз пройдитесь по инструкции и гляди заработает!

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

Всем привет! Все вроде сделал - работает нормально, все добавляется в избранное. Но при переходе на страницу /wishlist выдает 404-ю ошибку...

 

С чем это может быть связано?

Папку compiled чистил

Simpla 2.3.6

Ставил не на чистую CMS, но функционал работает.

 

Заранее благодарю

скорее всего не создали нужную страницу в админке или же не поправили page.tpl вашей темы 

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

скорее всего не создали нужную страницу в админке или же не поправили page.tpl вашей темы

Как показала практика все забывают о .htaccess.
Ссылка на сообщение
Поделиться на другие сайты

Как показала практика все забывают о .htaccess.

а модуль что htaccess использует? У него нет контроллера. Он инклудит tpl исходя из $page->url  в page.tpl

я на 80% уверен что через админку не создана страница и 19% что допущена ошибка в условиях для инклуда что может приравнять контент к пустой строке. 1% на что то индивидуальное  

Изменено пользователем yr4ik
Ссылка на сообщение
Поделиться на другие сайты

а модуль что htaccess использует? У него нет контроллера. Он инклудит tpl исходя из $page->url  в page.tpl

я на 80% уверен что через админку не создана страница и 19% что допущена ошибка в условиях для инклуда что может приравнять контент к пустой строке. 1% на что то индивидуальное  

 

Вы абсолютно правы )) Не создана страница.

Спасибо ОГРОМНОЕ!

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

Всем привет еще раз.

А как в шаблон products_list.tpl добавить возможность подсчета related_products?

Пишу: {$product->related_products|count}, но на странице избранного не работает. На всех остальных страницах работает (в других .tpl)

 

Пробовал в ProductsView.php добавить:

$this->body = $this->design->fetch('products_list.tpl');

 

но тоже не помогает.

 

Заранее благодарен.

Изменено пользователем DmitryCH
Ссылка на сообщение
Поделиться на другие сайты

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

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

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

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

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

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

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

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

Загрузка...

×
×
  • Создать...