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

[2.x.x] Пагинация на главной для рекомендуемых товаров


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

Пагинация для рекомендуемых товаров на главной.

Чтобы разбить товары на страницы откройте файл view/view.php и замените функцию get_featured_products_plugin на мою:

 

public function get_featured_products_plugin($params, &$smarty)
	{
		if(!isset($params['visible']))
			$params['visible'] = 1;
		$params['featured'] = 1;
		if(!empty($params['var']))
		{		
			// Постраничная навигация
			$items_per_page = $this->settings->products_num;		
			// Текущая страница в постраничном выводе
			$current_page = $this->request->get('page', 'int');	
			// Если не задана, то равна 1
			$current_page = max(1, $current_page);
			$this->design->assign('current_page_num', $current_page);
			// Вычисляем количество страниц
			$products_count = $this->products->count_products($params);
			
			// Показать все страницы сразу
			if($this->request->get('page') == 'all')
				$items_per_page = $products_count;	
			
			$pages_num = ceil($products_count/$items_per_page);
			$this->design->assign('total_pages_num', $pages_num);
			$this->design->assign('total_products_num', $products_count);

			$params['page'] = $current_page;
			$params['limit'] = $items_per_page;
		
			foreach($this->products->get_products($params) as $p)
				$products[$p->id] = $p;

			if(!empty($products))
			{
				// id выбранных товаров
				$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);
			
		}
	}
Далее откройте файл design/default/html/main.tpl и после:
{if $featured_products}
добавьте:
{include file="pagination.tpl"}
$this->settings->products_num отвечает за количество товаров на страницу которое берется с настроек сайта, вместо этого можете вписать свое число.

Все готово!

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

А как тоже самое сделать для новых продуктов?

Пагинацию одновременно и для новых и для рекомендуемых? И так уже при такой доработке главная страница перестает быть главной, а тут еще две пагинации по двум спискам... Технически оно, конечно, реализовать и не особо сложно, но будет ли это хорошо, поймет ли пользователь?

 

А есть еще на главной стандартно третий список, в нем тоже пагинацию устроить можно...

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

Пагинацию одновременно и для новых и для рекомендуемых? И так уже при такой доработке главная страница перестает быть главной, а тут еще две пагинации по двум спискам... Технически оно, конечно, реализовать и не особо сложно, но будет ли это хорошо, поймет ли пользователь?

 

А есть еще на главной стандартно третий список, в нем тоже пагинацию устроить можно...

Нет, меня интересуют только новые 

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

Разве не лучше сделать табами или слайдером, зачем пагинацию?

В каких случаях это выгодно и лучше?

Затем что некоторым заказчикам кровь с носа нужна именно пагинация а не слайдер.

Дубль главной конечно же не лучшее решение, вернее вообще лучше так не делать, но ты попробуй это объясни заказчику.

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

Так и не ответили тут, как такое сделать для "Новых товаров" ? У меня на главной странице лишь Новые товары и хотелось бы их пагиновать

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

Так и не ответили тут, как такое сделать для "Новых товаров" ? У меня на главной странице лишь Новые товары и хотелось бы их пагиновать

 

Сделать по аналогии только для get_new_products_plugin, заменив

get_featured

на

get_new

 

а так же

        if(!isset($params['visible']))
            $params['visible'] = 1;
        $params['featured'] = 1;
        if(!empty($params['var']))

на

	if(!isset($params['visible']))
		$params['visible'] = 1;
	if(!isset($params['sort']))
		$params['sort'] = 'created';
	if(!empty($params['var']))

 

 

 

Или-же просто в коде плагина перед

if(!empty($products))

вставить

			// Постраничная навигация
			$items_per_page = $this->settings->products_num;		
			// Текущая страница в постраничном выводе
			$current_page = $this->request->get('page', 'int');	
			// Если не задана, то равна 1
			$current_page = max(1, $current_page);
			$this->design->assign('current_page_num', $current_page);
			// Вычисляем количество страниц
			$products_count = $this->products->count_products($params);
			
			// Показать все страницы сразу
			if($this->request->get('page') == 'all')
				$items_per_page = $products_count;	
			
			$pages_num = ceil($products_count/$items_per_page);
			$this->design->assign('total_pages_num', $pages_num);
			$this->design->assign('total_products_num', $products_count);

			$params['page'] = $current_page;
			$params['limit'] = $items_per_page;
		
			foreach($this->products->get_products($params) as $p)
				$products[$p->id] = $p;

далее в шаблоне  по инструкции выше.

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

Не получается. По инструкции из первого поста, меняю функцию get_featured_products_plugin на новый, далее по совету smartycms, меняю название измененного плагина из get_featured_products_plugin на get_new_products_plugin.

Верно пока делаю?

Вообще, в исходной странице View.php после плагина get_featured_products_plugin идет плагин get_new_products_plugin так? Если название нашего измененного плагина get_featured... изменю на get_new... то получается подряд идут 2 плага get_new.... Это нормально?

Думаю нет, может это я не так понял т.к. у меня после изменения названия на get_new выходит ошибка на странице 

Fatal error: Cannot redeclare View::get_new_products_plugin() in Z:\home\test1.ru\subdomain\simpla\view\View.php on line 232

-------------------

А если я удалю второй плагин get_new.. то идет такая ошибка

Fatal error: Uncaught --> Smarty: Plugin "get_featured_products" not callable <-- thrown in Z:\home\test1.ru\subdomain\simpla\Smarty\libs\sysplugins\smarty_internal_templatebase.php on line 431

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

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

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

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

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

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

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

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

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

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