Не нравятся результаты поиска? Попробуйте другой поиск!
dle-faq.ru FAQ (все вопросы) MySQL Правильный запрос на вывод контента в заладках пользователя

Правильный запрос на вывод контента в заладках пользователя


     20.04.2012    MySQL    2333

вопрос
есть вот такой запрос
if($member_id['favorites'] > 0) {  
$db->query("SELECT id, short_story, title, flag FROM " . PREFIX . "_post WHERE id IN ({$member_id['favorites']}) ORDER BY date DESC LIMIT 0,$f");

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

Ответил: BR0kEN


1. Открыть /engine/modules/profile.php и после:
while ( $row = $db->get_row( $sql_result ) ) {
добавить:
    $q = "SELECT * FROM ". PREFIX ."_post p LEFT JOIN ". PREFIX ."_post_extras e ON (p.id=e.news_id) WHERE p.id IN ({$row['favorites']})";
    if (stripos($tpl->copy_template, '{favorites') !== false) $tpl->copy_template = preg_replace("#\\{favorites template=\"(.+?)\"\\}#ies", "userFavorites('{$q}', '\\1')", $tpl->copy_template);
2. Открыть /engine/modules/functions.php и перед:
function totranslit($var, $lower = true, $punkt = true) {
добавить:
function userFavorites($query, $template) {
    global $db;

    $tpl = new dle_template();
    $tpl->dir = TEMPLATE_DIR;

    $sql_select = $query;
    $custom_template = $template;

    include (ENGINE_DIR . '/modules/show.custom.php');

    return $tpl->result['content'];
}
3. Открыть /templates/Default/userinfo.tpl и в любое место вставить макрос:
{favorites template="shortstory"}
Где "shortstory" - шаблон при помощи которого будут отображаться посты из закладок пользователя, профиль которого просматривается.

з.ы. Вышеприведенный код - элементарный набросок, но от него можно отталкиваться. Добавить, например, кэширование и разнообразные параметры. Также можно посидеть немного дольше и сделать полноценный модуль выводящий закладки любого пользователя в любом месте сайта...

Моя, расширенная, публикация: http://firstvector.org/broken/sandbox/49

Комментарии пользователей (6)

moireceptik
8 | 2

moireceptik - 10 апреля 2013 17:02 - Юзер

$result = $db->query("SELECT id, short_story, title, flag FROM " . PREFIX . "_post user='{$row['user_id']}' ORDER BY date DESC LIMIT 0,$f");

while ( $row = $db->get_row( $result ) ) {
if($row['favorites'] > 0) {
есть закладки
}
else {
нет закладок
}

Куда вставить данный код? Я не сильна в php, но мне очень нужно при просмотре профилей - видеть их закладки. Установила Модуль для DLE - uFav 2.0 - модуль отличный, но к сожалению всегда показывает только мои закладки! А хотелось бы - в профилях других пользователей - увидеть ИХ закладки, а мои бы только в моем профиле были. Подскажите пожалуйста - как это реализовать?

BR0kEN
163

235 | 275

BR0kEN - 10 апреля 2013 18:25 - Эксперт

Дал исчерпывающий ответ.

moireceptik
8 | 2

moireceptik - 10 апреля 2013 20:55 - Юзер

Огромное спасибо за помощь! Закладки пользователей теперь видно! Но после установки обнаружила глобальные проблемы:
1. Выводятся не правильные ссылки на новости! Вида:
САЙТ.ru/user/moireceptik/index.php?newsid=799


Соответственно при переходе по ссылке новости - ошибка 404
В "shortstory" вот такой код:
<div class="user-rss-block">
<div class="user-rss-title">[full-link]{title}[/full-link]</div>
<div class="user-rss-text">{short-story}</div>
</div>


Как сделать нормальную ссылку? {На сайте ЧПУ - Тип2}

2. Самая страшная проблема - если пользователь не сохранял в избранное ни одной новости - в его профиль больше зайти нельзя!!! Выдает вот такую ошибку - MySQL error in file: /engine/modules/show.custom.php at line 29

И еще - как сделать чтобы выводилось только 10 последних закладок? Обнаружила у некоторых пользователей слишком много закладок... Если не трудно - подскажите, пожалуйста!

BR0kEN
163

235 | 275

BR0kEN - 11 апреля 2013 03:24 - Эксперт

Написал публикацию на эту тему. По ссылке в ответе найдете все что вам нужно. Удачи.

ПафНутиЙ
1065

3396 | 2434

ПафНутиЙ - 11 апреля 2013 09:28 - Админ

Сделал бы в виде модуля - будет более гибко, да и обновления движка будут возможны.
А вообще 7-15 запросов это не много - запросы то лёгенькие все. Но благодаря "продуманной" структуре мамо что оптимизированно (к примеру формирование ссылки на новость), что и рождает кучу геморроя разработчикам ).

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

moireceptik
8 | 2

moireceptik - 11 апреля 2013 10:37 - Юзер

Выражаю огромную благодарность за помощь! Все получилось отлично - профили теперь открываются, даже если пользователь ничего не вносил в закладки, ссылка на новость работает как надо (ЧПУ правильное) и закладки отображаются идеально!

Даже подсказали новый тег - [not-favorites]Текст[/not-favorites] - об этом я даже и мечтать не могла! Вот это помощь! Супер!

Последняя просьба - если не трудно - хотела вставить в шаблон "shortstory" стандартный код {favorites} (добавить, удалить из закладок) - но он не отображается! Просто пустота на этом месте.

А было бы значительно удобнее пользователям - посмотрели закладки других пользователей и тут же себе добавили в закладки, если что понравилось, не переходя в новость! Или сам пользователь - не переходя в новость - удалил закладку у себя...

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

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

 28.03.2014 i_loves_ac_dc  MySQL