Не нравятся результаты поиска? Попробуйте другой поиск!
DLE FAQ » Все вопросы » Общие вопросы » Как вывести Топ пользователей через UserBox?

Как вывести Топ пользователей через UserBox?


     10.09.2020    userbox, топ пользователей    Общие вопросы, Общие вопросы по PHP, Модули    122

вопрос
Доброго времени суток. Пытаюсь вывести в блок информацию о ТОП пользователей по количеству добавленных новостей через UserBox
Написал небольшой плагин для вывода логина пользователя:


У меня несколько вопросов.

1. Правильно ли я прописал кеширование в плагине?
2. Как вывести пользователей по отдельности. $topusers1, $topusers2, $topusers3 и т.д. чтоб потом переменные подставить в строку подключения UserBox:

{include file="engine/modules/userbox.php?&userName={topusers}&template=rating"}

Заранее спасибо за помощь.

Ответил: dj-avtosh


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

dj-avtosh
PHP-developer

dj-avtosh - 10 сентября 2020 12:27 -

1. Неправильно. Кеш все время создается, но никогда не читается. Соответственно запрос все время выполняется.
2.
${'topusers' . $row['user_id']} = "{$row['name']}";
$tpl->result['topusers' . $row['user_id']] = ${'topusers' . $row['user_id']};

ЯД: 41001679231462
Заказы в telegram (ремонт модулей, оптимизация нагрузок и т.п.): @blob42
В телегу писать сразу задачу и бюджет.

ushkom
Юзер

ushkom - 10 сентября 2020 12:50 -

Спасибо за отзыв. Не совсем понял, в main.php я прописывал $tpl->set ( '{topusers}', $tpl->result['topusers'] );
Каким образом сейчас прописать чтоб получить на выходе {topusers1}, {topusers2} и т. д.?

Сейчас код получился таким:

dj-avtosh
PHP-developer

dj-avtosh - 10 сентября 2020 12:53 -

внутри цикла код нужно вписать, а не снаружи.

ЯД: 41001679231462
Заказы в telegram (ремонт модулей, оптимизация нагрузок и т.п.): @blob42
В телегу писать сразу задачу и бюджет.

dj-avtosh
PHP-developer

dj-avtosh - 10 сентября 2020 12:57 -

можно сделать типа такого:

<?php
if(!defined('DATALIFEENGINE')) {
  	die("Hacking attempt!");
}

global $config;

$limit = $limit ? intval($limit) : "5";


$sql = $db->query("SELECT * FROM " . PREFIX . "_users WHERE news_num > '0' ORDER BY news_num DESC LIMIT 0,{$limit}");

$tpl->result['topusers'] = [];

while ($row = $db->get_row($sql)) {
    $tpl->result['topusers'] = $row;
}
?>


а в main.php:


foreach($tpl->result['topusers'] as $topUserRow) {
   $tpl->set ( '{topusers' . $topUserRow['user_id'] . '}', $topUserRow['name'] );
}

ЯД: 41001679231462
Заказы в telegram (ремонт модулей, оптимизация нагрузок и т.п.): @blob42
В телегу писать сразу задачу и бюджет.

ushkom
Юзер

ushkom - 10 сентября 2020 13:06 -

А как их потом вывести в строку подключения:
{include file="engine/modules/userbox.php?&userName={topusers1}&template=rating"}
{include file="engine/modules/userbox.php?&userName={topusers2}&template=rating"}
{include file="engine/modules/userbox.php?&userName={topusers3}&template=rating"}
{include file="engine/modules/userbox.php?&userName={topusers4}&template=rating"}
{include file="engine/modules/userbox.php?&userName={topusers5}&template=rating"}

Я так понял нужно знать его id для вывода, например {topusers5555}, где 5555 его id?

dj-avtosh
PHP-developer

dj-avtosh - 10 сентября 2020 13:07 -

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

ЯД: 41001679231462
Заказы в telegram (ремонт модулей, оптимизация нагрузок и т.п.): @blob42
В телегу писать сразу задачу и бюджет.

ushkom
Юзер

ushkom - 10 сентября 2020 13:25 -

Мне нужно вывести по отдельности логины ТОП пользователей для вставки их в строку подключения модуля UserBox. Запрос выводит 5 пользователей, каждому из них нужно присвоить переменную {topusers1}, {topusers2} и т. д. Я учусь работать с плагинами DLE, так что скорее всего изначально не верно построил логику модуля.

ushkom
Юзер

ushkom - 10 сентября 2020 13:15 -

Мне нужно вывести по отдельности логины ТОП пользователей для вставки их в строку подключения модуля UserBox. Запрос выводит 5 пользователей, каждому из них нужно присвоить переменную {topusers1}, {topusers2} и т. д. Я учусь работать с плагинами DLE, так что скорее всего изначально не верно построил логику модуля.

dj-avtosh
PHP-developer

dj-avtosh - 10 сентября 2020 13:31 -

так неправильно делать, вы не будете заранее знать скомпилированные переменные.
Если вы хотите вывести в качестве цифр 1 2 и 3 - места юзеров, то можно сделать так:

<?php
if(!defined('DATALIFEENGINE')) {
  	die("Hacking attempt!");
}

global $config;

$limit = $limit ? intval($limit) : "5";


$sql = $db->query("SELECT * FROM " . PREFIX . "_users WHERE news_num > '0' ORDER BY news_num DESC LIMIT 0,{$limit}");

$i = 1;
$tpl->result['topusers'] = [];

while ($row = $db->get_row($sql)) {
    $tpl->result['topusers'][$i] = $row;
    ++$i;
}
?>



а в main.php:


foreach($tpl->result['topusers'] as $topUserKey => $topUserRow) {
   $tpl->set ( '{topusers' . $topUserKey . '}', $topUserRow['name'] );
}


соответственно теперь в шаблоне:
{topusers1} - имя лучшего юзера
{topusers2} - имя юзера с "серебрянной медалью"

и т.п.

Далее вставляете как хотите в какой хотите модуль, если он принимает на вход имя юзера.

ЯД: 41001679231462
Заказы в telegram (ремонт модулей, оптимизация нагрузок и т.п.): @blob42
В телегу писать сразу задачу и бюджет.

dj-avtosh
PHP-developer

dj-avtosh - 10 сентября 2020 13:33 -

первый php код нужно заинключить в main.php (предварительно убрав лишние global и т.п.)

ЯД: 41001679231462
Заказы в telegram (ремонт модулей, оптимизация нагрузок и т.п.): @blob42
В телегу писать сразу задачу и бюджет.

ushkom
Юзер

ushkom - 10 сентября 2020 13:40 -

Именно то что нужно, большое спасибо. Не могли бы еще кеш привязать к последнему коду, так как меняться логины будут редко.
Если не сложно сбросьте в ЛС ваш киви, хоть чуток отблагодарю Вас. Я с Украины, на другие платежные системы не могу перевести.

dj-avtosh
PHP-developer

dj-avtosh - 10 сентября 2020 13:41 -

Пишите в стол заказов.

ЯД: 41001679231462
Заказы в telegram (ремонт модулей, оптимизация нагрузок и т.п.): @blob42
В телегу писать сразу задачу и бюджет.

dj-avtosh
PHP-developer

dj-avtosh - 10 сентября 2020 13:42 -

либо откройте topnews.php и там все очевидно с кешем - заодно научитесь (если цель такова)

ЯД: 41001679231462
Заказы в telegram (ремонт модулей, оптимизация нагрузок и т.п.): @blob42
В телегу писать сразу задачу и бюджет.

ushkom
Юзер

ushkom - 10 сентября 2020 13:48 -

Сделал кеш по аналогии topnews.php. Если не сложно, посмотрите, верно?


dj-avtosh
PHP-developer

dj-avtosh - 10 сентября 2020 13:50 -

вы только создаете кеш, но вы его не читаете.

ЯД: 41001679231462
Заказы в telegram (ремонт модулей, оптимизация нагрузок и т.п.): @blob42
В телегу писать сразу задачу и бюджет.

dj-avtosh
PHP-developer

dj-avtosh - 10 сентября 2020 13:52 -

<?php
if(!defined('DATALIFEENGINE')) {
  	die("Hacking attempt!");
}

$tpl->result['topusers'] = dle_cache( "topusers", $config['skin'], true );

if( $tpl->result['topusers'] === false ) {

$limit = $limit ? intval($limit) : "5";


$sql = $db->query("SELECT * FROM " . PREFIX . "_users WHERE news_num > '0' ORDER BY news_num DESC LIMIT 0,{$limit}");

$i = 1;
$tpl->result['topusers'] = [];

while ($row = $db->get_row($sql)) {
    $tpl->result['topusers'][$i] = $row;
    ++$i;
}
	$tpl->clear();	
	$db->free();

	create_cache( "topusers", $tpl->result['topusers'], $config['skin'], true );

}

ЯД: 41001679231462
Заказы в telegram (ремонт модулей, оптимизация нагрузок и т.п.): @blob42
В телегу писать сразу задачу и бюджет.

ushkom
Юзер

ushkom - 10 сентября 2020 13:59 -

Да, уже понял. Спасибо за помощь и обучение. Я бы хотел на киви отблагодарить.

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

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

 06.03.2014 vip.boss  Общие вопросы
наверх