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

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


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

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

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

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

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

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

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

 

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

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

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

Вы либо не там искали либо не искали вообще.

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

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

 

Вы либо не там искали либо не искали вообще.

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

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

 

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

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

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

 

В  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>

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

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

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

 

// Вычисляем количество страниц

$products_count = $this->products->count_products($filter);

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

Скорее всего, потому, что замененный код в 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;
	}
	
	

}

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

У меня локально Ваш код работает правильно.

Например

http://localhost/simpla237/catalog/mobilnye-telefony?limit=3

показывает 3 товара

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

У меня локально Ваш код работает правильно.

Например

http://localhost/simpla237/catalog/mobilnye-telefony?limit=3

показывает 3 товара

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

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

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

 

В  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 все работает.

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

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

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

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

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

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

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

 

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

elseif($this->request->get('limit','integer') > 0)
    $items_per_page = $this->request->get('limit','integer');
Ссылка на сообщение
Поделиться на другие сайты

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

А почему к примеру товаров всего 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 и у "все"?

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

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

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

 

потому что у вас срабатывает условие 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>

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

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

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

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

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

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

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

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

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

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

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