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

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

Подскажите, как сделать вывод кол-ва новостей добавленных после последнего визита. Есть некий хак:

if($is_logged) {

$ti = dle_cache("last_time_news", $member_id['user_id']);

if($ti === FALSE) {

$l = date( "Y-m-d H:i:s", $_SESSION['member_lasttime'] );

$th = date ( "Y-m-d H:i:s", $_TIME );

$t = $db->super_query("SELECT COUNT(id) as count FROM ".PREFIX."_post WHERE date between '$l' and '$th' AND approve = '1'");

$ti = $t['count'];

create_cache("last_time_news", $ti, $member_id['user_id']);

}

$tpl->set ( '{last_time_news}', $ti );

} else {

$tpl->set ( '{last_time_news}', '' );

}

который вставляется в index.php

но в итоге показывает не последнее кол-во записей а все записи которые есть на сатйе, хотя по ссылке index.php?subaction=newposts пишет что нового нет.....

сайт coir ru

может есть аналог?

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

Попробуйте, заменить свой код на этот:


if ($is_logged) {


	$ti = dle_cache("last_time_news", $member_id['user_id']);


	if ($ti === FALSE) {


		if (isset ( $_SESSION['member_lasttime'] )) {

			$lasttime = date ( "Y-m-d H:i:s", $_SESSION['member_lasttime'] );

		} else {

			$lasttime = date ( "Y-m-d H:i:s", (time () + ($config['date_adjust'] * 60) - (3600 * 4)) );

		}


		$thistime = date ( "Y-m-d H:i:s", $_TIME );


		$t = $db->super_query("SELECT COUNT(id) as count FROM ".PREFIX."_post WHERE date between '$lasttime' and '$thistime' AND approve = '1'");


		$ti = $t['count'];


		create_cache("last_time_news", $ti, $member_id['user_id']);

	}


	$tpl->set ( '{last_time_news}', $ti );

} else {

	$tpl->set ( '{last_time_news}', '' );

}

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

Попробуйте, заменить свой код на этот:


if ($is_logged) {


	$ti = dle_cache("last_time_news", $member_id['user_id']);


	if ($ti === FALSE) {


		if (isset ( $_SESSION['member_lasttime'] )) {

			$lasttime = date ( "Y-m-d H:i:s", $_SESSION['member_lasttime'] );

		} else {

			$lasttime = date ( "Y-m-d H:i:s", (time () + ($config['date_adjust'] * 60) - (3600 * 4)) );

		}


		$thistime = date ( "Y-m-d H:i:s", $_TIME );


		$t = $db->super_query("SELECT COUNT(id) as count FROM ".PREFIX."_post WHERE date between '$lasttime' and '$thistime' AND approve = '1'");


		$ti = $t['count'];


		create_cache("last_time_news", $ti, $member_id['user_id']);

	}


	$tpl->set ( '{last_time_news}', $ti );

} else {

	$tpl->set ( '{last_time_news}', '' );

}

Ага, спасибо! Работает!

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

ой, не работает, точнее при первом заходе показывает, что все новости (365) к примеру, если щёлкнуть на ссылку index.php?subaction=newposts то показывает (0), и если перегрузить страницу опять все показывает ((( чистка кэша и обновление страницы не помогает

причём на 9,5 работало, на 9,6 глюк (((

... в разных проводниках пробовал...

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

зачем кэшить пользовательские данные? они для разных пользователей будет одинаков, хотя должен быть разным

Не будет разными, потому, что я во всём движке не нашёл где устанавливается $_SESSION['member_lasttime']

Раньше она устанавливалась в файле /engine/modules/sitelogin.php 2 раза, сейчас ни разу.

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

Не лучшее конечно решение, 1000 пользователей, 1000 файлов, мдя.... Но если пользователей не так много то вполне облегчит.

Файл /engine/modules/sitelogin.php


# dle 9.5 строка 89

$_SESSION['member_lasttime'] = $member_id['lastdate'];

# dle 9.5 второе место, строка 183

if( !$_SESSION['member_lasttime'] ) {


$_SESSION['member_lasttime'] = $member_id['lastdate'];

# dle 9.6 строка 89

$member_id['lastdate'] = $_TIME;

# dle 9.6 второе место, строка 183

Тут уже удалено
Отличный вариант, просто заменить файл от dle 9.5 там как раз только этого и не хватает.
Хелп! :(
Попробуйте этот вариант

if ($is_logged) {


		$ti = dle_cache("last_time_news", $member_id['user_id']);


		if ($ti === FALSE) {


				if ( ! empty ( $member_id['lastdate'] )) {

						$lasttime = date ( "Y-m-d H:i:s", $member_id['lastdate'] );

				} else {

						$lasttime = date ( "Y-m-d H:i:s", (time () + ($config['date_adjust'] * 60) - (3600 * 4)) );

				}


				$thistime = date ( "Y-m-d H:i:s", $_TIME );


				$t = $db->super_query("SELECT COUNT(id) as count FROM ".PREFIX."_post WHERE date between '$lasttime' and '$thistime' AND approve = '1'");


				$ti = $t['count'];


				create_cache("last_time_news", $ti, $member_id['user_id']);

		}


		$tpl->set ( '{last_time_news}', $ti );

} else {

		$tpl->set ( '{last_time_news}', '' );

}
По адресу /newposts/ или /index.php?subaction=newposts кешировать не будет, потому, что там кэш отключается. Файл /engine/engine.php Ищем: // ################ Вывод непрочитанных новостей ################# чуть ниже

# строка

$config['allow_cache'] = false;

p.s. Должно всё работать.

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

итог - на странице ?subaction=newposts (когда нет новых новостей) показывает 0 а на других страницах - выводит полное кол-во.

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

на странице ?subaction=newposts (когда нет новых новостей) показывает 0

А что там должно быть?

а на других страницах - выводит полное кол-во.

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

Вы точно пробуете мой пример кода?

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

Я под своим логином смотрел, потом создал нового пользователя, тоже самое... -)))

скопировал - вставил.... ща ещё попробую...

в index вставляю


if ($is_logged) {			    $ti = dle_cache("last_time_news", $member_id['user_id']);			    if ($ti === FALSE) {							    if ( ! empty ( $member_id['lastdate'] )) {											    $lasttime = date ( "Y-m-d H:i:s", $member_id['lastdate'] );							    } else {											    $lasttime = date ( "Y-m-d H:i:s", (time () + ($config['date_adjust'] * 60) - (3600 * 4)) );							    }															    $thistime = date ( "Y-m-d H:i:s", $_TIME );							    $t = $db->super_query("SELECT COUNT(id) as count FROM ".PREFIX."_post WHERE date between '$lasttime' and '$thistime' AND approve = '1'");							    $ti = $t['count'];							    create_cache("last_time_news", $ti, $member_id['user_id']);			    }			    $tpl->set ( '{last_time_news}', $ti );} else {			    $tpl->set ( '{last_time_news}', '' );}

в Файл /engine/engine.php ниже

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

вставляю

$config['allow_cache'] = false;

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

Я под своим логином смотрел, потом создал нового пользователя, тоже самое... -)))

скопировал - вставил.... ща ещё попробую...

в index вставляю


if ($is_logged) {				$ti = dle_cache("last_time_news", $member_id['user_id']);				if ($ti === FALSE) {								if ( ! empty ( $member_id['lastdate'] )) {												$lasttime = date ( "Y-m-d H:i:s", $member_id['lastdate'] );								} else {												$lasttime = date ( "Y-m-d H:i:s", (time () + ($config['date_adjust'] * 60) - (3600 * 4)) );								}																$thistime = date ( "Y-m-d H:i:s", $_TIME );								$t = $db->super_query("SELECT COUNT(id) as count FROM ".PREFIX."_post WHERE date between '$lasttime' and '$thistime' AND approve = '1'");								$ti = $t['count'];								create_cache("last_time_news", $ti, $member_id['user_id']);				}				$tpl->set ( '{last_time_news}', $ti );} else {				$tpl->set ( '{last_time_news}', '' );}

в Файл /engine/engine.php ниже

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

вставляю

$config['allow_cache'] = false;

Ничего вставлять туда не надо. Там это есть. Я указал лишь то, что там отключается кэш.

Для включения нужно изменить эту строчку на $config['allow_cache'] = TRUE; соответственно.

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

Было добавлено публикаций: 388

страница

?subaction=newposts

Было добавлено публикаций: 388

давайте в личку

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

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

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

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

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

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

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

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

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

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