Перейти к публикации

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

Решил вот написать небольшой хак для вывода новостей в виде ленты (дайджест).

Желающие протестировать смело могут писать тут о замеченных ошибках или проблемах (а также перепечатывать на сайтах поддержки DataLife Engine :) ).

Список изменений :

-----------------------

1. В файле \.htaccess

после строк

# вывод непрочитанных статей

RewriteRule ^newposts(/?)+$ index.php?subaction=newposts [L]

RewriteRule ^newposts/page/([0-9]+)(/?)+$ index.php?subaction=newposts&cstart=$1 [L]
вставляем строки
# вывод дайджеста новостей

RewriteRule ^digest(/?)+$ index.php?subaction=digest [L]

RewriteRule ^digest/page/([0-9]+)(/?)+$ index.php?subaction=digest&cstart=$1 [L]
2. В файле \language\Russian\adminpanel.lng после строки
'charset'				=>	"windows-1251",
вставляем строки
// digest hack

'opt_sys_digestc'		=>	"Количество новостей в дайджесте",

'opt_sys_digestd'		=>	"Количество заголовков новостей, которое будет выводиться на страницу дайджеста",

// digest hack
3. В файле \language\Russian\website.lng после строки
'charset'			=>	"windows-1251",
вставляем строки
// digest hack

'title_digest'	=> "Лента (дайджест) новостей",

// digest hack
4. В файле \engine\engine.php a) после строк
if ($cstart < 0) $cstart = 0;

$CN_HALT = FALSE;
вставляем строку
$CACHE_NAME = "news";
б) ПЕРЕД строками
	else {


// ################ Новости на главной #################
вставляем строки
// ################ Вывод digest новостей #################

	elseif ($subaction == 'digest')

	{

		$config['news_number'] = intval($config['digest_number']);

		if ($cstart){

		$cstart = $cstart - 1;

		$cstart = $cstart * $config['news_number'];

		}

		$url_page = $config['http_home_url']."digest";


		$sql_select = "SELECT id, autor, date, short_story, full_story, xfields, title, category, alt_name, comm_num, allow_comm, allow_rate, approve, rating, vote_num, news_read FROM " . PREFIX . "_post WHERE {$stop_list}approve = '1'".$where_date." ORDER BY ".$config['news_sort']." ".$config['news_msort']." LIMIT ".$cstart.",".$config['news_number'];

		$sql_count = "SELECT COUNT(*) as count FROM " . PREFIX . "_post WHERE {$stop_list}approve = '1'".$where_date;


		$CACHE_NAME = "news_digest";

	}
c) вместо строки
	if ($cache_id < 8 AND !isset($_POST['login'])) $active = dle_cache("news", $config['skin'].$cache_id.$month.$year.$category, true); else $active = false;
вставляем строку
	if ($cache_id < 8 AND !isset($_POST['login'])) $active = dle_cache($CACHE_NAME, $config['skin'].$cache_id.$month.$year.$category, true); else $active = false;
d) вместо строки
		if ($news_found AND $cache_id < 8) create_cache("news", $tpl->result['content'], $config['skin'].$cache_id.$month.$year.$category, true);
вставляем строку
		if ($news_found AND $cache_id < 8) create_cache($CACHE_NAME, $tpl->result['content'], $config['skin'].$cache_id.$month.$year.$category, true);
e) после строки
		elseif ($subaction == 'newposts') $nam_e=$lang['title_new'];
вставляем строку
		elseif ($subaction == 'digest') $nam_e=$lang['title_digest'];
5. В файле \engine\inc\options.php после строки
	showRow($lang['opt_sys_newc'], $lang['opt_sys_newd'], "<input class=edit type=text style=\"text-align: center;\"  name='save_con[news_number]' value=\"{$config['news_number']}\" size=10>");
вставляем строки
// digest hack

	showRow($lang['opt_sys_digestc'], $lang['opt_sys_digestd'], "<input class=edit type=text style=\"text-align: center;\"  name='save_con[digest_number]' value=\"{$config['digest_number']}\" size=10>");

// digest hack
6. В файле \engine\modules\show.short.php a) после строки
	if (isset($view_template) AND $view_template == "rss") $tpl->load_template('rss.tpl');
вставляем строку
	elseif ($subaction == "digest") $tpl->load_template('digest.tpl');
б) после строки
	$sql_result = $db->query($sql_select);
вставляем строку
	$lastrowdate = '';
c) после строки
	$row['date'] = strtotime($row['date']);
вставляем строки
// digest Hack

	if ($subaction == 'digest') {

		$rowdate = date ("d/m/Y", $row['date']);

		$rowtime = date ("H:i", $row['date']);

		$tpl->set('{digest-time}', $rowtime);

		if ($lastrowdate != $rowdate) {

			$lastrowdate = $rowdate;

			$tpl->set('[digest-date]',"");

			$tpl->set('[/digest-date]',"");


			if ($config['allow_alt_url'] == "yes")

				$tpl->set('{digest-date}',"<a href=\"".$config['http_home_url'].date('Y/m/d/', $row['date'])."\">{$rowdate}</a>");

			else 

				$tpl->set('{digest-date}',"<a href=\"$PHP_SELF?year=".date('Y/', $row['date'])."&month=".date('m/', $row['date'])."&day=".date('d/', $row['date'])."\">{$rowdate}</a>");

		} else {

		$tpl->set_block("'\\[digest-date\\](.*?)\\[/digest-date\\]'si","");

		}

	}

// digest Hack
7. Создаем НОВЫЙ файл \templates\<шаблон>\digest.tpl и вставляем в него строки
[digest-date]<div class="digestdate">{digest-date}</div>[/digest-date]

<div align="left" class="digesttext">{digest-time}  [full-link]<b>{title}</b>[/full-link]<span class="digest"> :: <b>{author}</b> :: [com-link]({comments-num})[/com-link]</span></div>

8. Стили digestdate, digesttext и digest можно определить на свой вкус и цвет в файле \templates\<шаблон>\css\style.css.

9. Заходим в админ-панель и в основных настройках ставим значение "Количество новостей в дайджесте".

10. Теперь можно вызывать страничку дайджеста так :

без ЧПУ - http://<site>/index.php?subaction=digest

с ЧПУ - http://<site>/digest/

Изменено пользователем Akela
Ссылка на сообщение
Поделиться на других сайтах

Да, забыл написать, где можно посмотреть это в работе :) - http://www.natahaus.ru/digest/

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

Я уже пробовал вывести новости с тегом {custom} но ничего невыходит...

Писал в main.tpl

{custom category="2" template="movie" aviable="global" from="0" limit="10" cache="yes"}

А в шалоне "movie" стандартны теги как и в short story ничего невыводилось :( Версия 5.5

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

Спасибо, реально полезный модуль, но обнаружил один баг.

Если новости присвоить будущее время (документированная особенность движка), что бы она автоматом опубликовалась на сайте в определенное время, то в ленте новостей она всё равно появляется сразу после сохранения. Причем время перед новостью выставляется правильно (будущее). Как это можно исправить, чтобы новость в ленте не появлялась до указанного времени?

Изменено пользователем mbuild
Ссылка на сообщение
Поделиться на других сайтах

Спасибо, реально полезный модуль, но обнаружил один баг.

Если новости присвоить будущее время (документированная особенность движка), что бы она автоматом опубликовалась на сайте в определенное время, то в ленте новостей она всё равно появляется сразу после сохранения. Причем время перед новостью выставляется правильно (будущее). Как это можно исправить, чтобы новость в ленте не появлялась до указанного времени?

А эти новости отмечены как прошедшие модерацию и при этом не видны на главной странице ? Странно, что-то тут не то, или были сторонние изменения в файле engine.php.

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

Да, на главной не видны, в разделе не видны, в ленте видны. Это-то и обидно. Сразу теряется весь смысл выкладывания новостей по времени, а так нужно :(

Никаких сторонних изменений в файле engine.php не производилось.

Может кто-нибудь, у кого установлен этот мод, попробует повторить эту операцию. Если такой проблемы нет, значит дело в моих кривых руках. Хотя вроде всё проверял несколько раз.

Спасибо за проявленный интерес к данному вопросу

С уважением,

Михаил.

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

Никаких сторонних изменений в файле engine.php не производилось.

Ага, а то что нуллер там поменял, это типа "дела святого духа" :) ?

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

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

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

Гость
Ответить в тему...

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

  Разрешено не более 75 эмодзи.

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

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

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

×
×
  • Создать...