Перейти к содержимому


Фото
- - - - -

Как изменить количество отображаемых товаров на одной странице каталога?

пагинация каталог товары

  • Чтобы отвечать, сперва войдите на форум
19 ответов в теме

#1 Andrey77

Andrey77
  • Пользователь
  • 13 сообщений

Опубликовано 18.10.2014 - 22:28

Пробежался по всему коду, но не смог найти где можно изменить стандартное значение 30 на какое-то другое. Подскажите, пожалуйста, где это делается.



#2 Noxter

Noxter

    Simpla Developer

  • Фрилансер
  • 6 618 сообщений
  • Дизайн, Программирование, Верстка
  • Версия CMS:2.x
  • Откуда:Киев

Опубликовано 18.10.2014 - 22:47

Пробежался по всему коду, но не смог найти где можно изменить стандартное значение 30 на какое-то другое. Подскажите, пожалуйста, где это делается.

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



#3 Andrey77

Andrey77
  • Пользователь
  • 13 сообщений

Опубликовано 18.10.2014 - 22:56

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

 

OMG, что-то я совсем заработался. Спасибо!



#4 Noxter

Noxter

    Simpla Developer

  • Фрилансер
  • 6 618 сообщений
  • Дизайн, Программирование, Верстка
  • Версия CMS:2.x
  • Откуда:Киев

Опубликовано 18.10.2014 - 23:28

Пробежался по всему коду, но не смог найти где можно изменить стандартное значение 30 на какое-то другое. Подскажите, пожалуйста, где это делается.

Вы либо не там искали либо не искали вообще.
Если попробовать поискать в файле view/ProductsView.php, то можно найти такую строку:
$items_per_page = $this->settings->products_num;
Которая как не сложно догадаться отвечает за количество выводимых товаров на одну страницу каталога.

#5 Andrey77

Andrey77
  • Пользователь
  • 13 сообщений

Опубликовано 19.10.2014 - 00:57

Вы либо не там искали либо не искали вообще.
Если попробовать поискать в файле view/ProductsView.php, то можно найти такую строку:

$items_per_page = $this->settings->products_num;
Которая как не сложно догадаться отвечает за количество выводимых товаров на одну страницу каталога.

 

Я искал цифру 30 :)



#6 motya88

motya88
  • Пользователь
  • 119 сообщений

Опубликовано 23.10.2016 - 18:08

Подскажите, хочу вывести на странице каталога возможность выбора кол-ва отображаемых товаров.

 

В  view/ProductsView.php заменил код на:

// Показать все страницы сразу
if($this->request->get('page') == 'all')
    $items_per_page = $products_count; 
elseif($this->request->get('limit','integer') > 0)
    $items_per_page = $this->request->get('limit','integer');
 
$filter['limit'] = $items_per_page;
$filter['page'] = $current_page;   
     
$pages_num = ceil($products_count/$items_per_page);
$this->design->assign('total_pages_num', $pages_num);

а потом в products:

<div class="limit">
    Выводить по
    <a {if !$smarty.get.limit || $smarty.get.limit == 20} class="selected"{/if} href="{url limit=20 page=null}">20</a>
    <a {if $smarty.get.limit == 50}    class="selected"{/if} href="{url limit=50 page=null}">50</a>
    <a {if $smarty.get.limit == 100}     class="selected"{/if} href="{url limit=100 page=null}">100</a>
    <a {if $smarty.get.page == 'all'}     class="selected"{/if} href="{url limit=null page=all}">все</a>
</div>

Работает только отображение всех. Остальное нет. Подскажите в чем проблема??



#7 Kors

Kors
  • Фрилансер
  • 3 522 сообщений
  • Программирование
  • Версия CMS:1.x, 2.x
  • Откуда:Россия

Опубликовано 23.10.2016 - 18:38

Скорее всего, потому, что замененный код в view/ProductsView.php выполняется ПОСЛЕ того, как выполнен подсчет

// Вычисляем количество страниц
$products_count = $this->products->count_products($filter);

#8 motya88

motya88
  • Пользователь
  • 119 сообщений

Опубликовано 23.10.2016 - 18:57

Скорее всего, потому, что замененный код в view/ProductsView.php выполняется ПОСЛЕ того, как выполнен подсчет

// Вычисляем количество страниц
$products_count = $this->products->count_products($filter);

Вроде нет

вот весь файл:

<?PHP

/**
 * Simpla CMS
 *
 * @copyright 	2011 Denis Pikusov
 * @link 		http://simplacms.ru
 * @author 		Denis Pikusov
 *
 * Этот класс использует шаблон products.tpl
 *
 */
 
require_once('View.php');

class ProductsView extends View
{
 	/**
	 *
	 * Отображение списка товаров
	 *
	 */	
	function fetch()
	{
		// GET-Параметры
		$category_url = $this->request->get('category', 'string');
		$brand_url    = $this->request->get('brand', 'string');
        $mode    = $this->request->get('mode', 'string');
        
		
		$filter = array();
		$filter['visible'] = 1;	
        
        if ($mode == 'hits')
        {
            $filter['featured'] = 1;
        }
        if ($mode == 'sale')
        {
            $filter['discounted'] = 1;
        } 
        if ($mode == 'new')
        {
            $filter['is_new'] = 1;
        } 
        
        
        

		// Если задан бренд, выберем его из базы
		if (!empty($brand_url))
		{
			$brand = $this->brands->get_brand((string)$brand_url);
			if (empty($brand))
				return false;
			$this->design->assign('brand', $brand);
			$filter['brand_id'] = $brand->id;
		}
		
		// Выберем текущую категорию
		if (!empty($category_url))
		{
			$category = $this->categories->get_category((string)$category_url);
			if (empty($category) || (!$category->visible && empty($_SESSION['admin'])))
				return false;
			$this->design->assign('category', $category);
			$filter['category_id'] = $category->children;
		}

		// Если задано ключевое слово
		$keyword = $this->request->get('keyword');
		if (!empty($keyword))
		{
			$this->design->assign('keyword', $keyword);
			$filter['keyword'] = $keyword;
		}

		// Сортировка товаров, сохраняем в сесси, чтобы текущая сортировка оставалась для всего сайта
		if($sort = $this->request->get('sort', 'string'))
            
			$_SESSION['sort'] = $sort;		
		if (!empty($_SESSION['sort']))
			$filter['sort'] = $_SESSION['sort'];			
		else
			$filter['sort'] = 'position';			
		$this->design->assign('sort', $filter['sort']);
		
		// Свойства товаров
		if(!empty($category))
		{
			$features = array();
            $filter['features'] = array();
			foreach($this->features->get_features(array('category_id'=>$category->id, 'in_filter'=>1)) as $feature)
			{ 
				$features[$feature->id] = $feature;
                
                if(($val = $this->request->get($feature->id))!='')
    $filter['features'][$feature->id] = $val;
                
			}
			
			$options_filter['visible'] = 1;
			
			$features_ids = array_keys($features);
			if(!empty($features_ids))
				$options_filter['feature_id'] = $features_ids;
			$options_filter['category_id'] = $category->children;
			if(isset($filter['features']))
				$options_filter['features'] = $filter['features'];
			if(!empty($brand))
				$options_filter['brand_id'] = $brand->id;
			
			$options = $this->features->get_options($options_filter);

			foreach($options as $option)
			{
				if(isset($features[$option->feature_id]))
					$features[$option->feature_id]->options[] = $option;
			}
			
			foreach($features as $i=>&$feature)
			{ 
				if(empty($feature->options))
					unset($features[$i]);
			}
$this->design->assign('filter_features', $filter['features']);
			$this->design->assign('features', $features);
 		}

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

		$discount = 0;
		if(isset($_SESSION['user_id']) && $user = $this->users->get_user(intval($_SESSION['user_id'])))
			$discount = $user->discount;
			
		// Товары 
		$products = array();
		foreach($this->products->get_products($filter) as $p)
			$products[$p->id] = $p;
			
		// Если искали товар и найден ровно один - перенаправляем на него
		if(!empty($keyword) && $products_count == 1)
			header('Location: '.$this->config->root_url.'/products/'.$p->url);
		
		if(!empty($products))
		{
			$products_ids = array_keys($products);
			foreach($products as &$product)
			{
				$product->variants = array();
				$product->images = array();
				$product->properties = array();
			}
	
			$variants = $this->variants->get_variants(array('product_id'=>$products_ids, 'in_stock'=>true));
			
			foreach($variants as &$variant)
			{
				//$variant->price *= (100-$discount)/100;
				$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];
			}
				
	
			/*
			$properties = $this->features->get_options(array('product_id'=>$products_ids));
			foreach($properties as $property)
				$products[$property->product_id]->options[] = $property;
			*/
	
			$this->design->assign('products', $products);
 		}
		
		// Выбираем бренды, они нужны нам в шаблоне	
		if(!empty($category))
		{
			$brands = $this->brands->get_brands(array('category_id'=>$category->children, 'visible'=>1));
			$category->brands = $brands;		
		}
		
		// Устанавливаем мета-теги в зависимости от запроса
		if($this->page)
		{
			$this->design->assign('meta_title', $this->page->meta_title);
			$this->design->assign('meta_keywords', $this->page->meta_keywords);
			$this->design->assign('meta_description', $this->page->meta_description);
		}
		elseif(isset($category))
		{
			$this->design->assign('meta_title', $category->meta_title);
			$this->design->assign('meta_keywords', $category->meta_keywords);
			$this->design->assign('meta_description', $category->meta_description);
		}
		elseif(isset($brand))
		{
			$this->design->assign('meta_title', $brand->meta_title);
			$this->design->assign('meta_keywords', $brand->meta_keywords);
			$this->design->assign('meta_description', $brand->meta_description);
		}
		elseif(isset($keyword))
		{
			$this->design->assign('meta_title', $keyword);
		}
		
			
		$this->body = $this->design->fetch('products.tpl');
		return $this->body;
	}
	
	

}



#9 Kors

Kors
  • Фрилансер
  • 3 522 сообщений
  • Программирование
  • Версия CMS:1.x, 2.x
  • Откуда:Россия

Опубликовано 23.10.2016 - 19:05

У меня локально Ваш код работает правильно.
Например
http://localhost/sim...elefony?limit=3
показывает 3 товара

#10 motya88

motya88
  • Пользователь
  • 119 сообщений

Опубликовано 23.10.2016 - 19:14

У меня локально Ваш код работает правильно.
Например
http://localhost/sim...elefony?limit=3
показывает 3 товара

а может это быть связано  с тем, что в админке -> в настройках кол-ва товаров в каталоге у меня стоит у меня стоит 12?



#11 motya88

motya88
  • Пользователь
  • 119 сообщений

Опубликовано 23.10.2016 - 19:17

версия симплы 2.3.7. У меня не работает((


Изменено: motya88, 23.10.2016 - 19:41


#12 Kors

Kors
  • Фрилансер
  • 3 522 сообщений
  • Программирование
  • Версия CMS:1.x, 2.x
  • Откуда:Россия

Опубликовано 23.10.2016 - 20:20

Если дадите FTP доступ, могу посмотреть...

#13 motya88

motya88
  • Пользователь
  • 119 сообщений

Опубликовано 23.10.2016 - 20:23

Если дадите FTP доступ, могу посмотреть...

если бы мог то дал, я пока учусь на денвере



#14 motya88

motya88
  • Пользователь
  • 119 сообщений

Опубликовано 26.10.2016 - 18:43

Подскажите, хочу вывести на странице каталога возможность выбора кол-ва отображаемых товаров.

 

В  view/ProductsView.php заменил код на:

// Показать все страницы сразу
if($this->request->get('page') == 'all')
    $items_per_page = $products_count; 
elseif($this->request->get('limit','integer') > 0)
    $items_per_page = $this->request->get('limit','integer');
 
$filter['limit'] = $items_per_page;
$filter['page'] = $current_page;   
     
$pages_num = ceil($products_count/$items_per_page);
$this->design->assign('total_pages_num', $pages_num);

а потом в products:

<div class="limit">
    Выводить по
    <a {if !$smarty.get.limit || $smarty.get.limit == 20} class="selected"{/if} href="{url limit=20 page=null}">20</a>
    <a {if $smarty.get.limit == 50}    class="selected"{/if} href="{url limit=50 page=null}">50</a>
    <a {if $smarty.get.limit == 100}     class="selected"{/if} href="{url limit=100 page=null}">100</a>
    <a {if $smarty.get.page == 'all'}     class="selected"{/if} href="{url limit=null page=all}">все</a>
</div>

Работает только отображение всех. Остальное нет. Подскажите в чем проблема??

Блин, проверил на чистой simpla все работает.

Как найти ошибку?



#15 motya88

motya88
  • Пользователь
  • 119 сообщений

Опубликовано 26.10.2016 - 18:47

Точнее я понял, проблема в моем файле view/ProductsView.php. А где именно пока не пойму :unsure: 

Вот ссылка на файл. Помогите найти ошибку, плииииииииииииз


Изменено: motya88, 26.10.2016 - 19:04


#16 motya88

motya88
  • Пользователь
  • 119 сообщений

Опубликовано 26.10.2016 - 23:26

Pls, help

#17 mishanya

mishanya
  • Фрилансер
  • 2 550 сообщений
  • Программирование, Верстка
  • Версия CMS:2.x
  • Откуда:Ukraine

Опубликовано 27.10.2016 - 16:11

Точнее я понял, проблема в моем файле view/ProductsView.php. А где именно пока не пойму :unsure: 

Вот ссылка на файл. Помогите найти ошибку, плииииииииииииз

 

у вас там нет кода

elseif($this->request->get('limit','integer') > 0)
    $items_per_page = $this->request->get('limit','integer');


#18 motya88

motya88
  • Пользователь
  • 119 сообщений

Опубликовано 27.10.2016 - 22:54

Мишаня, спасибо. мне стыдно -_-

А почему к примеру товаров всего 42.

и есть вот этот код:


<div class="catalog-item-limit"> 
  <a {if !$smarty.get.limit || $smarty.get.limit == 12} class="selected"{/if} href="{url limit=12 page=null}">12</a>
    <a {if $smarty.get.limit == 48}    class="selected"{/if} href="{url limit=48 page=null}">48</a>
    <a {if $smarty.get.page == 'all'}     class="selected"{/if} href="{url limit=null page=all}">Все</a>
</div>

Когда нажимаю "все", то класс "selected" у 12 и у "все"?



#19 mishanya

mishanya
  • Фрилансер
  • 2 550 сообщений
  • Программирование, Верстка
  • Версия CMS:2.x
  • Откуда:Ukraine

Опубликовано 27.10.2016 - 23:18

Мишаня, спасибо. мне стыдно -_-

А почему к примеру товаров всего 42.

и есть вот этот код:


<div class="catalog-item-limit"> 
  <a {if !$smarty.get.limit || $smarty.get.limit == 12} class="selected"{/if} href="{url limit=12 page=null}">12</a>
    <a {if $smarty.get.limit == 48}    class="selected"{/if} href="{url limit=48 page=null}">48</a>
    <a {if $smarty.get.page == 'all'}     class="selected"{/if} href="{url limit=null page=all}">Все</a>
</div>

Когда нажимаю "все", то класс "selected" у 12 и у "все"?

 

потому что у вас срабатывает условие 1 и условие 3. тоесть у вас фактически нет страницы но выводит все товары. попробуйте так

 

<div class="catalog-item-limit"> 
  <a {if (!$smarty.get.limit && $smarty.get.page != 'all') || $smarty.get.limit == 12} class="selected"{/if} href="{url limit=12 page=null}">12</a>
    <a {if $smarty.get.limit == 48}    class="selected"{/if} href="{url limit=48 page=null}">48</a>
    <a {if $smarty.get.page == 'all'}     class="selected"{/if} href="{url limit=null page=all}">Все</a>
</div>


#20 motya88

motya88
  • Пользователь
  • 119 сообщений

Опубликовано 27.10.2016 - 23:39

потому что у вас срабатывает условие 1 и условие 3. тоесть у вас фактически нет страницы но выводит все товары. попробуйте так

 

<div class="catalog-item-limit"> 
  <a {if (!$smarty.get.limit && $smarty.get.page != 'all') || $smarty.get.limit == 12} class="selected"{/if} href="{url limit=12 page=null}">12</a>
    <a {if $smarty.get.limit == 48}    class="selected"{/if} href="{url limit=48 page=null}">48</a>
    <a {if $smarty.get.page == 'all'}     class="selected"{/if} href="{url limit=null page=all}">Все</a>
</div>

Спасибо!Получилось







Также с меткой «пагинация каталог, товары»

0 пользователей читают эту тему

0 пользователей, 0 гостей, 0 скрытых