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

Постраничная навигация комментариев


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

Пытаюсь прикрутить постраничную навигацию для комментариев, но что-то видимо не учитываю.

 

 

        $filter = array();
        $filter['type'] = 'product';
        $filter['object_id'] = $product->id;
        $filter['approved'] = 1;
        $filter['ip'] = $_SERVER['REMOTE_ADDR'];


        // Постраничная навигация
        $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);
        // Вычисляем количество страниц
        $comments_count = $this->comments->count_comments($filter);
        $pages_num = ceil($comments_count/$items_per_page);
        $this->design->assign('total_pages_num', $pages_num);


        $filter['page'] = $current_page;
        $filter['limit'] = $items_per_page;


        $comments = array();
        foreach($this->comments->get_comments($filter) as $c)
            $comments[$c->id] = $c;
 

 

 

Разбивка на страницы появляется, но на каждой странице полный список комментариев.

Такое впечатление, что в get_comments не передается limit.

 

Где ошибка? Подскажите!

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

Да

		if(isset($filter['limit']))
			$limit = max(1, intval($filter['limit']));

		if(isset($filter['page']))
			$page = max(1, intval($filter['page']));

		$sql_limit = $this->db->placehold(' LIMIT ?, ? ', ($page-1)*$limit, $limit);

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

$query = $this->db->placehold("SELECT c.id, c.object_id, c.ip, c.name, c.email, c.rating, c.type, c.date, c.text, c.approved
FROM __comments c WHERE 1 $object_id_filter $type_filter $keyword_filter $approved_filter ORDER BY id DESC $sql_limit");

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

Блин, долго будешь кусками выкладывать? :) Сделай echo $query и посмотри что в итоге. Если нет дописки, то либо не передаются (что маловероятно), либо неверно обрабатываешь.

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

Март, спасибо за добрые слова, только объясните зачем в ProductView дважды прописано

$comments = $this->comments->get_comments(array('type'=>'product', 'object_id'=>$product->id, 'approved'=>1, 'ip'=>$_SERVER['REMOTE_ADDR']));

и дважды $this->design->assign('comments', $comments);

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

да, и с этой наработкой забудьте что с админки будете попадать в нужный комент (#comment_{$comment->id})  ;)

Верное замечание, а как то побороть?

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

Спасибо за ответ, но увы не с моими знаниями это сделать 

Можно еще сделать одно значение для параметра страниц комметариев, при котором они будут выводиться все. И из админки ссылаться именно на страницу со всеми комментами.

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

Высчитывать страницу тоже будет работать не корректно, потому что:
- Для админа вроде все отзывы показываются (если не ошибаюсь)
- Для пользователей опубликованные + свои по IP не опубликованные 

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

сделать навигацию комментов в симпле легко. ибо  в админской части листалка коментов есть, соответственно нам нужно только задать в фильтр параметры и вывести на страницу продукта листалку.
для этого надо сделать следующее:
в файле view/ProductView.php найти строку

// Отзывы о товаре
$comments = $this->comments->get_comments(array('type'=>'product',.......);

и изменить её на:
// Настраиваем фильтр устанавливая лимит и текущую страницу
         $filter = array();          
          // Вначале вставляем дефольтные параметры фильтра симплы:
          $filter['type'] = 'product';
          $filter['object_id'] = $product->id;
          $filter['approved'] = 1;
          $filter['ip'] = $_SERVER['REMOTE_ADDR'];

//Теперь наши для навигации:
$filter['page'] = max(1, $this->request->get('page', 'integer'));
          
          // Считываем общее кол-во коментов для рассчета страниц          
          $comments_count = $this->comments->count_comments($filter); 
        
        $filter['limit'] = 10; // По умолчанию 10 коментов
        // Если выбрано "все" то покажем все.        
        if( $this->request->get('page')=='all') $filter['limit']=$comments_count;
        
        // Отзывы о товаре
        $comments = $this->comments->get_comments($filter);
 
и добавляем строки о кол-ве комментов для страничной навигации:
$this->design->assign('total_pages_num', ceil($comments_count/$filter['limit']));        
$this->design->assign('current_page_num', $filter['page']);

 

и последний шаг, в файле дизайна продукта product.tpl  в условии где выводятся комменты. добавить 
 
{if $comments}
<!-- Листалка страниц -->          
          
{include file='pagination.tpl'}          
          
<!-- Листалка страниц (The End) -->          
          
Ссылка на сообщение
Поделиться на другие сайты

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

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

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

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

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

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

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

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

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