Не нравятся результаты поиска? Попробуйте другой поиск!
DLE FAQ » Модули для DLE » UserBox - вывод информации о любом пользователе в любом месте сайта на DLE 9.8 - 10.0

UserBox - вывод информации о любом пользователе в любом месте сайта на DLE 9.8 - 10.0


     30.06.2013    модуль, userbox, DLE 9.8, dle 10    Модули для DLE    12149    27 комментариев

Краткая информация о модуле (хаке)

Автор: ПафНутиЙ
Версия DLE: 9.8-10.x
Цена: Бесплатно
UserBox - простой модуль для вывода информации о любом пользователе в любом месте сайта на DLE 9.8 - 10.1.
Понадобится, если нужно вывести не только аватар с минимальной нагрузкой на сайт!
Модуль будет полезен тогда, когда нужно вывести информацию о каком-либо пользователе в произвольном месте сайта.
Например кулинарным сайтам, где нужно вывести информацию об авторе рецепта непосредственно в рецепт или личным (коллективным) блогам.

Краткая история о причинах создания модуля:

В сети есть один хак, который выводит аватар пользователя, добавившего новость. И у хака был один недостаток - он был хаком, а правки движка я не очень люблю. И вот на досуге я написал небольшой модуль, так и не увидевший свет.
С задачей он справлялся, но тут же захотелось вывести общее количество новостей пользователя и когда он был последний раз на сайте. А если я захочу вывести ещё и информацию о пользователе, а так же оформить блок в стиль сайта? Тут уже не обойтись без шаблона.
В итоге тот простой модуль перерос в чуть более сложный, который и получил название UserBox.

Возможности модуля UserBox:

  • Подключение одной строкой.
  • Вывод данных из профиля пользователя в любом месте сайта, на основе логина пользователя.
  • Вывод дополнительных полей профиля пользователя (выводятся только те, которые не являются личными).
  • Возможность использовать собственные шаблоны для вывода информации.
  • Настраиваемая заглушка-аватар на случай, если у пользователя нет аватара и нужно вывести не стандартную заглушку.
  • Кеширование результата работы модуля. Кеш создаётся с учётом логина пользователя, дефолтного аватара и используемого шаблона вывода модуля.
  • Вывод информации о текущем пользователе вне шаблона login.tpl
  • Вывод информации об авторе новости вне шаблона полной новости.


Особенности:

- Одна обязательная переменная в строке подключения - &userName. Именно через эту переменную модуль определяет для какого юзера выводить информацию.
- Добавляет один запрос на каждого выводимого модулем пользователя. Т.е. если выводить информацию об авторе новости в кратких новостях и на главной странице сайта выводится 30 новостей, которые опубликовали 10 пользователей (по три новости каждый) - то модуль при первом обращении к странице добавит 10 запросов в БД, после чего данные будут браться уже из кеша (при включенном кешировании на сайте). Если на второй странице попадётся пользователь с первой страницы, то запрос в БД на этого пользователя делаться не будет.
- Собственные теги для вывода в шаблоне. Отдельные теги сделаны для того, что бы не было конфликтов и для упрощения обработки этих тегов в модуле, что сократило кода процентов на 10-15 точно.
- Собственная папка с шаблонами. Так же для удобства использования.
- Выводятся не все данные. Т.к. выводить все данные о пользователе не имеет смысла, а так же в целях экономии ресурсов сервера выводятся следующие данные:
  1. email - Email пользователя
  2. name - Логин
  3. news_num - Кол-во новостей
  4. user_id - ID пользователя
  5. comm_num - Кол-во комментариев
  6. user_group - Группа (форматированный вывод с префиксами и суффиксами)
  7. lastdate - Дата последнего посещения сайта
  8. reg_date - Дата регистрации
  9. info - Информация о пользователе
  10. foto - URL аватарки (или настраиваемая заглушка)
  11. fullname - Полное имя
  12. land - Место проживания
  13. icq - Номер ICQ
  14. Дополнительные поля

Полный список поддерживаемых модулем тегов приведён в шаблоне userbox/dafault.tpl

Установка:


  1. Распаковать содержимое папки upload из архива в корень сайта, при этом не забывайте переименовать папку THEME в соответствии с названием текущего шаблона сайта.
  2. В нужном месте любого шаблона сайта прописать:
    {include file="engine/modules/userbox.php?&userName=login"}
    где login - логин пользователя.
  3. Всё!


Примеры использования:


вот такой вид блока в полной новости я сделал для покупателей шаблона Madison в довесок к последнему обновлению шаблона.
UserBox - вывод информации о любом пользователе в любом месте сайта на DLE 9.8 - 10.0


{include file="engine/modules/userbox.php?&userName={login}"}
выведет информацию о авторе, если эту строку прописать в шаблоне новости (краткой или полной) или комментария (к примеру можно вывести рейтинг пользователя).

{include file="engine/modules/userbox.php?&userName=Бот&template=newtemplate&defAvatar=images/picture.jpg"}
Выведет информацию о пользователе с логином Бот, для вывода будет использован шаблон, лежащий в папке userbox/newtemplate.tpl, при этом если у пользователя нет аватарки (или не задан gravatar в настройках) - будет выведено изображение из папки images/picture.jpg.

{include file="engine/modules/userbox.php?&userName=thisNewsId"}
выведет информацию об авторе новости при просмотре полной новости (при этом добавится один запрос). Подобная конструкция нужна на случай вывода вне шаблона полной новости (например в main.tpl). При выводе в шаблоне полной новости используйте
&userName={login}



Скачать модуль UserBox, как всегда, можно только с github т.к. там удобнее поддерживать код и всегда актуальная версия.


Надеюсь модуль будет вам интересен и полезен. Жду отзывов!

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

oazet
Юзер

oazet - 1 июля 2013 01:26 -

Вот за это ОГРОМНОЕ спасибо, нужный, весьма нужный модуль.

ПафНутиЙ
Админ

ПафНутиЙ - 1 июля 2013 12:50 -

На здоровье!

Каков вопрос - таков и ответ. Просто помните об этом.

sadan
Юзер

sadan - 2 июля 2013 03:45 -

просто нету слов суперский ! Спасибо Павел !

dj-avtosh
PHP-developer

dj-avtosh - 4 июля 2013 05:34 -

Паш. Ты классный) особенно помню как долго ты там комменты придумывал в нем :D

https://elkhan.ru
По заказам пишем сюда: @Rud00y

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

Cobalt
Юзер

Cobalt - 6 августа 2013 17:31 -

Даже зарегистрировался, что бы сказать СПАСИБО :)

sashok7062005
Юзер

sashok7062005 - 8 августа 2013 19:14 -

А можно этот модуль вставить например в текст новости при ее добавлении , а не в шаблон, например у меня есть новость и есть в ней пункт "мнения экспертов", можно этих экспертов добавить с помощью данного модуля?

ПафНутиЙ
Админ

ПафНутиЙ - 8 августа 2013 20:50 -

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

Каков вопрос - таков и ответ. Просто помните об этом.

teleoperator27
Юзер

teleoperator27 - 7 сентября 2013 20:05 -

Павел, не могли бы вы объяснить, что эти теги делают
[ufgiven_string]string: [ufvalue_string] 
[/ufgiven_string] [ufnotgiven_string]string: не заполнено
[/ufnotgiven_string] [ufgiven_multi]multi: [ufvalue_multi]
[/ufgiven_multi] [ufnotgiven_multi]multi: не заполнено
[/ufnotgiven_multi] [ufgiven_multi1]multi1: [ufvalue_multi1]
[/ufgiven_multi1] [ufnotgiven_multi1]multi1: не заполнено
[/ufnotgiven_multi1] [ufgiven_list]list: [ufvalue_list]
[/ufgiven_list] [ufnotgiven_list]list: не заполнено
[/ufnotgiven_list]"

Chapman
Юзер

Chapman - 16 октября 2013 10:19 -

Добрый день, на 9.7 будет работать?

ПафНутиЙ
Админ

ПафНутиЙ - 3 января 2014 20:00 -

teleoperator27,
Это теги для вывода данных из допполей, просто у вас не созданы поля с заданными в тегах именами.

Chapman,
Да, по идее должен работать.

P.S.
Кстати, сегодня модуль обновился до версии 1.3

Каков вопрос - таков и ответ. Просто помните об этом.

Laidman
Юзер

Laidman - 21 января 2014 14:25 -

Как сделать что бы теги [online][/online][offline][/offline] работали :(

teleoperator27
Юзер

teleoperator27 - 8 февраля 2014 13:02 -

Что может мешать модулю выводить логины написаные кириллицей? Например, у меня есть юзер Яна Иванова.при попытке вывести модулем вместо лонгина выводится
ПользоватеРС 
ну и так далее. при изменении кодировки на utf-8 можно прочитать что пользователь с таким логином не найден. Сайт на win-1251. На сайте в utf все работает. куда копнуть?все файлы перекодированны в вин кодировку. Версия php или конфигурация сервера может иметь значение?

teleoperator27
Юзер

teleoperator27 - 8 февраля 2014 21:41 -

кажется нашел баг, в пхпмайадмине прописано MySQL-кодировка: UTF-8 Unicode (utf8) сайт в 1251, таблицы в 1251, БД вся в 1251. по ходу из-за этого, но как бороться ума не приложу, доступа к my.cnf нет. И вобще не понимаю, почему так выводит, на сайте то все норм работает

albatros775
Юзер

albatros775 - 13 июня 2015 15:57 -

Выглядет всё вот так:
user_foto: /sp812/templates/sp812/dleimages/noavatar.png
user_news_num: не заполнено
user_comm_num: не заполнено
user_user_id: 2
user_user_group: Администраторы
user_lastdate: 13 июня 2015 15:42
user_reg_date: 10 июня 2015 22:50
user_info: не заполнено
ссылка на профиль юзера: /sp812/user/albatros775/

Почему не выводит аватарку и фамилию?

sadan
Юзер

sadan - 13 июня 2015 18:38 -

в dle 10.5 изменена вывод аватара, у вас какая версия?

albatros775
Юзер

albatros775 - 16 июня 2015 21:50 -

dle 10.5

sadan
Юзер

sadan - 17 июня 2015 05:04 -

Жди обновления модуля, а пока можно так:
найти в userbox.php:
if (count(explode("@", $userField['foto'])) == 2) {
                    // Если граватар
                    $userField['foto'] = 'http://www.gravatar.com/avatar/' . md5(trim($userField['foto'])) . '?s=' . intval($user_group[$userField['user_group']]['max_foto']);

                }
                else {
                    // Если у нас
                    if ($userField['foto'] and (file_exists(ROOT_DIR . "/uploads/fotos/" . $userField['foto'])))
                        $userField['foto'] = $config['http_home_url'] . 'uploads/fotos/' . $userField['foto'];
                    else
                        $userField['foto'] = $config['http_home_url'] . 'templates/' . $config['skin'] . '/' . $cfg['defAvatar'];

                }

заменить на:
if( $userField['foto'] ) {
                if (strpos($userField['foto'], "//") === 0) $avatar = "http:".$userField['foto']; else $avatar = $userField['foto'];
                $avatar = @parse_url ( $avatar );
                if( $avatar['host'] ) {
                $userField['foto'] = $userField['foto'];
                } else $userField['foto'] = $config['http_home_url'] . "uploads/fotos/" . $userField['foto'];
                } else $userField['foto'] = "{THEME}/dleimages/noavatar.png";


убрал сервис gravatar, думаю особо не нужен
и заглушка &defAvatar не будет функционировать

shim
Юзер

shim - 17 ноября 2015 13:06 -

dle 10.6
как на счет обновления модуля?
с выводом аватара проблема еще с 10.5 версии!

lehasta
Юзер

lehasta - 16 января 2016 06:29 -

Если еще актуально

// Если у нас
                    if ($userField['foto'] and (file_exists(ROOT_DIR . "/uploads/fotos/" . $userField['foto'])))
                        $userField['foto'] = $config['http_home_url'] . 'uploads/fotos/' . $userField['foto'];
                    else
                        $userField['foto'] = $config['http_home_url'] . 'templates/' . $config['skin'] . '/' . $cfg['defAvatar'];

                }

Заменить на


// Если у нас
                    if ($userField['foto'] !=' '){
                        $config['http_home_url'] . 'uploads/fotos/' . $userField['foto'];
                    } else {
                        $userField['foto'] = $config['http_home_url'] . 'templates/' . $config['skin'] . '/' . $cfg['defAvatar'];
                    }
                }


Испытано на для 10.6

ПафНутиЙ
Админ

ПафНутиЙ - 16 января 2016 12:38 -


Каков вопрос - таков и ответ. Просто помните об этом.

dimavdv
Юзер

dimavdv - 6 февраля 2016 18:57 -

Павел, Здравствуйте!

Подскажите пожалуйста как сделать чтоб так работало?
[aviable=showfull|userinfo|allnews]{include file="engine/modules/userbox.php?&userName=thisNewsId"}[/aviable]


в полной работает а вот в просмотре профиля и в просмотре новостей профиля не работает.

ПафНутиЙ
Админ

ПафНутиЙ - 7 февраля 2016 12:28 -

При просмотре профиля нет переменной, выводящий ID новости.
Нужно использовать
 &userName={login}

Каков вопрос - таков и ответ. Просто помните об этом.

dimavdv
Юзер

dimavdv - 7 февраля 2016 14:10 -

К сожалению
&userName={login}
не работает! {login} - работает стандартно (мой профиль)

Вот как получается - http://prntscr.com/9zdnx9

ПафНутиЙ
Админ

ПафНутиЙ - 7 февраля 2016 15:17 -

Примеры использования:
{include file="engine/modules/userbox.php?&userName={login}"} 
выведет информацию о авторе, если эту строку прописать в шаблоне новости (краткой или полной) или комментария (к примеру можно вывести рейтинг пользователя).

{include file="engine/modules/userbox.php?&userName=this"} 
выведет информацию о текущем пользователе, эту конструкию можно использовать для вывода инвормации о текущем пользователе вне шаблона login.tpl.

{include file="engine/modules/userbox.php?&userName=thisNewsId"} 
выведет информацию об авторе новости при просмотре полной новости (при этом добавится один запрос). Подобная конструкция нужна на случай вывода вне шаблона полной новости. При выводе в шаблоне полной новости используйте &userName={login}

{include file="engine/modules/userbox.php?&userName=Бот&template=newtemplate&defAvatar=images/picture.jpg"} 
Выведет информацию о пользователе с логином Бот, для вывода будет использован шаблон, лежащий в папке userbox/newtemplate.tpl, при этом если у пользователя нет аватарки (или не задан gravatar в настройках) - будет выведено изображение из папки images/picture.jpg.

Каков вопрос - таков и ответ. Просто помните об этом.

Gorec
Юзер

Gorec - 7 сентября 2016 13:53 -

ПафНутиЙ,
как правильно прописать строку?
Вот так выводиться правильно:
{include file="engine/modules/userbox.php?&userName=Admin&template=user-foto"}


а мне нужно не конкретный пользователь, а чтобы выводилась аватарка от того кто залогинен на сайте... вот так у меня не работает:
{include file="engine/modules/userbox.php?&userName=this&template=user-foto"}

пишет нет такого пользователя... как правильно обернуть "this", чтобы сработало?
Спасибо.

yeahga
Юзер

yeahga - 29 марта 2017 01:53 -

Здравствуйте! А есть ли решение, чтобы выводить данные текущего пользователя отдельно друг от друга, например, вставляешь в любом шаблоне {name} - выводит твой логин, вставляешь в любом месте шаблона {user_id} - выводит твой ID и т.д

fayruzi4
Юзер

fayruzi4 - 21 мая 2018 01:53 -

Хороший модуль, спасибо!
Правда на 12.1 кэш не подцепляется по всей видимости, хотя создаётся.
В полной новости вывожу аватарку так:
{include file="engine/modules/userbox.php?&userName={login}&template=photo"}
TPL: {user_foto}


При каждом обращении делает
SELECT email, name, news_num, user_id, comm_num, user_group, lastdate, reg_date, info, foto, fullname, land, xfields FROM dle_users WHERE name='User User'

+ почему-то ещё один запрос странный добавляет, при том, что в шаблоне только user_foto и никакого рейтинга
 SELECT SUM(rating) as rating, SUM(vote_num) as num FROM dle_post_extras WHERE user_id ='4' 

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