[DLE] Вывести текст в категории над новостями

Korew
На сайте с 31.12.2007
Offline
195
5027

Здравствуйте!

Необходимо вывести текст в категории над новостями.

Сделать это просто с помощью тегов [category][/category], но тут есть одна проблема.

Страница категории выглядит так:

http://site.ru/category/ - тут нужно вывести текст над новостями.

Но если новостей в категории много, то они выводятся на нескольких страницах, которые выглядят так:

http://site.ru/category/page/2/

http://site.ru/category/page/3/

и т.д.

Так вот нужно, что бы текст выводился только на первой странице, а на остальных не выводился.

Можно ли такое реализовать (желательно стандартными средствами DLE)?

Спасибо.

muratti
На сайте с 31.05.2008
Offline
238
#1
Korew:
Можно ли такое реализовать (желательно стандартными средствами DLE)?

Стандартными - нет.

Как вариант, вот: Хак Постраничный фильтр by Sander

Нашел, когда-то, хорошенько погуглив. :D

http://www.google.ru/search?hl=ru&newwindow=1&client=opera&hs=46M&rls=ru&channel=suggest&q=%D0%A5%D0%B0%D0%BA+%D0%9F%D0%BE%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%87%D0%BD%D1%8B%D0%B9+%D1%84%D0%B8%D0%BB%D1%8C%D1%82%D1%80+by+Sander&btnG=%D0%9F%D0%BE%D0%B8%D1%81%D0%BA&aq=f&aqi=&aql=&oq=

/**
* Постраничный фильтр by Sander
* ICQ: 404-037-556
* Демо: http://vconcepte.ru/
*/

Хак Постраничный фильтр by Sander



Этот хак позволяет скрывать или выводить информацию в шаблонах на определенных страницах. Работает по аналогии с тегами aviable= и category=, но обрабатывается на страницах навигации.

Возможности:
- вывод информации на указанных страницах навигации
- скрытие информации на указанных страницах навигации
- работа совместно с тегами aviable= и category=

Пример вывода информации на всех страницах навигации кроме указанных:
[not-page=x]ваш текст[/not-page]

где x:
1|3|5|6|7|20 - перечисляем номера страниц;
1-50 - указываем диапазон страниц;

Или вывод информации на указанных страницах навигации:
[page=1|2|5]ваш текст[/page]


Если вы хотите чтобы информация выводилась только на 5-ой странице пишем:
[page=5]ваш текст[/page]


А чтобы выводилась только на главной, везде кроме первых 3-х страниц:
[aviable=main][not-page=1-3]тут выводимый текст[/not-page][/aviable]


Версия DLE: любая

---------


Открыть файл /engine/classes/templates.class.php

Найти строку:
		$this->template = file_get_contents( $this->dir . DIRECTORY_SEPARATOR . $tpl_name );

После нее вставить:
		if (strpos ( $this->template, "[page=" ) !== false) $this->template = preg_replace ( "#\\[page=(.+?)\\](.*?)\\[/page\\]#ies", "\$this->check_page('\\1', '\\2')", $this->template );


if (strpos ( $this->template, "[not-page=" ) !== false) $this->template = preg_replace ( "#\\[not-page=(.+?)\\](.*?)\\[/not-page\\]#ies", "\$this->check_page('\\1', '\\2', false)", $this->template );


Найти строку:
		$template = file_get_contents( $this->dir . DIRECTORY_SEPARATOR . $tpl_name );

После нее вставить:
		if (strpos ( $template, "[page=" ) !== false) $this->template = preg_replace ( "#\\[page=(.+?)\\](.*?)\\[/page\\]#ies", "\$this->check_page('\\1', '\\2')", $this->template );


if (strpos ( $template, "[not-page=" ) !== false) $this->template = preg_replace ( "#\\[not-page=(.+?)\\](.*?)\\[/not-page\\]#ies", "\$this->check_page('\\1', '\\2', false)", $this->template );


Найти строку:
	function check_module($aviable, $block, $action = true) {

ПЕРЕД ней вставить:
	function check_page($pages, $block, $action = true) {

$cstart = intval($_GET['cstart']);
if($cstart<1) $cstart=1;
if(strpos($pages, "-") !== false){
$pages_arr = explode( '-', $pages );
$pages = array();
for($i=$pages_arr[0];$i<=$pages_arr[1];$i++) $pages[] = $i;
}else $pages = explode( '|', $pages );
$block = str_replace( '\"', '"', $block );
if( $action ) {
if( ! (in_array( $cstart, $pages )) ) return "";
else return $block;
} else {
if( (in_array( $cstart, $pages )) ) return "";
else return $block;
}
}


Korew
На сайте с 31.12.2007
Offline
195
#2

muratti, спасибо, попробую.

S
На сайте с 26.10.2007
Offline
74
#3

muratti, большое спасибо! искал в гугле и нашел. Поставил, все работает отлично, за исключение того что main.tpl распухает. Но уж лучше чем ничего.

Korew
На сайте с 31.12.2007
Offline
195
#4
Strongest:
за исключение того что main.tpl распухает

Можно в main.tpl вставить {include file="pages.tpl"}

А в pages.tpl вставить уже все тексты вида

[page=2]Текст[/page]

[page=5]Текст[/page]
[page=7]Текст[/page]
и т.д.

Так все более упорядочено получается.

S
На сайте с 26.10.2007
Offline
74
#5
Korew:
Так все более упорядочено получается.

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

Решил: в main.tpl сделал след:

[page=1]

{include file="texta.tpl"}

[/page]

А уже в самом шаблоне texta.tpl обрамлял текст в нужные мне категории.

Странно, что два параметра не срабатывали одновременно.

S
На сайте с 26.10.2007
Offline
74
#6

Народ, все же нужна небольшая помощь. Как описано выше, работает, да вот только наполовину. Описание категории выводится ещё и в полной новости этой категории. Как от этого избавиться?

Сёрч сила: надо было делать так, чтобы не выводилось в полном описании новости:

в main.tpl сделал след:

[page=1]

{include file="texta.tpl"}

[/page]

А уже в самом шаблоне texta.tpl

[aviable=cat][category=X]Текст[/category][/aviable]

где X = ID категории!

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

Надеюсь кому-нибудь пригодится.

Elizium
На сайте с 30.04.2010
Offline
80
#7

Korew, есть еще один способ.

С помощью вот этого хака делаете отдельный шаблон для вывода важных новостей. Далее создаете новость с нужным вам текстом (описанием категории), помечаете ее как важную и запрещаете вывод на главной странице.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий