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

Ваш вопрос может быть удален без объяснения причин, если на него есть ответы по приведённым ссылкам (а вы рискуете получить предупреждение ;) ).
Аватара пользователя
Webliberty
phpBB 2.0.5
Сообщения: 472
Стаж: 12 лет 4 месяца
Благодарил (а): 136 раз
Поблагодарили: 63 раза

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

Сообщение Webliberty »

Поискал в инете примеры с проверкой GET, собрал вот такое:

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

	public function get_post_data($event)
	{
		$forum_id = $event['forum_id'];
		$topic_id = $event['topic_id'];
		$next = $_GET['next'];
		$previous = $_GET['previous'];

		if (!$next)
		{
		$this->template->assign_vars(array(
			'U_VIEW_NEWER_TOPIC'	=> redirect(append_sid("{$this->phpbb_root_path}viewtopic.$this->php_ext", "f=$forum_id&t=$topic_id"))
		));
		}
		return;

		if (!$previous)
		{
		$this->template->assign_vars(array(
			'U_VIEW_OLDER_TOPIC'	=> redirect(append_sid("{$this->phpbb_root_path}viewtopic.$this->php_ext", "f=$forum_id&t=$topic_id"))
		));
		}
		return;
	}
и получил ошибку:
Illegal use of $_GET. You must use the request class or request_var() to access input data.
Мой форум на phpBB 3.3.8 (начинал с phpBB 3.0.9)
Подпись заверена нотариусом :P
Anvar
Former team member
Сообщения: 1965
Стаж: 14 лет 1 месяц
Благодарил (а): 57 раз
Поблагодарили: 625 раз

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

Сообщение Anvar »

seodirection, Используй функцию request_var()

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

	public function get_post_data($event)
	{
		$forum_id = $event['forum_id'];
		$topic_id = $event['topic_id'];
		$next =  request_var('next', '');
		$previous =  request_var('previous', '');
		if ($next || $previous)
		{
			return redirect(append_sid("{$this->phpbb_root_path}viewtopic.$this->php_ext", "f=$forum_id&t=$topic_id"));
		}
	}
Аватара пользователя
rxu
phpBB Guru
phpBB Guru
Сообщения: 16384
Стаж: 18 лет
Откуда: Красноярск
Благодарил (а): 524 раза
Поблагодарили: 1749 раз

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

Сообщение rxu »

Anvar писал(а):Используй функцию request_var()
А еще лучше - $request->variable().
Изображение
Shredder
Former team member
Сообщения: 2224
Стаж: 15 лет 5 месяцев
Благодарил (а): 124 раза
Поблагодарили: 138 раз

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

Сообщение Shredder »

rxu
Чем это отличается?
Аватара пользователя
rxu
phpBB Guru
phpBB Guru
Сообщения: 16384
Стаж: 18 лет
Откуда: Красноярск
Благодарил (а): 524 раза
Поблагодарили: 1749 раз

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

Сообщение rxu »

request_var() устаревшая функция (deprecated), в 3.1 используются методы класса \phpbb\request\request. Прописан сервис @request. В целом методы класса более продвинуты, чем функция request_var().
Изображение
Аватара пользователя
LavIgor
Former team member
Сообщения: 3468
Стаж: 10 лет
Благодарил (а): 41 раз
Поблагодарили: 831 раз

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

Сообщение LavIgor »

Итоговая функция должна выглядеть как-то так.

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

public function get_post_data($event)
	{
		$forum_id = $event['forum_id'];
		$topic_id = $event['topic_id'];
		$view =  $request->variable('view', '');
		if ($view == 'next' || $view == 'previous')
		{
			redirect(append_sid("{$this->phpbb_root_path}viewtopic.$this->php_ext", "f=$forum_id&t=$topic_id"));
			return false;
		}
	}
Аватара пользователя
Webliberty
phpBB 2.0.5
Сообщения: 472
Стаж: 12 лет 4 месяца
Благодарил (а): 136 раз
Поблагодарили: 63 раза

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

Сообщение Webliberty »

Немного подумал и пришел к такому выводу: все-таки ссылки viewtopic.php?f=1&t=1&view=previous и viewtopic.php?f=1&t=1&view=next ведут на разные страницы, а не на viewtopic.php?f=1&t=1 поэтому скорее всего я просчитался, настраивать подобный редирект не логично.

Поэтому сделал такое решение, которое тоже крутилось в голове: все страницы с previous и next в url сделал несуществующими, проверил ответ сервера - 404. Это на сто процентов поможет исключить такие страницы из индекса раз и навсегда!

В качестве get параметра взял view - он вроде только здесь используется? По крайней мере на основных страницах на которых протестировал все работает, и кроме этих больше нигде не встречается, по идее не должно нарушить работу форума. Поправьте меня, если ошибаюсь. В итоге использую такое решение:

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

	public function remove_nextprev($event)
	{
		$nextprev =  request_var('view', '');
		if ($nextprev)
		{
			trigger_error('NO_TOPIC');
		}
	}
Мой форум на phpBB 3.3.8 (начинал с phpBB 3.0.9)
Подпись заверена нотариусом :P
Anvar
Former team member
Сообщения: 1965
Стаж: 14 лет 1 месяц
Благодарил (а): 57 раз
Поблагодарили: 625 раз

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

Сообщение Anvar »

seodirection, Ну это уже твои заморочки, кто важнее пс или пользователь. Я лично обделять последних не собираюсь.
Можно и остальные дубли ликвидировать, например определить тему с неуказанным параметром &f=, то тоже на редирект.
Shredder
Former team member
Сообщения: 2224
Стаж: 15 лет 5 месяцев
Благодарил (а): 124 раза
Поблагодарили: 138 раз

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

Сообщение Shredder »

Как использовать языковую переменную во время установки, в функции update_data?

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

array('config.add', array('my_message', $this->user->lang['MY_VARIABLE'])),
Это не прокатывает, хотя в 3.0.12 прекрасно работало, а $this->config и сейчас использовать можно.

Добавлено спустя 7 минут 39 секунд:
Вместо добавления переменной происходит General Error, где она якобы равна NULL
Аватара пользователя
rxu
phpBB Guru
phpBB Guru
Сообщения: 16384
Стаж: 18 лет
Откуда: Красноярск
Благодарил (а): 524 раза
Поблагодарили: 1749 раз

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

Сообщение rxu »

Объекта $user нет в миграторе. А можно подробности, зачем локализованную языковую строку толкаем в таблицу конфига?
Изображение
Shredder
Former team member
Сообщения: 2224
Стаж: 15 лет 5 месяцев
Благодарил (а): 124 раза
Поблагодарили: 138 раз

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

Сообщение Shredder »

Дефолтное сообщение для мода.

Если простого способа нет и нужно заморачиваться, то фиг с ним, добавлю пустую строку.
Аватара пользователя
rxu
phpBB Guru
phpBB Guru
Сообщения: 16384
Стаж: 18 лет
Откуда: Красноярск
Благодарил (а): 524 раза
Поблагодарили: 1749 раз

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

Сообщение rxu »

Shredder писал(а):Дефолтное сообщение для мода.
Так может, не локализованное значение записывать, а индекс языковой переменной, т.е.

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

array('config.add', array('my_message', 'MY_VARIABLE')),
и уже потом в коде расширения подсовывать это значение в $this->user->lang()?
Изображение
Shredder
Former team member
Сообщения: 2224
Стаж: 15 лет 5 месяцев
Благодарил (а): 124 раза
Поблагодарили: 138 раз

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

Сообщение Shredder »

В данном случае это смысла не имеет, т.к. функция переменной планировалась та же самая, как и у "ваш_домен.ru" в настройках конференции - просто подставить "демо"-значение при установке, которое при желании потом можно будет сменить на что-то своё.
Аватара пользователя
rxu
phpBB Guru
phpBB Guru
Сообщения: 16384
Стаж: 18 лет
Откуда: Красноярск
Благодарил (а): 524 раза
Поблагодарили: 1749 раз

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

Сообщение rxu »

Shredder
ok, тупо global $user; не прокатывает?
Изображение
Shredder
Former team member
Сообщения: 2224
Стаж: 15 лет 5 месяцев
Благодарил (а): 124 раза
Поблагодарили: 138 раз

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

Сообщение Shredder »

rxu
Я сначала так и хотел, но забыл подключить язык мода через $user->add_lang_ext, как делал в "оригинале" 3.0.12
Теперь всё работает.

Метод с global чем-то хуже?

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