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 Цитата Ссылка на сообщение Поделиться на других сайтах
Рекомендованные сообщения
Присоединяйтесь к обсуждению
Вы можете опубликовать сообщение сейчас, а зарегистрироваться позже. Если у вас есть аккаунт, войдите в него для написания от своего имени.