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

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

Ваш вопрос может быть удален без объяснения причин, если на него есть ответы по приведённым ссылкам (а вы рискуете получить предупреждение ;) ).
Аватара пользователя
RedNaxi
Former team member
Сообщения: 933
Стаж: 17 лет 2 месяца
Откуда: BeBoss.ru
Благодарил (а): 2 раза
Поблагодарили: 10 раз

[3.3] Создание расширения с командами для вызова из командной строки

Сообщение RedNaxi »

Добрый день!

Возникла такая задача. Есть архив формума на MyBB, в HTML формате. Как если бы скачали старый сайт с web-archive, но не совсем.
Есть желание превратить этот архив снова в работающий форум.
Порядок действий, как я вижу, простой:
1) Попарсить из html файлов темы и посты, сохранить в базу данных в какую-то промежуточную таблицу
2) Используя функцию submit_post заново создать все эти темы в phpBB
3) Настроить 301 переадресацию со старых урлов на новые

Пока устанавливается вагрант машина решил уточнить пару тонкостей.

Как создать расширение и сделать миграции для базы данных я понял.
Но сколько искал пока так и не нашел, как создать действие или скрипт, который будет вызываться из командной строки.

Посоветуйте, пожалуйста, где можно об этом почитать? Может есть готовые примеры расширений, работающие с командной строкой?

Отправлено спустя 12 минут 49 секунд:
Нашел официальный скелетон, в котором, как я понимаю, можно галочками выбрать что нужно, в том числе и создать команду для командной строки, и миграции и т.д.
https://www.phpbb.com/customise/db/offi ... _skeleton/

Буду пробовать.
Аватара пользователя
rxu
phpBB Guru
phpBB Guru
Сообщения: 16367
Стаж: 17 лет 11 месяцев
Откуда: Красноярск
Благодарил (а): 521 раз
Поблагодарили: 1744 раза

Re: [3.3] Создание расширения с командами для вызова из командной строки

Сообщение rxu »

RedNaxi, сколько зим :)

Вопрос хороший, официальной документации по созданию кастомных команд для командной строки нет. Ориентироваться приходится на код ядра (/phpbb/console/command/ и определения сервисов /config/default/container/services_console.yml).
Пример добавления отдельной команды в ядро: https://github.com/phpbb/phpbb/pull/4843/files

По тому же принципу можно действовать и в расширении.
Изображение
Аватара пользователя
RedNaxi
Former team member
Сообщения: 933
Стаж: 17 лет 2 месяца
Откуда: BeBoss.ru
Благодарил (а): 2 раза
Поблагодарили: 10 раз

Re: [3.3] Создание расширения с командами для вызова из командной строки

Сообщение RedNaxi »

Лет 10 прошло с последнего моего поста на этом форуме, занимался всякой ерундой - писал под Yii2, Phalcon, мобильными приложениями побаловался, но душой я всегда был с phpBB :-)

Вот пытаюсь познать новую версию.
Документация конечно очень запутанная на оф. сайте английском.
Пока попробую через скелетон.

Вот тут есть немного про шаблон команды для phpbbcli:
https://area51.phpbb.com/docs/dev/3.2.x ... le-command
Аватара пользователя
rxu
phpBB Guru
phpBB Guru
Сообщения: 16367
Стаж: 17 лет 11 месяцев
Откуда: Красноярск
Благодарил (а): 521 раз
Поблагодарили: 1744 раза

Re: [3.3] Создание расширения с командами для вызова из командной строки

Сообщение rxu »

RedNaxi, пример расширения с консолью: https://github.com/phpBB-Studio/NoRe
Изображение
Аватара пользователя
RedNaxi
Former team member
Сообщения: 933
Стаж: 17 лет 2 месяца
Откуда: BeBoss.ru
Благодарил (а): 2 раза
Поблагодарили: 10 раз

Re: [3.3] Создание расширения с командами для вызова из командной строки

Сообщение RedNaxi »

Итак, как создать собственную команду в расширении для вызова из командной строки.
Условно считаем автором нашего расширения ext_author а название расширения ext_name
1. В файле /ext/<ext_author>/<ext_name>/config/services.yml добавляем конфиг для нашей команды по шаблону:

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

    <ext_author>.<ext_name>.command.<command_name>:
        class: <ext_author>\<ext_name>\console\command\<command_name>
        arguments:
            - '@user'
            - '%core.root_path%'
        tags:
            - { name: console.command }
В список arguments передаем набор моделей и переменных, которые ваша команда должна принимать.

2. В папке /ext/<ext_author>/<ext_name> создаем папку console/command (как прописано в пути в services.yml) и в ней файл <command_name>.php со следующим содержимым:

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

<?php
namespace <ext_author>\<ext_name>\console\command;

use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;

/**
 * Example console command.
 */
class <command_name> extends \phpbb\console\command\command
{
	/** @var \phpbb\user */
	protected $user;

        /** @var string */
	protected $root_path;

	/**
	 * Параметры у конструктора должны совпадать со списком и порядком набора параметров в файле services.yml
	 * Обязательно надо вызвать parent::_constructor с параметром $user, остальные параметры сохраняем внутри класса
	 * 	 
	 *  @param \phpbb\user $user User instance (mostly for translation)
	 * @param string $phpbb_root_path
	 */
	public function __construct(\phpbb\user $user,  $phpbb_root_path)
    {
        parent::__construct($user);
        $this->root_path = $phpbb_root_path;
    }

	/**
	 * Настраиваем вызов команды. Можно прописать любое сочетание category:name 
	 */
	protected function configure()
	{
		$this->user->add_lang_ext('<ext_author>/<ext_name>', 'cli');
		$this
			->setName('<ext_author>:<command_name>')
			->setDescription($this->user->lang('CLI_DESCRIPTION'))
		;
	}

	/**
	 * Собственно сама функция которая выполняет команду. Поддерживает ввод и вывод данных.
	 *
	 * @param InputInterface  $input  An InputInterface instance
	 * @param OutputInterface $output An OutputInterface instance
	 */
	protected function execute(InputInterface $input, OutputInterface $output)
	{
		$output->writeln($this->user->lang('CLI_EXAMPLE_HELLO'));
	}
}

3. Добавляем языковой набор для нужных вам языков, если требуется. Для этого в папке /ext/<ext_author>/<ext_name>/language/<язык> создаём файл cli.php (в конфиге команды описывали, какой языковой набор использовать) со следующим содержимым:

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

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

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

$lang = array_merge($lang, array(
	'CLI_DESCRIPTION'			=> 'Console command',
	'CLI_EXAMPLE_HELLO'	=> 'Hello user',
));

4. В принципе всё, теперь можно запускать команду

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

php /bin/phpbbcli.php <ext_author>:<command_name>

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