Уважаемые пользователи!
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.3.x | FAQ | Как задавать вопросы | Как устанавливать расширения

Ваш вопрос может быть удален без объяснения причин, если на него есть ответы по приведённым ссылкам (а вы рискуете получить предупреждение ;) ).
Аватара пользователя
nissin
phpBB 3.0.4
Сообщения: 2208
Стаж: 16 лет 3 месяца
Откуда: Павлодар
Благодарил (а): 7 раз
Поблагодарили: 338 раз
Контактная информация:

Re: Расширения - это просто!

Сообщение nissin »

Если кратко, вам нужно создать listener(слушатель) в котором подписаться на event(событие).
https://area51.phpbb.com/docs/dev/3.1.x ... -listeners
При обработке события возвращаете нужные значения в параметре $event.
Всё повторяется. nurlan.info
Аватара пользователя
moonrise
phpBB 1.4.2
Сообщения: 57
Стаж: 5 лет 9 месяцев
Благодарил (а): 13 раз
Поблагодарили: 1 раз

Re: Расширения - это просто!

Сообщение moonrise »

nissin писал(а): 31.05.2018 11:26 При обработке события возвращаете нужные значения в параметре $event
Вот это можно поподробнее? :)
Сделал (через STK) listener.php
listener.php 

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

<?php
namespace moonrise\nickname\event;

use Symfony\Component\EventDispatcher\EventSubscriberInterface;

class listener implements EventSubscriberInterface
{
	static public function getSubscribedEvents()
	{
		return array(
			'core.modify_username_string ' => 'load_language_on_setup', 
		);
	}

	public function load_language_on_setup($event)
	{
		$lang_set_ext = $event['lang_set_ext'];
		$lang_set_ext[] = array(
			'ext_name' => 'moonrise/nickname',
			'lang_set' => 'common',
		);
		$event['lang_set_ext'] = $lang_set_ext;
	} 

	protected $template;


	protected $phpbb_root_path;


	public function __construct($phpbb_root_path, \phpbb\template\template $template)
	{
		$this->phpbb_root_path = $phpbb_root_path;
		$this->template = $template;
	}
}
в соответствующем языке сделал файл common.php
common.php 

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

<?php
if (!defined('IN_PHPBB'))
{
	exit;
}

if (empty($lang) || !is_array($lang))
{
	$lang = array();
}

$lang = array_merge(
	$lang, array(
	)
);
То есть в теории он слушает и реагирует на нужное событие. а вот что надо написать, что бы из функции get_username_string перехватил и заменил переменную username - не понимаю :(
для перехвата, как понимаю, что-то вроде

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

$testvar = $event['username'];
а вот как обратно присвоить?
Просто хороший человек
Аватара пользователя
nissin
phpBB 3.0.4
Сообщения: 2208
Стаж: 16 лет 3 месяца
Откуда: Павлодар
Благодарил (а): 7 раз
Поблагодарили: 338 раз
Контактная информация:

Re: Расширения - это просто!

Сообщение nissin »

moonrise писал(а): 31.05.2018 13:27 а вот как обратно присвоить?
Тоже самое но в обратную сторону:

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

$event['username'] = $testvar;
Всё повторяется. nurlan.info
Аватара пользователя
moonrise
phpBB 1.4.2
Сообщения: 57
Стаж: 5 лет 9 месяцев
Благодарил (а): 13 раз
Поблагодарили: 1 раз

Re: Расширения - это просто!

Сообщение moonrise »

Для простоты и понимания пытаюсь пока просто текст вывести.

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

public function load_language_on_setup($event)
	{
		$lang_set_ext = $event['lang_set_ext'];
		$lang_set_ext[] = array(
			'ext_name' => 'krab24/nickname',
			'lang_set' => 'common',
		);
		$event['lang_set_ext'] = $lang_set_ext;
		
		$testvar = 'TEST_NICK';
		$event['username'] = $testvar;
	} 
не выдает ошибок, но и ник не меняет :(

ну и сразу. вместо если 'TEST_NICK' нужно значение допполя nick, то правильный синтаксис такой?

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

if (!class_exists('custom_profile'))
   {
      include($phpbb_root_path . 'includes/functions_profile_fields.' . $phpEx);
   }
   $cp = new custom_profile();
   $username_custom = $cp->generate_profile_fields_template('grab', $user->data['user_id']);
   
$testvar = $username_custom[$user->data['user_id']]['nick']['value'];
Последний раз редактировалось moonrise 31.05.2018 16:14, всего редактировалось 1 раз.
Просто хороший человек
Аватара пользователя
Sumanai
phpBB 3.0.0 RC5
Сообщения: 1668
Стаж: 9 лет 4 месяца
Благодарил (а): 267 раз
Поблагодарили: 216 раз
Контактная информация:

Re: Расширения - это просто!

Сообщение Sumanai »

moonrise писал(а): 31.05.2018 15:43 но и ник не меняет :(
Вы прописали весь код в событии, предназначенном для добавления языковых переменных. Конечно же ничего не работает.
Вам нужно добавить в getSubscribedEvents вашу core.modify_username_string с какой-нибудь функцией, и уже в ней менять ник, а оригинальную load_language_on_setup привести в первоначальный вид для загрузки языковых переменных.
Аватара пользователя
moonrise
phpBB 1.4.2
Сообщения: 57
Стаж: 5 лет 9 месяцев
Благодарил (а): 13 раз
Поблагодарили: 1 раз

Re: Расширения - это просто!

Сообщение moonrise »

Так?

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

 
 static public function getSubscribedEvents()
	{
		return array(
			'core.modify_username_string ' => 'my_funclion', 
		);
	}
public function my_funclion($event)
	{
		if (!class_exists('custom_profile'))
		{
			include($phpbb_root_path . 'includes/functions_profile_fields.' . $phpEx);
		}
		$cp = new custom_profile();
		$username_custom = $cp->generate_profile_fields_template('grab', $user->data['user_id']);
		$testvar = $username_custom[$user->data['user_id']]['nick']['value'];
		$event['username'] = $testvar;
	} 
Последний раз редактировалось moonrise 31.05.2018 16:22, всего редактировалось 1 раз.
Просто хороший человек
Аватара пользователя
Sumanai
phpBB 3.0.0 RC5
Сообщения: 1668
Стаж: 9 лет 4 месяца
Благодарил (а): 267 раз
Поблагодарили: 216 раз
Контактная информация:

Re: Расширения - это просто!

Сообщение Sumanai »

В getSubscribedEvents прописали? Типа А, вы зачем-то заменили код в слушателе. В общем функция getSubscribedEvents должна выглядеть так

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

	static public function getSubscribedEvents()
	{
		return array(
			'core.user_setup ' => 'load_language_on_setup', 
			'core.modify_username_string ' => 'my_funclion', 
		);
	}
Аватара пользователя
moonrise
phpBB 1.4.2
Сообщения: 57
Стаж: 5 лет 9 месяцев
Благодарил (а): 13 раз
Поблагодарили: 1 раз

Re: Расширения - это просто!

Сообщение moonrise »

не понимаю :(
в getSubscribedEvents я "подписываюсь" на события и говорю какую функцию (дополнительно?) по ним запускать.
то есть зачем строка 'core.user_setup ' => 'load_language_on_setup', ?

Я не спорю, я разобраться хочу :)
Просто хороший человек
Аватара пользователя
Sumanai
phpBB 3.0.0 RC5
Сообщения: 1668
Стаж: 9 лет 4 месяца
Благодарил (а): 267 раз
Поблагодарили: 216 раз
Контактная информация:

Re: Расширения - это просто!

Сообщение Sumanai »

moonrise писал(а): 31.05.2018 16:30 в getSubscribedEvents я "подписываюсь" на события и говорю какую функцию (дополнительно?) по ним запускать.
Да.
moonrise писал(а): 31.05.2018 16:30 то есть зачем строка
Для вызова функции load_language_on_setup, в которой прописано подключение языкового файла. Если вы не будете использовать языковые файлы, можете удалить. Вторая строка для вызова вашей функции.
Аватара пользователя
moonrise
phpBB 1.4.2
Сообщения: 57
Стаж: 5 лет 9 месяцев
Благодарил (а): 13 раз
Поблагодарили: 1 раз

Re: Расширения - это просто!

Сообщение moonrise »

Спасибо! Оставил языковое на будущее (потом хочется сделать красиво)
Оставил пока так:
кусок кода 

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

	static public function getSubscribedEvents()
	{
		return array(
			'core.user_setup' => 'load_language_on_setup', 
			'core.modify_username_string' => 'my_funclion',
		);
	}

	public function load_language_on_setup($event)
	{
		$lang_set_ext = $event['lang_set_ext'];
		$lang_set_ext[] = array(
			'ext_name' => 'sniper/stklinks',
			'lang_set' => 'common',
		);
		$event['lang_set_ext'] = $lang_set_ext;
	} 
	
	public function my_funclion($event)
	{
		if (!class_exists('custom_profile'))
		{
			include($phpbb_root_path . 'includes/functions_profile_fields.' . $phpEx);
		}
		$cp = new custom_profile();
		$username_custom = $cp->generate_profile_fields_template('grab', $user->data['user_id']);
		$testvar = $username_custom[$user->data['user_id']]['nick']['value'];
		$event['username'] = $testvar;
	} 
Начал выдавать ошибку на включение functions_profile_fields - failed to open stream: No such file or directoryИщу куда оно переместилось в 3.2.2

такая конструкция просто не работает :(

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

public function my_funclion($event)
	{
		$testvar = postrow.custom_fields.NICK_FIELD_VALUE;
		$event['username'] = $testvar;
	} 
Просто хороший человек
Аватара пользователя
Sumanai
phpBB 3.0.0 RC5
Сообщения: 1668
Стаж: 9 лет 4 месяца
Благодарил (а): 267 раз
Поблагодарили: 216 раз
Контактная информация:

Re: Расширения - это просто!

Сообщение Sumanai »

moonrise писал(а): 31.05.2018 17:05 такая конструкция просто не работает :(
А с чего бы ей работать, когда postrow.custom_fields никто не определил?
Вам нужен класс phpbb\profilefields\manager, но это уже сами смотрите, какие там функции использовать и как его подключать.
Аватара пользователя
LavIgor
Former team member
Сообщения: 3468
Стаж: 9 лет 11 месяцев
Благодарил (а): 41 раз
Поблагодарили: 932 раза

Re: Расширения - это просто!

Сообщение LavIgor »

moonrise писал(а): 31.05.2018 10:52 последний раз имел дело с phpbb лет 15 назад
Здесь уже речь идёт не о phpBB, а о PHP как языке.
moonrise писал(а): 31.05.2018 17:05 $testvar = postrow.custom_fields.NICK_FIELD_VALUE;
Не имеет смысла: не путайте с кодом в шаблонах.
moonrise писал(а): 31.05.2018 17:05 Ищу куда оно переместилось в 3.2.2
Даже если бы не переместилось, файл бы всё равно был не найден из-за того, что переменные $phpbb_root_path и $phpEx не объявлены.
Аватара пользователя
Sheer
Former team member
Сообщения: 12113
Стаж: 17 лет 1 месяц
Откуда: Калининград не Кенигсберг
Благодарил (а): 54 раза
Поблагодарили: 2752 раза
Контактная информация:

Re: Расширения - это просто!

Сообщение Sheer »

Создание страниц в стиле конференции
Специально для таких как вы написано.
Изображение
Общие ошибки новичков (07.11.2005) & Как задавать вопросы
Мини FAQ
Если ничто другое не помогает, прочтите, наконец, инструкцию!
"Никакая инструкция не может перечислить всех обязанностей должностного лица, предусмотреть все отдельные случаи и дать вперёд соответствующие указания, а поэтому господа инженеры должны проявить инициативу и, руководствуясь знаниями своей специальности и пользой дела, принять все усилия для оправдания своего назначения".
Циркуляр Морского технического комитета №15 от 29.11.1910 г.
Аватара пользователя
moonrise
phpBB 1.4.2
Сообщения: 57
Стаж: 5 лет 9 месяцев
Благодарил (а): 13 раз
Поблагодарили: 1 раз

Re: Расширения - это просто!

Сообщение moonrise »

Отступился (пока не разберусь) от затеи выше. По аналогии с уроком от Sheer сделал страничку. в /ext/krab24/flatslist/styles/all/template/ лежит файлик mytest_body.html в котором среди прочего есть строчка

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

				<td><a href="{row.U_DETAILS}">{row.FTYPE}
как можно сделать условие на значение (парсинг) row.FTYPE (там или 0 или 1) и вывода значения языковой переменной {L_FTYPE0} или {L_FTYPE1} соответственно? а еще лучше - картинку или одну или другую.
Аватара пользователя
rxu
phpBB Guru
phpBB Guru
Сообщения: 16313
Стаж: 17 лет 10 месяцев
Откуда: Красноярск
Благодарил (а): 533 раза
Поблагодарили: 2119 раз
Контактная информация:

Re: Расширения - это просто!

Сообщение rxu »

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

<!-- IF row.FTYPE eq 0 -->{L_FTYPE0}<!-- ELSE -->{L_FTYPE1}<!-- ENDIF -->
Изображение
Ответить

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