DimkaG 5 Опубликовано: 20 июля 2012 Рассказать Опубликовано: 20 июля 2012 (изменено) Подскажите, как сделать вывод кол-ва новостей добавленных после последнего визита. Есть некий хак: 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 может есть аналог? Изменено 20 июля 2012 пользователем DimkaG Ссылка на сообщение Поделиться на других сайтах
Sarvan 35 Опубликовано: 20 июля 2012 Рассказать Опубликовано: 20 июля 2012 (изменено) Попробуйте, заменить свой код на этот: 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}', '' ); } Изменено 20 июля 2012 пользователем Sarvan Ссылка на сообщение Поделиться на других сайтах
DimkaG 5 Опубликовано: 20 июля 2012 Рассказать Опубликовано: 20 июля 2012 Автор Попробуйте, заменить свой код на этот: 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}', '' ); } Ага, спасибо! Работает! Ссылка на сообщение Поделиться на других сайтах
DimkaG 5 Опубликовано: 20 июля 2012 Рассказать Опубликовано: 20 июля 2012 Автор ой, не работает, точнее при первом заходе показывает, что все новости (365) к примеру, если щёлкнуть на ссылку index.php?subaction=newposts то показывает (0), и если перегрузить страницу опять все показывает ((( чистка кэша и обновление страницы не помогаетпричём на 9,5 работало, на 9,6 глюк (((... в разных проводниках пробовал... Ссылка на сообщение Поделиться на других сайтах
DimkaG 5 Опубликовано: 27 июля 2012 Рассказать Опубликовано: 27 июля 2012 Автор Вопрос открыт! Ссылка на сообщение Поделиться на других сайтах
DimkaG 5 Опубликовано: 30 июля 2012 Рассказать Опубликовано: 30 июля 2012 Автор Хелп! Ссылка на сообщение Поделиться на других сайтах
a1ex 60 Опубликовано: 30 июля 2012 Рассказать Опубликовано: 30 июля 2012 зачем кэшить пользовательские данные? они для разных пользователей будет одинаков, хотя должен быть разным Ссылка на сообщение Поделиться на других сайтах
Sarvan 35 Опубликовано: 31 июля 2012 Рассказать Опубликовано: 31 июля 2012 зачем кэшить пользовательские данные? они для разных пользователей будет одинаков, хотя должен быть разным Не будет разными, потому, что я во всём движке не нашёл где устанавливается $_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. Должно всё работать. Ссылка на сообщение Поделиться на других сайтах
DimkaG 5 Опубликовано: 31 июля 2012 Рассказать Опубликовано: 31 июля 2012 Автор не понял что менять на что! Ссылка на сообщение Поделиться на других сайтах
DimkaG 5 Опубликовано: 31 июля 2012 Рассказать Опубликовано: 31 июля 2012 Автор итог - на странице ?subaction=newposts (когда нет новых новостей) показывает 0 а на других страницах - выводит полное кол-во. Ссылка на сообщение Поделиться на других сайтах
Sarvan 35 Опубликовано: 31 июля 2012 Рассказать Опубликовано: 31 июля 2012 на странице ?subaction=newposts (когда нет новых новостей) показывает 0 А что там должно быть? а на других страницах - выводит полное кол-во. Такое вообще возможно лишь в одном случае, если только данный пользователь заходил последний раз с момента создания сайта. Вы точно пробуете мой пример кода? Ссылка на сообщение Поделиться на других сайтах
DimkaG 5 Опубликовано: 31 июля 2012 Рассказать Опубликовано: 31 июля 2012 Автор Я под своим логином смотрел, потом создал нового пользователя, тоже самое... -))) скопировал - вставил.... ща ещё попробую... в 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; Ссылка на сообщение Поделиться на других сайтах
Sarvan 35 Опубликовано: 31 июля 2012 Рассказать Опубликовано: 31 июля 2012 Я под своим логином смотрел, потом создал нового пользователя, тоже самое... -))) скопировал - вставил.... ща ещё попробую... в 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; соответственно. Ссылка на сообщение Поделиться на других сайтах
DimkaG 5 Опубликовано: 31 июля 2012 Рассказать Опубликовано: 31 июля 2012 Автор Было добавлено публикаций: 388 страница ?subaction=newposts Было добавлено публикаций: 388давайте в личку Ссылка на сообщение Поделиться на других сайтах
DimkaG 5 Опубликовано: 31 июля 2012 Рассказать Опубликовано: 31 июля 2012 Автор "шарик, ты балбес" (с), нашёл я почему не работало!!!! спасибо за помощь!!! Ссылка на сообщение Поделиться на других сайтах
Sarvan 35 Опубликовано: 31 июля 2012 Рассказать Опубликовано: 31 июля 2012 Ссылка на сообщение Поделиться на других сайтах
Рекомендованные сообщения
Создайте аккаунт или войдите в него для комментирования
Вы должны быть пользователем, чтобы оставить комментарий
Создать аккаунт
Зарегистрируйтесь для получения аккаунта. Это просто!
Зарегистрировать аккаунтВойти
Уже зарегистрированы? Войдите здесь.
Войти сейчас