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

Постраничная навигация для списка новостей...


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

В .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.
Делается аналогично для любого модуля.

И не забудьте изменить шаблон и передать в него все необходимые данные :)

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

а можно немного поподробнее для особо одаренных, или напишите пожалуйста пример, а то у меня ничерта не вышло, новости вообще пропали :(

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

1) В .htaccess

RewriteRule ^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 клеим такой же код листалок страниц как и везде.

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

простите за наглость но у меня ничего не вышло :(((((((
вот мой код, что не так?

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

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

ВОТ код 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;

}

}

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

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

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

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

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

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

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

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

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

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