Не нравятся результаты поиска? Попробуйте другой поиск!
DLE FAQ » Все вопросы » Шаблоны (TPL) » Количество непрочитанных новостей, возможно?
фотозона

Количество непрочитанных новостей, возможно?


     01.05.2023    Шаблоны (TPL), Хаки    728

вопрос
Добрый день.
Помогите, пожалуйста, с решением задачи. Хочется вывести количество (именно количество числом, как new-pm) непрочитанных новостей на сайте для залогиненного пользователя. Естественно важно, что бы это количество уменьшалось на единицу при просмотре каждой из новых новостей.
Кеш отключен.
Решения могут быть в этом случае?

Ответа пока нет


11 комментариев

svbox
Юзер

svbox - 5 мая 2023 19:27 -

Большое спасибо за то, что подсказали алгоритм. Я попробую сам написать.

TeraMoune
Эксперт

TeraMoune - 5 мая 2023 23:16 -

В этом ответе ничего путного нету, а сам ответ не точный и ошибочный. И это не его ответ, скорей всего это ответил, ChatGPT. С таким же успехом, вы и сами можете напрямую задавать вопросы этой нейронке, но ожидать, что она даст реально верный ответ под DLE не стоит. Она много неточных и левых данных мешает в ответы, и не ясно откуда она черпает информацию.

P.S. Скоро будет уйма экспертов которые будут вот так отвечать.

deadluk
Юзер

deadluk - 6 мая 2023 09:27 -

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

iChudo
Юзер

iChudo - 5 мая 2023 23:17 -

***Комментарий удален***

iChudo
Юзер

iChudo - 6 мая 2023 02:33 -

TeraMoune если считаете правым, то флаг вам в руки.

svbox
Юзер

svbox - 6 мая 2023 21:26 -

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

svbox
Юзер

svbox - 7 мая 2023 16:20 -

Возвращаюсь за коллективным разумом. Мои познания в связке php + dle очень низкие, но код я написал. Написал очень топорно, вроде да же работает без ошибок. Коллеги, пожалуйста, помогите сделать код более грамотным под движок dle, более, чем вероятно, что я чего-то не понимаю и не знаю. Ниже делюсь со своим решением, жду помощи от знатоков.

1) Добавил в БД users ячейку unread. В ней через разделитель будут храниться id новостей.
2) init.php найти и добавить ниже
$tpl->set( '{all-pm}', $member_id['pm_all'] );

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

    $db->query( "SELECT id FROM " . PREFIX . "_post WHERE approve=1 AND date between '$lasttime' AND '$thistime'" );
	$nc = array();
    while ( $row = $db->get_row() ) {
        $nc[] = $row['id'];      	
    }
	$db->free ();
	if (!empty($nc)) {
    	$db->query( "SELECT unread FROM " . PREFIX . "_users WHERE user_id='$user' LIMIT 1" );
      	$row = $db->get_row();
      	$unread = $row['unread'];
      	if ($unread != '') { 
      		$unread = explode(".", $row['unread']);
          	$unread_upd = array_merge($unread, $nc);
         	$unread_upd = array_unique($unread_upd);
        } else {
          	$unread_upd = $nc;
        } 
      	$unread_count = count($unread_upd);
		$unread_update = implode(".", $unread_upd);      	
      	$db->query( "UPDATE " . PREFIX . "_users set unread='$unread_update', lastdate='$_TIME' WHERE user_id='$user'" );      	
    } else {
    	$db->query( "SELECT unread FROM " . PREFIX . "_users WHERE user_id='$user' LIMIT 1" );
      	$row = $db->get_row();
      	$unread_upd = explode(".", $row['unread']);
      	$unread_count = count($unread_upd);
    }     
	$db->free ();
	$tpl->set( '{unread}', $unread_count );

3) show.full.php найти и добавить ниже
$news_id = $row['id'];

	if (in_array($news_id, $unread_upd)) {
		if(($key = array_search($news_id,$unread_upd)) !== FALSE) {
     		unset($unread_upd[$key]);
		}
		$unread_update = implode(".", $unread_upd);
  		$db->query( "UPDATE " . PREFIX . "_users set unread='$unread_update' WHERE user_id='$user'" );
	} 



Вроде бы я учел все сценарии с точки зрения php, но в любом случае хотелось бы обратной связи от знатоков!
Спасибо.

svbox
Юзер

svbox - 7 мая 2023 17:25 -

Апдейт, небольшая ошибка, все время 1 показывает если строка пустая.

      	if ($row['unread'] != '') {;
      		$unread_upd = explode(".", $row['unread']);
      		$unread_count = count($unread_upd);
        } else {
          	$unread_count = 0;
        }

svbox
Юзер

svbox - 7 мая 2023 22:18 -

Коллективный разум точно понадобится, обнаружил, что из-за изменений в init пропала возможность редактировать профиль. Постоянно пишет, что пользователь с таким именем не найден. Стоит отключить мои изменения в файле init.php и профиль снова работает.

TeraMoune
Эксперт

TeraMoune - 8 мая 2023 07:35 -

обнаружил, что из-за изменений в init пропала возможность редактировать профиль. Постоянно пишет, что пользователь с таким именем не найден.

Так вы переопределили переменную которая ранее была определена и используется в системе
$user = $member_id['user_id'];

Эта переменная есть примерно в районе 150 строчки оригинального дистрибутива. Она хранит именно имя, а не id пользователя. Вам надо быть внимательным и использовать свободные имена переменных или искать нужные в файлах но не переопределять их.

Апдейт, небольшая ошибка, все время 1 показывает если строка пустая.

Может не указана выборка ячейки в sql запросе, это делается в файле engine.php там полным полно sql запросов на разные разделы, надо найти запросы относящиеся к полной новости и добавить там выбор данной ячейки.

svbox
Юзер

svbox - 8 мая 2023 09:32 -

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

Чтобы комментировать - войдите или зарегистрируйтесь на сайте

Похожие вопросы

наверх