Johnny Dillinger Опубликовано 8 июня, 2011 Жалоба Поделиться Опубликовано 8 июня, 2011 Помогите пожалуйста настроить постраничную навигацию для списка новостей... Цитата Ссылка на сообщение Поделиться на другие сайты
Noxter Опубликовано 8 июня, 2011 Жалоба Поделиться Опубликовано 8 июня, 2011 Присоединяюсь.Также для результатов поиска, статей и страницы с хитами нужна. Цитата Ссылка на сообщение Поделиться на другие сайты
alaster Опубликовано 8 июня, 2011 Жалоба Поделиться Опубликовано 8 июня, 2011 В .htaccess добавляете RewriteRule по аналогии со страницами в каталоге.В функцию fetch в News.class.php (и/или Articles.class.php) - добавляем код по аналогии разбора страниц - выглядит он примерно так.$current_page = intval($this->param('page'))-1;$current_page = max(0, $current_page);$this->smarty->assign('page', $current_page);$start_item = $current_page*$this->items_per_page;Что делается - вычленяется текущая страница из строки запроса, определяется позиция с которого начинать показ.Теперь остается добавить в запрос на вывод новостей LIMIT $start_item, $items_per_page.Делается аналогично для любого модуля.И не забудьте изменить шаблон и передать в него все необходимые данные Цитата Ссылка на сообщение Поделиться на другие сайты
Johnny Dillinger Опубликовано 9 июня, 2011 Автор Жалоба Поделиться Опубликовано 9 июня, 2011 а можно немного поподробнее для особо одаренных, или напишите пожалуйста пример, а то у меня ничерта не вышло, новости вообще пропали Цитата Ссылка на сообщение Поделиться на другие сайты
alaster Опубликовано 9 июня, 2011 Жалоба Поделиться Опубликовано 9 июня, 2011 1) В .htaccessRewriteRule ^news/page_([^/]+)/?$ index.php?module=NewsLine&page=$1 [L] [L,QSA]2) В NewsLine.class.php :: function fetch_list()$items_per_page = 12; // или сколько там Вам надо новостей на страницу, можно из settings с базы потянуть значение, как удобнее$current_page = intval($this->param('page'))-1;$current_page = max(0, $current_page);$start_item = $current_page*$items_per_page;$limit = is_null($start_item)?"":"LIMIT $start_item, $this->items_per_page";// запрос в бд$query = "SELECT * FROM `news` $limit"; // возможно вы захотите какие-то условия, к примеру вывести ток те новости, которые активны$this->db->query($query);$news = $this->results();// назначим переменные в шаблон$this->smarty->assign('news', $news);$this->smarty->assign('page', $current_page);// + посчитайте сами количество страниц новостей, можно прямо в том же запросе что тянет новости $this->smarty->assign('total_pages', $pages_num);3) В шаблоне news.tpl клеим такой же код листалок страниц как и везде. Цитата Ссылка на сообщение Поделиться на другие сайты
Johnny Dillinger Опубликовано 14 июня, 2011 Автор Жалоба Поделиться Опубликовано 14 июня, 2011 простите за наглость но у меня ничего не вышло ((((((вот мой код, что не так?NEWS.TPL{* Template name: Лента новостей Вывод новостной ленты. Используется классом NewsLine.class.php Передаваемые параметры: $news - список новостей*} <!-- Заголовок /--><div id="page_title"> <h1 tooltip='newsline' class="float_left">{if $section->header}{$section->header|escape}{else}Новости{/if}</h1> <!-- Хлебные крошки /--> <div id="path"> <a href="/">Главная</a> ? {if $section->header}{$section->header|escape}{else}Новости{/if} </div> <!-- Хлебные крошки #End /--></div> <!-- Текст раздела /-->{if $section->body}<div id="category_description"> {$section->body}</div>{/if}<!-- Текст раздела #End /--><!-- Новости /--><ul id="news"> {foreach name=news from=$news item=news_item} <li> <p class="news_date">{$news_item->date}</p> <h2 class="h2"> <a tooltip=news news_id={$news_item->news_id} href="news/{$news_item->url}">{$news_item->header|escape}</a> </h2> <p> {$news_item->annotation} </p> <div class="clear"><!-- /--></div> </li> {/foreach}</ul><!-- Новости #End /--><!-- Постраничная навигация /-->{if $total_pages>1}<script type="text/javascript" src="js/ctrlnavigate.js"></script> <div id="paging"> {section name=pages loop=$total_pages} <a {if $smarty.section.pages.index==$page}class="current_page" {/if}href="news/{if $smarty.section.pages.index}page_{$smarty.section.pages.index+1}/{/if}">{$smarty.section.pages.index+1}</a> {/section} {if $page>0} <a id="PrevLink" href="news/page_{$page}/" class="all_pages">? назад</a> {/if} {if $page<$total_pages-1} <a id="NextLink" href="news/page_{$page+2}/" class="all_pages">вперед ?</a> {/if}</div> {/if}<!-- Постраничная навигация #End /--> Цитата Ссылка на сообщение Поделиться на другие сайты
Johnny Dillinger Опубликовано 14 июня, 2011 Автор Жалоба Поделиться Опубликовано 14 июня, 2011 ВОТ код NewsLine.class.php require_once('Widget.class.php');class NewsLine extends Widget{var $news_count = 5; // Количество свежих новостей /** * * Конструктор * */ function NewsLine(&$parent) { Widget::Widget($parent); } /** * * Отображение * */ function fetch() { // Какую новость нужно вывести? $news_url = $this->url_filtered_param('news_url'); if (!empty($news_url)) { // Если передан url новости, выводим ее return $this->fetch_item($news_url); } else { // Если нет, выводим список всех новостей return $this->fetch_list(); } } /** * * Отображение списка новостей * */ function fetch_list() {$items_per_page = 12; // или сколько там Вам надо новостей на страницу, можно из settings с базы потянуть значение, как удобнее$current_page = intval($this->param('page'))-1;$current_page = max(0, $current_page);$start_item = $current_page*$items_per_page;$limit = is_null($start_item)?"":"LIMIT $start_item, $this->items_per_page"; // Выбераем новости из базы $this->db->query('SELECT *, DATE_FORMAT(date, \'%d.%m.%Y\') as date FROM news WHERE enabled=1 ORDER BY created DESC '); $news = $this->db->results(); // Передаем в шаблон $this->smarty->assign('news', $news); $this->smarty->assign('page', $current_page); // + посчитайте сами количество страниц новостей, можно прямо в том же запросе что тянет новости $this->smarty->assign('total_pages', $pages_num); $this->body = $this->smarty->fetch('news.tpl'); // Устанавливаем метатеги для ленты новостей (если она вызвана как голый модуль) $this->title = 'Новости'; return $this->body;$current_page = intval($this->param('page'))-1;$current_page = max(0, $current_page);$this->smarty->assign('page', $current_page);$start_item = $current_page*$this->items_per_page; } /** * * Отображение отдельной новости * */ function fetch_item($url) { // Выбираем новость из базы $query = sql_placeholder('SELECT *, DATE_FORMAT(date, \'%d.%m.%Y\') as date FROM news WHERE url = ? AND enabled=1 LIMIT 1', $url); $this->db->query($query); // Если не существует такая новость - ошибка 404 if ($this->db->num_rows() == 0) { return false; } $item = $this->db->result(); // Устанавливаем метатеги для страницы с этой новостью $this->title = $item->meta_title; $this->keywords = $item->meta_keywords; $this->description = $item->meta_description; // Передаем в шаблон $this->smarty->assign('news_item', $item); $this->body = $this->smarty->fetch('news_item.tpl'); return $this->body; }} Цитата Ссылка на сообщение Поделиться на другие сайты
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.