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

Найти все свои темы - ссылка в меню.

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

Ваш вопрос может быть удален без объяснения причин, если на него есть ответы по приведённым ссылкам (а вы рискуете получить предупреждение ;) ).
Аватара пользователя
Leo Angel
phpBB 2.0.3
Сообщения: 393
Стаж: 6 лет 2 месяца
Благодарил (а): 141 раз
Поблагодарили: 34 раза
Контактная информация:

Найти все свои темы - ссылка в меню.

Сообщение Leo Angel »

Нужно вставить в меню возле Ваши сообщения ещё поиск Ваши темы.
На форуме (3.3.0) установлено расширение searchusertopics. В профиле работает.
Вставил в меню вот такую ссылку

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

<li>
<a href="{U_SEARCH_TOPICS}" role="menuitem">
<i class="icon fas fa-newspaper fa-fw"></i><span> Ваши темы</span>	
</a>
</li>
При нажатии открывает главную страницу.
Ссылка такого вида <a href="{U_SEARCH_TOPICS}" role="menuitem"></a> почему-то не работает в меню.

Что нужно сделать? Что я делаю не так?
Заранее спасибо.
Аватара пользователя
rxu
phpBB Guru
phpBB Guru
Сообщения: 16313
Стаж: 17 лет 10 месяцев
Откуда: Красноярск
Благодарил (а): 533 раза
Поблагодарили: 2119 раз
Контактная информация:

Re: Найти все свои темы - ссылка в меню.

Сообщение rxu »

Leo Angel писал(а): 15.05.2020 13:50 почему-то не работает в меню
Потому, что ссылка U_SEARCH_TOPICS передается только в профиль пользователя.
Leo Angel писал(а): 15.05.2020 13:50 Что нужно сделать?
Добавить еще один слушатель события, например, core.page_header_after, и продублировать передачу ссылки там.
Изображение
Аватара пользователя
Leo Angel
phpBB 2.0.3
Сообщения: 393
Стаж: 6 лет 2 месяца
Благодарил (а): 141 раз
Поблагодарили: 34 раза
Контактная информация:

Re: Найти все свои темы - ссылка в меню.

Сообщение Leo Angel »

Вроде сделал.
Но всё равно не работает.
---------------
А, может, неправильно сделал. :(
Файл listener.php в расширении searchusertopics
сделал так:

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

<?php
/**
*
* Search User Topics extension for the phpBB Forum Software package.
*
* @copyright (c) 2015 Rich McGirr (RMcGirr83)
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
*
*/

namespace rmcgirr83\searchusertopics\event;

/**
* @ignore
*/
use Symfony\Component\EventDispatcher\EventSubscriberInterface;

/**
* Event listener
*/
class listener implements EventSubscriberInterface
{
	/** @var \phpbb\auth\auth */
	protected $auth;

	/** @var \phpbb\config\config */
	protected $config;

	/** @var \phpbb\db\driver\driver */
	protected $db;

	/** @var \phpbb\template\template */
	protected $template;

	/** @var \phpbb\user */
	protected $user;

	/** @var string phpBB root path */
	protected $phpbb_root_path;

	/** @var string phpEx */
	protected $php_ext;

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

	/**
	* Assign functions defined in this class to event listeners in the core
	*
	* @return array
	* @static
	* @access public
	*/
	static public function getSubscribedEvents()
	{
		return array(
			'core.memberlist_view_profile'				=> 'memberlist_view_profile',		
		);
	}

	static public function getSubscribedEvents1()
	{
		return array(
			'core.navbar_header'				=> 'navbar_header',			
		);
	}

	/**
	* Display number of topics on viewing user profile
	*
	* @param object $event The event object
	* @return null
	* @access public
	*/
	public function memberlist_view_profile($event)
	{
		$user_id = $event['member']['user_id'];
		$reg_date = $event['member']['user_regdate'];
		$this->user->add_lang_ext('rmcgirr83/searchusertopics', 'common');
		// get all topics started by the user and make sure they are visible
		$sql = 'SELECT t.*, p.post_visibility
			FROM ' . TOPICS_TABLE . ' t
			LEFT JOIN ' . POSTS_TABLE . ' p ON t.topic_first_post_id = p.post_id
			WHERE t.topic_poster = ' . (int) $user_id;
		$result = $this->db->sql_query($sql);

		$topics_num = 0;
		while ($row = $this->db->sql_fetchrow($result))
		{
			if ($row['topic_status'] == ITEM_MOVED)
			{
				continue;
			}
			if (!$this->auth->acl_get('f_read', $row['forum_id']))
			{
				continue;
			}
			if ($row['post_visibility'] != ITEM_APPROVED && !$this->auth->acl_get('m_approve', $row['forum_id']))
			{
				continue;
			}
			++$topics_num;
		}
		$this->db->sql_freeresult($result);

		if ($topics_num)
		{
			// Do the relevant calculations
			$users_days = max(1, round((time() - $reg_date) / 86400));
			$topics_per_day = $topics_num / $users_days;
			$topics_percent = ($this->config['num_topics']) ? min(100, ($topics_num / $this->config['num_topics']) * 100) : 0;
			$this->template->assign_vars(array(
				'TOPICS'	=> $topics_num,
				'L_TOTAL_TOPICS'	=> $this->user->lang('TOTAL_TOPICS', $topics_num),
				'TOPICS_PER_DAY'	=> $this->user->lang('TOPICS_PER_DAY', $topics_per_day),
				'TOPICS_PERCENT'	=> $this->user->lang('TOPICS_PERCENT', $topics_percent),
				'U_SEARCH_TOPICS'	=> ($this->auth->acl_get('u_search')) ? append_sid("{$this->root_path}search.$this->php_ext", "author_id=$user_id&amp;sr=topics&amp;sf=firstpost") : '',
			));
		}
	}
	
	public function navbar_header($event)
	{
		$user_id = $event['member']['user_id'];
		$reg_date = $event['member']['user_regdate'];
		$this->user->add_lang_ext('rmcgirr83/searchusertopics', 'common');
		// get all topics started by the user and make sure they are visible
		$sql = 'SELECT t.*, p.post_visibility
			FROM ' . TOPICS_TABLE . ' t
			LEFT JOIN ' . POSTS_TABLE . ' p ON t.topic_first_post_id = p.post_id
			WHERE t.topic_poster = ' . (int) $user_id;
		$result = $this->db->sql_query($sql);

		$topics_num = 0;
		while ($row = $this->db->sql_fetchrow($result))
		{
			if ($row['topic_status'] == ITEM_MOVED)
			{
				continue;
			}
			if (!$this->auth->acl_get('f_read', $row['forum_id']))
			{
				continue;
			}
			if ($row['post_visibility'] != ITEM_APPROVED && !$this->auth->acl_get('m_approve', $row['forum_id']))
			{
				continue;
			}
			++$topics_num;
		}
		$this->db->sql_freeresult($result);

		if ($topics_num)
		{
			// Do the relevant calculations
			$users_days = max(1, round((time() - $reg_date) / 86400));
			$topics_per_day = $topics_num / $users_days;
			$topics_percent = ($this->config['num_topics']) ? min(100, ($topics_num / $this->config['num_topics']) * 100) : 0;
			$this->template->assign_vars(array(
				'TOPICS'	=> $topics_num,
				'L_TOTAL_TOPICS'	=> $this->user->lang('TOTAL_TOPICS', $topics_num),
				'TOPICS_PER_DAY'	=> $this->user->lang('TOPICS_PER_DAY', $topics_per_day),
				'TOPICS_PERCENT'	=> $this->user->lang('TOPICS_PERCENT', $topics_percent),
				'U_SEARCH_TOPICS'	=> ($this->auth->acl_get('u_search')) ? append_sid("{$this->root_path}search.$this->php_ext", "author_id=$user_id&amp;sr=topics&amp;sf=firstpost") : '',
			));
		}
	}	

}
В файл navbar_header.html вставил

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

<li>
<a href="{U_SEARCH_TOPICS}" role="menuitem">
<i class="icon fas fa-newspaper fa-fw"></i><span> Ваши темы</span>	
</a>
</li>
Показывается, но не работает...
Видать, я совсем дремуч.............. :cry: :cry: :cry:
Аватара пользователя
rxu
phpBB Guru
phpBB Guru
Сообщения: 16313
Стаж: 17 лет 10 месяцев
Откуда: Красноярск
Благодарил (а): 533 раза
Поблагодарили: 2119 раз
Контактная информация:

Re: Найти все свои темы - ссылка в меню.

Сообщение rxu »

Вы просто наугад скопипастили случайные куски кода в слушатель :)

Отправлено спустя 2 минуты 4 секунды:
И второй вопрос - ссылку на темы какого именно пользователя надо вставить в шапку?

Отправлено спустя 3 минуты 11 секунд:
В общем, примерно ясно.
Первую функцию меняете на это

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

	static public function getSubscribedEvents()
	{
		return array(
			'core.memberlist_view_profile'				=> 'memberlist_view_profile',
			'core.page_header_after'					=> 'header_link',
		);
	}
и после последней добавляете эту

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

	public function header_link($event)
	{
		$user_id = $this->user->data['user_id'];
		$this->template->assign_vars(array(
			'U_SEARCH_USER_TOPICS'	=> ($this->auth->acl_get('u_search')) ? append_sid("{$this->root_path}search.$this->php_ext", "author_id=$user_id&amp;sr=topics&amp;sf=firstpost") : '',
		));
	}
И в шаблоне использовать U_SEARCH_USER_TOPICS.
Изображение
Аватара пользователя
Leo Angel
phpBB 2.0.3
Сообщения: 393
Стаж: 6 лет 2 месяца
Благодарил (а): 141 раз
Поблагодарили: 34 раза
Контактная информация:

Re: Найти все свои темы - ссылка в меню.

Сообщение Leo Angel »

rxu писал(а): 15.05.2020 15:07 Вы просто наугад скопипастили случайные куски кода в слушатель
Значит, дремучий я! Печалька... :cry:
-----------------------
Нужно, чтобы пользователь находил все свои темы, не заходя в профиль, а нажав на ссылку в меню Ваши темы, получил список всех своих тем.
Аватара пользователя
rxu
phpBB Guru
phpBB Guru
Сообщения: 16313
Стаж: 17 лет 10 месяцев
Откуда: Красноярск
Благодарил (а): 533 раза
Поблагодарили: 2119 раз
Контактная информация:

Re: Найти все свои темы - ссылка в меню.

Сообщение rxu »

Хотя, имя переменной лучше поменяйте на другое, иначе во всех профилях будет ссылка на темы текущего пользователя, который просматривает страницу.
Например, U_SEARCH_USER_TOPICS. И в слушателе, и в шаблоне.
Изображение
Аватара пользователя
Leo Angel
phpBB 2.0.3
Сообщения: 393
Стаж: 6 лет 2 месяца
Благодарил (а): 141 раз
Поблагодарили: 34 раза
Контактная информация:

Re: Найти все свои темы - ссылка в меню.

Сообщение Leo Angel »

Не работает. :(
Аватара пользователя
rxu
phpBB Guru
phpBB Guru
Сообщения: 16313
Стаж: 17 лет 10 месяцев
Откуда: Красноярск
Благодарил (а): 533 раза
Поблагодарили: 2119 раз
Контактная информация:

Re: Найти все свои темы - ссылка в меню.

Сообщение rxu »

Что конкретно?

Отправлено спустя 1 минуту 9 секунд:
Кэш чистили?
Изображение
Аватара пользователя
Leo Angel
phpBB 2.0.3
Сообщения: 393
Стаж: 6 лет 2 месяца
Благодарил (а): 141 раз
Поблагодарили: 34 раза
Контактная информация:

Re: Найти все свои темы - ссылка в меню.

Сообщение Leo Angel »

Чистил. Ругается на эту строку:
$user->id = $this->user->data['user_id'];
Аватара пользователя
rxu
phpBB Guru
phpBB Guru
Сообщения: 16313
Стаж: 17 лет 10 месяцев
Откуда: Красноярск
Благодарил (а): 533 раза
Поблагодарили: 2119 раз
Контактная информация:

Re: Найти все свои темы - ссылка в меню.

Сообщение rxu »

Leo Angel писал(а): 15.05.2020 15:42 Ругается на эту строку:
Я ее почти сразу поменял, замените код.
Изображение
Аватара пользователя
Leo Angel
phpBB 2.0.3
Сообщения: 393
Стаж: 6 лет 2 месяца
Благодарил (а): 141 раз
Поблагодарили: 34 раза
Контактная информация:

Re: Найти все свои темы - ссылка в меню.

Сообщение Leo Angel »

Не ищет темы и в шапке появились ошибки:

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

[phpBB Debug] PHP Warning: in file [ROOT]/ext/rmcgirr83/searchusertopics/event/listener.php on line 133: Creating default object from empty value
[phpBB Debug] PHP Warning: in file [ROOT]/includes/functions.php on line 4306: Cannot modify header information - headers already sent by (output started at [ROOT]/includes/functions.php:3037)
[phpBB Debug] PHP Warning: in file [ROOT]/includes/functions.php on line 4306: Cannot modify header information - headers already sent by (output started at [ROOT]/includes/functions.php:3037)
[phpBB Debug] PHP Warning: in file [ROOT]/includes/functions.php on line 4306: Cannot modify header information - headers already sent by (output started at [ROOT]/includes/functions.php:3037)
[phpBB Debug] PHP Warning: in file [ROOT]/includes/functions.php on line 4306: Cannot modify header information - headers already sent by (output started at [ROOT]/includes/functions.php:3037)
Аватара пользователя
rxu
phpBB Guru
phpBB Guru
Сообщения: 16313
Стаж: 17 лет 10 месяцев
Откуда: Красноярск
Благодарил (а): 533 раза
Поблагодарили: 2119 раз
Контактная информация:

Re: Найти все свои темы - ссылка в меню.

Сообщение rxu »

Leo Angel писал(а): 15.05.2020 15:48 Не ищет темы и в шапке появились ошибки
Еще раз - замените код. Сейчас там должно быть $user_id вместо $user->id.
Изображение
Аватара пользователя
Leo Angel
phpBB 2.0.3
Сообщения: 393
Стаж: 6 лет 2 месяца
Благодарил (а): 141 раз
Поблагодарили: 34 раза
Контактная информация:

Re: Найти все свои темы - ссылка в меню.

Сообщение Leo Angel »

Работает!!! :)
Огромное СПАСИБО!!!
:applause :applause :applause
Аватара пользователя
Leo Angel
phpBB 2.0.3
Сообщения: 393
Стаж: 6 лет 2 месяца
Благодарил (а): 141 раз
Поблагодарили: 34 раза
Контактная информация:

Re: Найти все свои темы - ссылка в меню.

Сообщение Leo Angel »

Только сейчас обнаружил, что после обновления на 3.3.2 перестал работать в меню поиск "Ваши темы".
Все изменения, описанные выше внёс.
Но при нажатии на ссылку "Ваши темы" открывается страница форумного поиска.
В адресной строке адрес такой - www.мойдомен/search.php?author_id=&sr=topics&sf=firstpost
то есть не подставляется id пользователя.
При этом в Профиле "Найти темы пользователя" работает корректно.

Подскажите, пожалуйста, какие ещё изменения нужно внести, чтобы этот поиск опять заработал.
Аватара пользователя
Sheer
Former team member
Сообщения: 12113
Стаж: 17 лет 1 месяц
Откуда: Калининград не Кенигсберг
Благодарил (а): 54 раза
Поблагодарили: 2752 раза
Контактная информация:

Re: Найти все свои темы - ссылка в меню.

Сообщение Sheer »

rxu писал(а): 15.05.2020 15:10 $user_id = $this->user->data['user_id'];
Откуда ему теперь взяться?
Замените расширение из архива
rmcgirr83.rar
(65.19 КБ) 64 скачивания
Отправлено спустя 1 минуту 22 секунды:
А вообще-то это надо было Внимание! Прежде чем создать тему - прочти!
Изображение
Общие ошибки новичков (07.11.2005) & Как задавать вопросы
Мини FAQ
Если ничто другое не помогает, прочтите, наконец, инструкцию!
"Никакая инструкция не может перечислить всех обязанностей должностного лица, предусмотреть все отдельные случаи и дать вперёд соответствующие указания, а поэтому господа инженеры должны проявить инициативу и, руководствуясь знаниями своей специальности и пользой дела, принять все усилия для оправдания своего назначения".
Циркуляр Морского технического комитета №15 от 29.11.1910 г.
Перенесено из форума phpBB-пространство в форум Поддержка расширений для phpBB 15.04.2021 13:46 модератором Sheer

Ответить

Вернуться в «Поддержка расширений для phpBB»