Kpoxa Опубликовано 5 июля, 2013 Жалоба Поделиться Опубликовано 5 июля, 2013 Пытаюсь прикрутить постраничную навигацию для комментариев, но что-то видимо не учитываю. $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. Где ошибка? Подскажите! Цитата Ссылка на сообщение Поделиться на другие сайты
mart Опубликовано 5 июля, 2013 Жалоба Поделиться Опубликовано 5 июля, 2013 А в коде comments->get_comments есть обработчик входного page и limit? Цитата Ссылка на сообщение Поделиться на другие сайты
Kpoxa Опубликовано 5 июля, 2013 Автор Жалоба Поделиться Опубликовано 5 июля, 2013 Да 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); Цитата Ссылка на сообщение Поделиться на другие сайты
mart Опубликовано 5 июля, 2013 Жалоба Поделиться Опубликовано 5 июля, 2013 А добавляется в запрос $sql_limit? Цитата Ссылка на сообщение Поделиться на другие сайты
Kpoxa Опубликовано 5 июля, 2013 Автор Жалоба Поделиться Опубликовано 5 июля, 2013 $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"); Цитата Ссылка на сообщение Поделиться на другие сайты
mart Опубликовано 5 июля, 2013 Жалоба Поделиться Опубликовано 5 июля, 2013 Блин, долго будешь кусками выкладывать? Сделай echo $query и посмотри что в итоге. Если нет дописки, то либо не передаются (что маловероятно), либо неверно обрабатываешь. Цитата Ссылка на сообщение Поделиться на другие сайты
Kpoxa Опубликовано 5 июля, 2013 Автор Жалоба Поделиться Опубликовано 5 июля, 2013 Март, спасибо за добрые слова, только объясните зачем в ProductView дважды прописано$comments = $this->comments->get_comments(array('type'=>'product', 'object_id'=>$product->id, 'approved'=>1, 'ip'=>$_SERVER['REMOTE_ADDR']));и дважды $this->design->assign('comments', $comments); Цитата Ссылка на сообщение Поделиться на другие сайты
mart Опубликовано 5 июля, 2013 Жалоба Поделиться Опубликовано 5 июля, 2013 Вопрос не по адресу... Цитата Ссылка на сообщение Поделиться на другие сайты
osben Опубликовано 7 июля, 2013 Жалоба Поделиться Опубликовано 7 июля, 2013 да, и с этой наработкой забудьте что с админки будете попадать в нужный комент (#comment_{$comment->id}) Цитата Ссылка на сообщение Поделиться на другие сайты
Kpoxa Опубликовано 7 июля, 2013 Автор Жалоба Поделиться Опубликовано 7 июля, 2013 да, и с этой наработкой забудьте что с админки будете попадать в нужный комент (#comment_{$comment->id}) Верное замечание, а как то побороть? Цитата Ссылка на сообщение Поделиться на другие сайты
alaster Опубликовано 7 июля, 2013 Жалоба Поделиться Опубликовано 7 июля, 2013 ajax'ом после клика по id коммента определять его страницу и отправлять на неё Цитата Ссылка на сообщение Поделиться на другие сайты
Kpoxa Опубликовано 7 июля, 2013 Автор Жалоба Поделиться Опубликовано 7 июля, 2013 Спасибо за ответ, но увы не с моими знаниями это сделать Цитата Ссылка на сообщение Поделиться на другие сайты
alaster Опубликовано 7 июля, 2013 Жалоба Поделиться Опубликовано 7 июля, 2013 Спасибо за ответ, но увы не с моими знаниями это сделать Можно еще сделать одно значение для параметра страниц комметариев, при котором они будут выводиться все. И из админки ссылаться именно на страницу со всеми комментами. Цитата Ссылка на сообщение Поделиться на другие сайты
osben Опубликовано 11 июля, 2013 Жалоба Поделиться Опубликовано 11 июля, 2013 Высчитывать страницу тоже будет работать не корректно, потому что:- Для админа вроде все отзывы показываются (если не ошибаюсь)- Для пользователей опубликованные + свои по IP не опубликованные Цитата Ссылка на сообщение Поделиться на другие сайты
snake22 Опубликовано 2 ноября, 2014 Жалоба Поделиться Опубликовано 2 ноября, 2014 сделать навигацию комментов в симпле легко. ибо в админской части листалка коментов есть, соответственно нам нужно только задать в фильтр параметры и вывести на страницу продукта листалку.для этого надо сделать следующее:в файле 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) --> Цитата Ссылка на сообщение Поделиться на другие сайты
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.