Уважаемые пользователи!
C 7 ноября 2020 года phpBB Group прекратила выпуск обновлений и завершила дальнейшее развитие phpBB версии 3.2.
С 1 августа 2024 года phpBB Group прекращает поддержку phpBB 3.2 на официальном сайте.
Сайт официальной русской поддержки phpBB Guru продолжит поддержку phpBB 3.2 до 31 декабря 2024 года.
С учетом этого, настоятельно рекомендуется обновить конференции до версии 3.3.

UserTopics

Здесь авторы могут постить бета-версии своих расширений для phpBB. Внимание! Не устанавливайте бета-версии расширений на работающие форумы!
Правила форума
Местная Конституция | Шаблон запроса | Документация (phpBB3) | Мини [FAQ] по phpBB3.1.x/3.2.x | FAQ | Внимание! Прежде чем создать тему - прочти! | Как задавать вопросы | Как устанавливать расширения

Ваш вопрос может быть удален без объяснения причин, если на него есть ответы по приведённым ссылкам (а вы рискуете получить предупреждение ;) ).

Внимание! Не устанавливайте бета-версии расширений на работающие форумы!
Аватара пользователя
Alecto
phpBB 3.0.12
Сообщения: 2857
Стаж: 14 лет 4 месяца
Откуда: Украина! Харьков
Благодарил (а): 68 раз
Поблагодарили: 241 раз

Re: UserTopics

Сообщение Alecto »

ругается на topic_id

Код: Выделить всё

[phpBB Debug] PHP Notice: in file [ROOT]/ext/alecto/UserTopics/event/listener.php on line 47: Undefined variable: topic_id
Аватара пользователя
Sheer
Former team member
Сообщения: 12113
Стаж: 17 лет 2 месяца
Откуда: Калининград не Кенигсберг
Благодарил (а): 41 раз
Поблагодарили: 1716 раз

Re: UserTopics

Сообщение Sheer »

Код: Выделить всё

$show_results   = (isset($topic_id)) ? 'posts' : $this->request->variable('sr', 'posts'); 
Изображение
Общие ошибки новичков (07.11.2005) & Как задавать вопросы
Мини FAQ
Если ничто другое не помогает, прочтите, наконец, инструкцию!
"Никакая инструкция не может перечислить всех обязанностей должностного лица, предусмотреть все отдельные случаи и дать вперёд соответствующие указания, а поэтому господа инженеры должны проявить инициативу и, руководствуясь знаниями своей специальности и пользой дела, принять все усилия для оправдания своего назначения".
Циркуляр Морского технического комитета №15 от 29.11.1910 г.
Аватара пользователя
Alecto
phpBB 3.0.12
Сообщения: 2857
Стаж: 14 лет 4 месяца
Откуда: Украина! Харьков
Благодарил (а): 68 раз
Поблагодарили: 241 раз

Re: UserTopics

Сообщение Alecto »

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

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

Код: Выделить всё

    public function search_modify_param_before($event)
    {
        $search_fields   = $this->request->variable('sf', 'all');
        $show_results   = (isset($topic_id)) ? 'posts' : $this->request->variable('sr', 'posts');
        $show_results   = ($show_results == 'posts') ? 'posts' : 'topics';

        if ($event['search_id'] == 'egosearch' && $show_results == 'topics')
        {
            $this->template->assign_vars(array(
                'S_EGO_SEARCH'   => true,
            ));
        };
    }
 
Отправлено спустя 2 минуты :
помоему в данной функции эта строка лишняя?

Код: Выделить всё

		$search_fields   = $this->request->variable('sf', 'all');
по крайней мере без нее тоже работает.
Аватара пользователя
xisp
phpBB 3.0.0 RC7
Сообщения: 1798
Стаж: 11 лет 11 месяцев
Благодарил (а): 101 раз
Поблагодарили: 91 раз
Забанен: Бессрочно

Re: UserTopics

Сообщение xisp »

Alecto писал(а): помоему в данной функции эта строка лишняя?
Само собой, ведь она нигде не используется.
phpBBex
Аватара пользователя
Alecto
phpBB 3.0.12
Сообщения: 2857
Стаж: 14 лет 4 месяца
Откуда: Украина! Харьков
Благодарил (а): 68 раз
Поблагодарили: 241 раз

Re: UserTopics

Сообщение Alecto »

Xisp, спасибо.

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

Код: Выделить всё

        if ($event['author_id'] != null && $show_results == 'topics')
        {
            $this->template->assign_vars(array(
                'S_USERID_SEARCH'   => true,
            ));
        };
ошибок нет, но условие не срабатывает. все делал по аналогии.
Аватара пользователя
LavIgor
Former team member
Сообщения: 3468
Стаж: 9 лет 11 месяцев
Благодарил (а): 41 раз
Поблагодарили: 830 раз

Re: UserTopics

Сообщение LavIgor »

Sheer писал(а):

Код: Выделить всё

$show_results   = (isset($topic_id)) ? 'posts' : $this->request->variable('sr', 'posts');
Если делать корректно, то вместо этого кода нужно проверять параметр topic_id из запроса.
Использование isset($topic_id) в данном случае - "заглушка", поскольку topic_id в коде не задаётся.
Тогда зачем вообще проверять его наличие?

Лучше всё-таки задать topic_id:

Код: Выделить всё

    public function search_modify_param_before($event)
    {
        $topic_id        = $this->request->variable('t', 0);
        $author_id      = $this->request->variable('author_id', 0);
        $search_fields   = $this->request->variable('sf', 'all');
        $show_results   = ($topic_id) ? 'posts' : $this->request->variable('sr', 'posts');
        $show_results   = ($show_results == 'posts') ? 'posts' : 'topics';

        if ($event['search_id'] == 'egosearch' && $show_results == 'topics')
        {
            $this->template->assign_vars(array(
                'S_EGO_SEARCH'   => true,
            ));
        };
        // Автор с id == 1 - это любой гость.
        if ($author_id >= 1 && $show_results == 'topics')
        {
            $this->template->assign_vars(array(
                'S_USERID_SEARCH'   => true,
            ));
        };
    }
Alecto писал(а): ошибок нет, но условие не срабатывает
Конечно не сработает, если author_id не берётся из запроса.
В коде выше это исправлено.
Аватара пользователя
Sheer
Former team member
Сообщения: 12113
Стаж: 17 лет 2 месяца
Откуда: Калининград не Кенигсберг
Благодарил (а): 41 раз
Поблагодарили: 1716 раз

Re: UserTopics

Сообщение Sheer »

LavIgor писал(а): Если делать корректно
Чтобы делать корректно, нужно видеть весь код (ну и понимать, чего автор добивается. Я не совсем понял, чего он хочет в конце-концов).
Изображение
Общие ошибки новичков (07.11.2005) & Как задавать вопросы
Мини FAQ
Если ничто другое не помогает, прочтите, наконец, инструкцию!
"Никакая инструкция не может перечислить всех обязанностей должностного лица, предусмотреть все отдельные случаи и дать вперёд соответствующие указания, а поэтому господа инженеры должны проявить инициативу и, руководствуясь знаниями своей специальности и пользой дела, принять все усилия для оправдания своего назначения".
Циркуляр Морского технического комитета №15 от 29.11.1910 г.
Аватара пользователя
Alecto
phpBB 3.0.12
Сообщения: 2857
Стаж: 14 лет 4 месяца
Откуда: Украина! Харьков
Благодарил (а): 68 раз
Поблагодарили: 241 раз

Re: UserTopics

Сообщение Alecto »

LavIgor, заменил функцию на твой вариант - ошибок нет, но оба условия не работают.

Чего добиваюсь...
Есть 3 места, где формируются поисковые адреса для просмотра тем пользователей:
1 - Ваши темы - собственные темы пользователя, вызываются в хэдере public function page_header_after($event)
2 - Темы пользователя - из минипрофиля при просмотре тем public function viewtopic_poster_topics($event)
3 - Темы пользователя - из профиля public function memberlist_view_profile($event)
далее в функции public function search_modify_param_before($event) созданы условия для проверки и включения текущей страницы (ВАши темы, ТЕмы пользователя) в путь Список форумов > Ваши темы / Темы пользователя
1.jpg
ВАши темы - работают, Темы пользователя - не работает условие.

Пока не понимаю, зачем нужен $topic_id.

Sheer, весь код ниже, совсем весь - в первом посте на гитхабе.

Код: Выделить всё

<?php
/**
*
* @package myextension
* @copyright (c) 2014 Nickname
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
*
*/

namespace alecto\UserTopics\event;

use Symfony\Component\EventDispatcher\EventSubscriberInterface;

class listener implements EventSubscriberInterface
{

    public function __construct(\phpbb\template\template $template, \phpbb\db\driver\driver_interface $db, \phpbb\request\request $request, $phpbb_root_path, $php_ext)
    {
        $this->template = $template;
        $this->db = $db;
        $this->request = $request;
        $this->phpbb_root_path = $phpbb_root_path;
        $this->php_ext = $php_ext;
    }

    static public function getSubscribedEvents()
    {
        return array(
            'core.user_setup'                    =>    'load_language_on_setup',
            'core.memberlist_view_profile'            => 'memberlist_view_profile',
            'core.page_header_after'            => 'page_header_after',
            'core.viewtopic_modify_post_row'         => 'viewtopic_poster_topics',
            'core.search_modify_param_before'      => 'search_modify_param_before',
        );
    }

    public function search_modify_param_before($event)
    {
        $show_results   = (isset($topic_id)) ? 'posts' : $this->request->variable('sr', 'posts');
        $show_results   = ($show_results == 'posts') ? 'posts' : 'topics';

        if ($event['search_id'] == 'egosearch' && $show_results == 'topics')
        {
            $this->template->assign_vars(array(
                'S_EGO_TOPICS_SEARCH'   => true,
            ));
        };

        if ($event['author_id'] != null && $show_results == 'topics')
        {
            $this->template->assign_vars(array(
                'S_USER_TOPICS_SEARCH'   => true,
            ));
        };
    }

    public function viewtopic_poster_topics($event)
    {
        $postrow = $event['post_row'];
        $poster_id = $event['poster_id'];
        $postrow = array_merge($postrow, array(
            'USER_TOPICS_MINIPROFILE_LINK'   => append_sid("{$this->phpbb_root_path}search.$this->php_ext", 'author_id=' . $poster_id . '&sr=topics&sf=firstpost'),
                ));
        $event['post_row'] = $postrow;
    }

    public function page_header_after($event)
    {
        //$sort_by_sql = $event['sort_by_sql'];
        //$sort_by_sql['t'] = 't.topic_first_post_time';

        $author_id = $event['author_id'];

        $this->template->assign_vars(array(
            'USER_TOPICS_OWN_LINK'   => append_sid("{$this->phpbb_root_path}search.$this->php_ext", 'search_id=egosearch&sr=topics&sf=firstpost'),
            'USER_BY_ID_TOPICS_LINK'   => append_sid("{$this->phpbb_root_path}search.$this->php_ext", 'author_id=' . $author_id . '&sr=topics&sf=firstpost'),
                    ));
        //$event['sort_by_sql'] = $sort_by_sql;
    }

    public function memberlist_view_profile($event)
    {
        $user_id = $this->request->variable('u', 0);
        $sql = 'SELECT COUNT(topic_id) as user_topics FROM ' . TOPICS_TABLE . ' WHERE topic_status <> ' . ITEM_MOVED . ' AND topic_poster = ' . (int) $user_id;
        $result = $this->db->sql_query($sql); //Выполняем запрос
        $row = $this->db->sql_fetchrow($result); //Получаем одну строку из результата
        $this->db->sql_freeresult($result); //Очищаем память от запроса
        $user_topics = $row['user_topics']; //Задаём значение результата запроса переменной $user_topics 

        $this->template->assign_vars(array(
            'USER_TOPICS_COUNT'    => $user_topics,
            'USER_TOPICS_PROFILE_LINK'   => append_sid("{$this->phpbb_root_path}search.$this->php_ext", 'author_id=' . $user_id . '&sr=topics&sf=firstpost'),
                    ));

    }

    public function load_language_on_setup($event)
    {
        $lang_set_ext = $event['lang_set_ext'];
        $lang_set_ext[] = array(
            'ext_name' => 'alecto/UserTopics',
            'lang_set' => 'UserTopics',
        );
        $event['lang_set_ext'] = $lang_set_ext;
    }
}
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя
LavIgor
Former team member
Сообщения: 3468
Стаж: 9 лет 11 месяцев
Благодарил (а): 41 раз
Поблагодарили: 830 раз

Re: UserTopics

Сообщение LavIgor »

Alecto писал(а): но оба условия не работают.
Отлаживать пробовали?
Если оба условия не выполняются, значит, $show_results, по-видимому, имеет значение 'posts'.
Какие страницы запрашиваете и чему равны переменные в этих случаях?
Аватара пользователя
Alecto
phpBB 3.0.12
Сообщения: 2857
Стаж: 14 лет 4 месяца
Откуда: Украина! Харьков
Благодарил (а): 68 раз
Поблагодарили: 241 раз

Re: UserTopics

Сообщение Alecto »

LavIgor, я дурак, сам накосячил с переменными.
все заработало.
спасибо.
Erlang
phpBB 2.0.15
Сообщения: 1033
Стаж: 19 лет 9 месяцев
Откуда: Москва
Благодарил (а): 209 раз
Поблагодарили: 4 раза

Re: UserTopics

Сообщение Erlang »

А ссылки в МиниПрофиле отключать можно?
С уважением,
Сергей
Аватара пользователя
Alecto
phpBB 3.0.12
Сообщения: 2857
Стаж: 14 лет 4 месяца
Откуда: Украина! Харьков
Благодарил (а): 68 раз
Поблагодарили: 241 раз

Re: UserTopics

Сообщение Alecto »

да.
убери файл viewtopic_body_contact_fields_before.html
Аватара пользователя
Alecto
phpBB 3.0.12
Сообщения: 2857
Стаж: 14 лет 4 месяца
Откуда: Украина! Харьков
Благодарил (а): 68 раз
Поблагодарили: 241 раз

Re: UserTopics

Сообщение Alecto »

Код: Выделить всё

        $author_id      = $this->request->variable('author_id', 0);
можно из запроса вытянуть еще и имя автора?
или зная $author_id делать SQL-запрос и таким образом получать имя по айди?
Аватара пользователя
xisp
phpBB 3.0.0 RC7
Сообщения: 1798
Стаж: 11 лет 11 месяцев
Благодарил (а): 101 раз
Поблагодарили: 91 раз
Забанен: Бессрочно

Re: UserTopics

Сообщение xisp »

Alecto писал(а): можно из запроса вытянуть еще и имя автора?
Откуда? Оно не передаётся.
Alecto писал(а): или зная $author_id делать SQL-запрос и таким образом получать имя по айди?
Ну да

Код: Выделить всё

SELECT username, user_colour
FROM ...
Ну вы поняли. Цвет ника пригодится при выводе.
phpBBex
Аватара пользователя
Alecto
phpBB 3.0.12
Сообщения: 2857
Стаж: 14 лет 4 месяца
Откуда: Украина! Харьков
Благодарил (а): 68 раз
Поблагодарили: 241 раз

Re: UserTopics

Сообщение Alecto »

версия 1.0.2 на гитхабе
спасибо Sheer, LavIgor, xisp за помощь!
сделал ссылки в иерархии навигатора для различных вариантов поиска тем: своих, любого пользователя (+ указывается имя пользователя).
за счет новых переменных оптимизировал javascript.
добавлена проверка версии расширения.

Вернуться в «Бета-версии расширений для phpBB»