Jump to content

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


Recommended Posts

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

Спасибо. 

 

 

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

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

Link to post
Share on other sites
  • Replies 94
  • Created
  • Last Reply

Top Posters In This Topic

Top Posters In This Topic

Posted Images

  • 3 weeks later...

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

Link to post
Share on other sites
  • 1 month later...

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

При добавлении в списки избранного - на информере появляется  "уже в списке", а при переходе на страницу /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 и обратно - без результата.

 

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

 

 

 

Edited by xikarx
Link to post
Share on other sites
  • 5 weeks later...

Добрый день

Симпла 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

 

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

 

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

Edited by Alexand25
Link to post
Share on other sites

Добрый день

Симпла 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 правки не внесли, или внесли но не правильно

Link to post
Share on other sites

Вы видимо в 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);
		}
	}
}

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

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

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

Link to post
Share on other sites

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

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

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

 

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

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

Simpla 2.3.6

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

 

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

Edited by DmitryCH
Link to post
Share on other sites

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

 

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

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

Simpla 2.3.6

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

 

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

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

Link to post
Share on other sites

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

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

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

Edited by yr4ik
Link to post
Share on other sites

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

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

 

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

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

Link to post
Share on other sites

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

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

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

 

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

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

 

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

 

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

Edited by DmitryCH
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...