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

Как вывести закладки в профиле


     08.04.2012    закладки    Все вопросы » Общие вопросы    8990

вопрос
как вывести закладки(избранное) пользователя в профиле?
На пример я зашел к пользователю в профиль и захотел увидеть что у него в избранном.

Ответил: Voffka


Найдено на просторах интернета. проверено на DLE 9.8

Данный хак позволяет сделать закладки пользователя общедоступными и вывести список закладок пользователя в профиль.

1. Откройте файл ./engine/modules/favorites.php

Найдите:
$user_query = "do=favorites";
$list = explode(",", $member_id['favorites']);


Замените на:
// Формируем ссылку на страницу с закладками
    $user_query = "do=favorites";

    $_REQUEST['user'] = $db->safesql($_REQUEST['user']);
    if($_REQUEST['user'] == ''){
    $list = explode(",", $member_id['favorites']);
    }else{
    $rows = $db->super_query("SELECT favorites  FROM " . USERPREFIX . "_users where name = '$_REQUEST[user]'");
    $list = explode(",", $rows['favorites']);
    }
// Формируем ссылку на страницу с закладками

2. Откройте файл ./engine/modules/profile.php

Найдите:
$tpl->set('{lastdate}', langdate("j F Y H:i", $row['lastdate']));


Добавьте ниже:
// Ссылка на страницу закладок и подсчет кол-ва избранных новостей
    $favorites = explode(",", $row['favorites']);
    
    if ($row['favorites'] != ''){    foreach ($favorites as $favorites) $is++;    }else{    $is = 0;    }
    
    $tpl->set('{fav_num}', $is);
    
    if ($config['allow_alt_url'] == "yes") {
    $tpl->set('{favorites}', "Смотреть все закладки");
    }else{
    $tpl->set('{favorites}', "Смотреть все закладки");
    }
// Ссылка на страницу закладок и подсчет кол-ва избранных новостей



3. Откройте файл ./engine/engine.php

Найдите:
elseif ($do == 'favorites') $nam_e=$lang['title_fav'];


Замените на:
elseif ($do == 'favorites') $nam_e=$lang['title_fav'].' '.$user;


4. Откройте файл ./language/Russian/website.lng

Найдите:
'title_fav'            =>    "Мои закладки",


Замените на:
'title_fav'            =>    "Закладки пользователя",


5. Откройте шаблон userinfo.tpl

Добавьте в необходмое Вам место:
Заладки пользователя: {fav_num} [ {favorites} ]

{fav_num} - Вывод кол-во избранных новостей...
{favorites} - Ссылка на просмотр закладок.

URL адрес на страницу просмотра закладок пользователя изначально выглядит так:
/index.php?do=favorites&user=Username]http://site.ru/index.php?do=favorites&user=Username

6. Для преобразования URL в ЧПУ ссылку, необходимо открыть файл .htaccess

А в нём найти следующее:
RewriteRule ^favorites(/?)+$ index.php?do=favorites [L]


Ниже добавить:
RewriteRule ^user/([^/]*)/favorites(/?)+$ index.php?do=favorites&user=$1 [L]


ЧПУ ссылка на страницу просмотра закладок пользователя будет иметь вид:
/user/Username/favorites

Добавлю: Если вы просматриваете закладки какого либо пользоваться, происходит +1 обращение к базе данных...
Если вы смотрите свои закладки дополнительных запросов не происходит.

Авторство утрачено.

Чтобы сделать так, чтобы закладки пользователя по ссылке http://site.ru/user/Username/favorites могли просматривать незарегистрированные пользователи,
необходимо в engine/engine.php найти

    msgbox ( $lang['all_err_1'], $lang['fav_error'] );


и заменить на

    include ENGINE_DIR . '/modules/favorites.php';



(насчет открытия для незареганных не уверен, возможно файл favorites.php становиться уязвимым) ... Поправьте знатоки, если это так

Насколько я понимаю, вопрошающий именно это имел ввиду ?

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

Sander
PHP-developer

Sander - 8 апреля 2012 23:27 -

Стандартно никак. Надо писать отдельный модуль. Если надо, за вознаграждение - могу сделать.
Так же такая функция будет доступна в модуле S-Blocks v2.0

SanDev.pro - мой блог.

Telegram: @sandev
Skype: Sander8804

Electric
Юзер

Electric - 9 апреля 2012 00:01 -

Sander,
Ну я как раз собирался покупать у вас этот модуль. Еще 1 повод его купить.

rashpil
Эксперт

rashpil - 8 апреля 2012 23:56 -

У меня есть такой кусочек кода. Рублей за 100 отдам

pavel31
Юзер

pavel31 - 9 апреля 2012 09:31 -

Sander,
Извиняюсь что не в тему - когда примерно можно будет купить модуль S-Blocks 2.0??

Voffka
Юзер

Voffka - 15 мая 2013 00:49 -

Поправьте ссылки на сайтру, я не могу редактировать свой ответ ?

MAPKOBKA
Юзер

MAPKOBKA - 6 июля 2013 18:07 -

Почти работает, но пришлось чуточку править. Спасибо за решение.

MAPKOBKA
Юзер

MAPKOBKA - 29 июля 2013 16:24 -

Нет, пришлось отказаться. Если у просматриваемого юзера нет закладок, то у того кто смотрит, удаляются все закладки. Так и не смог почининть.

DaivZ
Юзер

DaivZ - 29 июля 2013 19:26 -

Вот тут переписанный код, но наверное такая же проблема http://webfull.ru/data-life-engine/haki_dle/87-bookmarks-in-the-user-profile-dle.html

startget
Юзер

startget - 23 февраля 2018 23:45 -

Все стало намного проще

В файле
/engine/modules/profile.php
После строки
$user_found = TRUE;


Добавляем
 if( $row['favorites'] ) {
		$tpl->set( '{favorite-id}', $row['favorites'] );
		$tpl->set( '{favorite-count}', count(explode("," ,$row['favorites'])) );
		$tpl->set( '[favorite-count]', "" );
		$tpl->set( '[/favorite-count]', "" );
		$tpl->set_block( "'\\[not-favorite-count\\](.*?)\\[/not-favorite-count\\]'si", "" );
	} else {
		$tpl->set( '{favorite-count}', 0 );
		$tpl->set_block( "'\\[favorite-count\\](.*?)\\[/favorite-count\\]'si", "" );
		$tpl->set( '[not-favorite-count]', "" );
		$tpl->set( '[/not-favorite-count]', "" );
	}



В файле userinfo.tpl в любом месте ставим
<h2>Закладки ({favorite-count})</h2>
        [not-favorite-count]
        <p>Пользователь еще не добавил ничего в свои закладки</p>
        [/not-favorite-count]
        [favorite-count]
        {custom id="{favorite-id}" template="shortstory" available="userinfo" order="date" sort="desc" cache="yes"}
        [/favorite-count]



custom можем настроить по своему
закладки видно для двух пользователей тоже, которые смотрят профиль данного пользователя, если хотите скрыть для других, оберните последний код в тег [not-logged] и [/not-logged]

yeahga
Юзер

yeahga - 24 февраля 2018 18:42 -

Премного благодарен!

yeahga
Юзер

yeahga - 24 февраля 2018 20:12 -

Если {favorite-id} выводит много значений, сервер долго думает.

startget
Юзер

startget - 25 февраля 2018 10:46 -

Покажите ваш custom

yeahga
Юзер

yeahga - 25 февраля 2018 13:06 -

{custom id="{favorite-id}" template="favorited" available="userinfo" order="date" sort="desc" cache="yes"}
Если {favorite-id} имеет 400 значений, сервер отвечает 12 секунд. Но это при первом посещении страницы, потом страница загружается быстро.

startget
Юзер

startget - 25 февраля 2018 13:09 -

Если количество закладок очень много используете navigation="yes" или limit="10"

yeahga
Юзер

yeahga - 25 февраля 2018 13:38 -

Прошу прощения, отвечал с телефона по памяти. Использую navigation="yes". И, каждый раз, когда перехожу на новую страницу закладок, страница загружается долго. Боюсь, при десятке тысяч значений сервер во весь голос завоет. В таком случае единственный вариант -
использовать limit. Но это нарушает тезис идеи вывода именно всех закладок в профиле пользователя. Видимо, для таких целей нужна другая реализация.

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

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

наверх