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

[3.1] Изменение списка пользователей

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

Ваш вопрос может быть удален без объяснения причин, если на него есть ответы по приведённым ссылкам (а вы рискуете получить предупреждение ;) ).
Аватара пользователя
KimIV
phpBB 2.0.1
Сообщения: 286
Стаж: 8 лет 6 месяцев
Откуда: Кунгур
Благодарил (а): 166 раз
Поблагодарили: 21 раз

[3.1] Изменение списка пользователей

Сообщение KimIV »

Прошу идейной помощи в перекомпоновке штатного списка пользователей. Нужно добавить столбец перед именем пользователя. В шаблоне нашёл нужное событие memberlist_body_username_prepend, а вот как для него подготовить данные, не могу сообразить. Пробовал событие ядра memberlist_memberrow_before вот таким образом

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

public function memberlist_memberrow_before($event)
{
	$user_list = $event['user_list'];
	foreach ($user_list as $i => $user_id) {
		$this->template->assign_block_vars('memberrow', array(
			'USER_ID'	=> $user_id,
		));
	}
}
Добавляет новые строки, а мне надо только столбец.
Ты должен делать добро из зла, потому что его больше не из чего делать. Уоренн Роберт Пенн.
Аватара пользователя
Татьяна5
Поддержка
Поддержка
Сообщения: 12416
Стаж: 12 лет 8 месяцев
Благодарил (а): 166 раз
Поблагодарили: 2473 раза

Re: [3.1] Изменение списка пользователей

Сообщение Татьяна5 »

Массив $memberrow не передаётся в события, но можно вклиниться в другом месте

memberlist.php

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

$memberrow = array_merge(phpbb_show_profile($row, false, false, false), array(
phpbb_show_profile - includes/functions_display.php
id уже есть, выбирать не надо

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

$user_id = $data['user_id'];
Массив для вывода в шаблон

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

	// Dump it out to the template
	$template_data = array(
		'AGE'			=> $age,
И - есть событие для изменения этого массива

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

	/**
	* Preparing a user's data before displaying it in profile and memberlist
	*
	* @event core.memberlist_prepare_profile_data
	* @var	array	data				Array with user's data
	* @var	array	template_data		Template array with user's data
	* @since 3.1.0-a1
	*/
	$vars = array('data', 'template_data');
	extract($phpbb_dispatcher->trigger_event('core.memberlist_prepare_profile_data', compact($vars)));
Не отдельный столбец, но данные вполне можно добавить

Отправлено спустя 3 минуты 51 секунду:
Хотя и столбец можно исхитриться сделать, но некрасиво, в языковые переменные придётся куски html добавлять
Аватара пользователя
KimIV
phpBB 2.0.1
Сообщения: 286
Стаж: 8 лет 6 месяцев
Откуда: Кунгур
Благодарил (а): 166 раз
Поблагодарили: 21 раз

Re: [3.1] Изменение списка пользователей

Сообщение KimIV »

Спасибо, Татьяна! Получилось!

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

	public function memberlist_prepare_profile_data($event)
	{
		$user_id = (int) $event['data']['user_id'];
		$template_data = $event['template_data'];

		$template_data['USER_ID'] = $user_id;

		$event['template_data'] = $template_data;
	}
Image 12.png
Теперь из этого я уже легко сделаю то, что мне нужно...
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Ты должен делать добро из зла, потому что его больше не из чего делать. Уоренн Роберт Пенн.
Аватара пользователя
Татьяна5
Поддержка
Поддержка
Сообщения: 12416
Стаж: 12 лет 8 месяцев
Благодарил (а): 166 раз
Поблагодарили: 2473 раза

Re: [3.1] Изменение списка пользователей

Сообщение Татьяна5 »

KimIV писал(а): $event['data']['user_id']
Такая конструкция срабатывает не всегда и не везде
Лучше

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

$data = $event['data'];
$user_id = $data['user_id'];
Аватара пользователя
LavIgor
Former team member
Сообщения: 3468
Стаж: 9 лет 11 месяцев
Благодарил (а): 41 раз
Поблагодарили: 830 раз

Re: [3.1] Изменение списка пользователей

Сообщение LavIgor »

Татьяна5 писал(а): Такая конструкция срабатывает не всегда и не везде
Здесь работает и даже в функции передавать можно.
Специфичность в том, что по факту это не массив, а объект со свойствами массива, поэтому некоторые функции для массивов не работают.

Отправлено спустя 3 минуты :
Т.е. прочитать данные таким образом можно и даже лучше (меньше кода).
Проблемы возникают, когда нужно туда что-то записать.
Аватара пользователя
KimIV
phpBB 2.0.1
Сообщения: 286
Стаж: 8 лет 6 месяцев
Откуда: Кунгур
Благодарил (а): 166 раз
Поблагодарили: 21 раз

Re: [3.1] Изменение списка пользователей

Сообщение KimIV »

Спасибо, ребята! Я чувствую, как я рядом с Вами умнею!
Ты должен делать добро из зла, потому что его больше не из чего делать. Уоренн Роберт Пенн.

Вернуться в «Для разработчиков»