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

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

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

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

Сообщение Алг »

rxu писал(а):С админскими модулями так не выйдет. Надо подключать файл с классом и инициализироаать его объект стандартным способом.
где и как подключить?

Добавлено спустя 3 минуты 3 секунды:
Я пробовала так

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

        include_once($this->phpbb_root_path .  'includes/acp/acp_forums.' . $this->php_ext);
		$errors = update_forum_data($forum_data);
но получаю ошибку, то функция update_forum_data неизвестна
Через контейнер тоже не получилось
Там упёртость и инертность, могут, кстати, в морду дать.
А ты проявляй интеллигентность, постарайся убеждать...

Т. Шаов
Аватара пользователя
Sheer
Former team member
Сообщения: 12113
Стаж: 18 лет 2 месяца
Откуда: Калининград не Кенигсберг
Благодарил (а): 36 раз
Поблагодарили: 1526 раз

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

Сообщение Sheer »

Ну примерно так
services.yml

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

services:
    sheer.callsign.admin.controller:
        class: sheer\callsign\controller\admin_controller
        arguments:
            - @controller.helper
            - @dbal.conn
            - @request
            - @template
            - @user
            - @service_container
            - @dispatcher
            - @config
            - @notification_manager
            - %core.root_path%
            - %core.php_ext%

    sheer.callsign.listener:
        class: sheer\callsign\event\listener
        arguments:
            - @auth
            - @controller.helper
            - @template
            - @user
            - @dbal.conn
            - %core.root_path%
            - %core.php_ext%
        tags:
            - { name: event.listener }
Контроллер тут должен объявляться до перехватчика.

В папке controller файл admin_controller.php

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

...
namespace sheer\callsign\controller;
use Symfony\Component\DependencyInjection\ContainerInterface;

class admin_controller
{
...
}
В acp модуль

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

...
namespace sheer\callsign\acp;

class main_module
{
	function main($id, $mode)
	{
		global $db, $user, $config, $template, $request, $cache, $phpbb_container, $table_prefix, $phpbb_root_path, $phpEx, $phpbb_log;

		$admin_controller = $phpbb_container->get('sheer.callsign.admin.controller');
// Вызов функции из контроллера
   $error = $admin_controller->check_request($callsign);
...
}
В admin_controller.php набор необходимых функций.
Изображение
Общие ошибки новичков (07.11.2005) & Как задавать вопросы
Мини FAQ
Если ничто другое не помогает, прочтите, наконец, инструкцию!
"Никакая инструкция не может перечислить всех обязанностей должностного лица, предусмотреть все отдельные случаи и дать вперёд соответствующие указания, а поэтому господа инженеры должны проявить инициативу и, руководствуясь знаниями своей специальности и пользой дела, принять все усилия для оправдания своего назначения".
Циркуляр Морского технического комитета №15 от 29.11.1910 г.
Аватара пользователя
Алг
Former team member
Сообщения: 933
Стаж: 12 лет 8 месяцев
Откуда: Израиль
Благодарил (а): 72 раза
Поблагодарили: 248 раз

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

Сообщение Алг »

Sheer писал(а):В admin_controller.php набор необходимых функций.
вот на них и остановимся. Как из admin_controller обратиться к классу из файла includes/acp/acp_forums.php и получить набор его методов?
Там упёртость и инертность, могут, кстати, в морду дать.
А ты проявляй интеллигентность, постарайся убеждать...

Т. Шаов
Аватара пользователя
Sheer
Former team member
Сообщения: 12113
Стаж: 18 лет 2 месяца
Откуда: Калининград не Кенигсберг
Благодарил (а): 36 раз
Поблагодарили: 1526 раз

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

Сообщение Sheer »

Эммм... наверное через function __construct
Изображение
Общие ошибки новичков (07.11.2005) & Как задавать вопросы
Мини FAQ
Если ничто другое не помогает, прочтите, наконец, инструкцию!
"Никакая инструкция не может перечислить всех обязанностей должностного лица, предусмотреть все отдельные случаи и дать вперёд соответствующие указания, а поэтому господа инженеры должны проявить инициативу и, руководствуясь знаниями своей специальности и пользой дела, принять все усилия для оправдания своего назначения".
Циркуляр Морского технического комитета №15 от 29.11.1910 г.
Аватара пользователя
Алг
Former team member
Сообщения: 933
Стаж: 12 лет 8 месяцев
Откуда: Израиль
Благодарил (а): 72 раза
Поблагодарили: 248 раз

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

Сообщение Алг »

а нету :(
Често говоря, я сделала так ( через голову)
Скопировала includes/acp/acp_forums.php в свой экст, изменила namespace, добавила construct и пользуюсь.
Но хотелось бы сделать "по уму"
Там упёртость и инертность, могут, кстати, в морду дать.
А ты проявляй интеллигентность, постарайся убеждать...

Т. Шаов
Аватара пользователя
Sheer
Former team member
Сообщения: 12113
Стаж: 18 лет 2 месяца
Откуда: Калининград не Кенигсберг
Благодарил (а): 36 раз
Поблагодарили: 1526 раз

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

Сообщение Sheer »

А... это из контроллера надо вызвать функцию.
Вот тут https://github.com/AlexSheer/phpbb3.1-Knowledge-Base
в папке inc есть файлик с набором функций, которые доступны из контроллера. Сделай по аналогии

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

public function __construct(\phpbb\config\config $config, \phpbb\request\request_interface $request, \phpbb\db\driver\driver_interface $db, \phpbb\auth\auth $auth, \phpbb\template\template $template, \phpbb\user $user, \phpbb\cache\service $cache, \phpbb\pagination $pagination, $phpbb_root_path, $php_ext, $table_prefix, \Sheer\knowlegebase\inc\functions_kb $kb)
	{
		$this->config = $config;
		$this->request = $request;
		$this->db = $db;
		$this->auth = $auth;
		$this->template = $template;
		$this->user = $user;
		$this->phpbb_cache = $cache;
		$this->pagination = $pagination;
		$this->phpbb_root_path = $phpbb_root_path;
		$this->php_ext = $php_ext;
		$this->table_prefix = $table_prefix;
		$this->kb = $kb;
	}

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

// вызов
$kb_search = $this->kb->setup_kb_search();
Изображение
Общие ошибки новичков (07.11.2005) & Как задавать вопросы
Мини FAQ
Если ничто другое не помогает, прочтите, наконец, инструкцию!
"Никакая инструкция не может перечислить всех обязанностей должностного лица, предусмотреть все отдельные случаи и дать вперёд соответствующие указания, а поэтому господа инженеры должны проявить инициативу и, руководствуясь знаниями своей специальности и пользой дела, принять все усилия для оправдания своего назначения".
Циркуляр Морского технического комитета №15 от 29.11.1910 г.
Аватара пользователя
rxu
phpBB Guru
phpBB Guru
Сообщения: 16947
Стаж: 18 лет 11 месяцев
Откуда: Красноярск
Благодарил (а): 549 раз
Поблагодарили: 1700 раз

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

Сообщение rxu »

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

$f = new \acp_forums();
И потом через объект $f юзаем его функции.
Изображение
Аватара пользователя
Алг
Former team member
Сообщения: 933
Стаж: 12 лет 8 месяцев
Откуда: Израиль
Благодарил (а): 72 раза
Поблагодарили: 248 раз

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

Сообщение Алг »

о, это то, что мне не хватало. я к этому new приставляла $this->phpbb_root_path или "./" или "../" в общем во всех вариантах. Решение оказалось ещё проще
Там упёртость и инертность, могут, кстати, в морду дать.
А ты проявляй интеллигентность, постарайся убеждать...

Т. Шаов
UncleAndy
phpBB 1.4.1
Сообщения: 44
Стаж: 10 лет 2 месяца
Благодарил (а): 7 раз

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

Сообщение UncleAndy »

Сразу извиняюсь за глупый вопрос, но ответ я не смог найти самостоятельно. :(

Как мне внутри контроллера можно получить базовый URL для пути форума? Т.е. типа "http://domain.ru/phpBB/".
Аватара пользователя
Sheer
Former team member
Сообщения: 12113
Стаж: 18 лет 2 месяца
Откуда: Калининград не Кенигсберг
Благодарил (а): 36 раз
Поблагодарили: 1526 раз

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

Сообщение Sheer »

Есть встроенная функция generate_board_url()

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

$base_url = generate_board_url();
Изображение
Общие ошибки новичков (07.11.2005) & Как задавать вопросы
Мини FAQ
Если ничто другое не помогает, прочтите, наконец, инструкцию!
"Никакая инструкция не может перечислить всех обязанностей должностного лица, предусмотреть все отдельные случаи и дать вперёд соответствующие указания, а поэтому господа инженеры должны проявить инициативу и, руководствуясь знаниями своей специальности и пользой дела, принять все усилия для оправдания своего назначения".
Циркуляр Морского технического комитета №15 от 29.11.1910 г.
UncleAndy
phpBB 1.4.1
Сообщения: 44
Стаж: 10 лет 2 месяца
Благодарил (а): 7 раз

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

Сообщение UncleAndy »

Еще один глупый вопрос. :(

Перерыл все API работы с БД, но не понял как можно сделать SQL запрос с биндингом параметров? Т.е. не подставляя значения прямо в SQL запрос, а именно передавая их как параметры.
Аватара пользователя
rxu
phpBB Guru
phpBB Guru
Сообщения: 16947
Стаж: 18 лет 11 месяцев
Откуда: Красноярск
Благодарил (а): 549 раз
Поблагодарили: 1700 раз

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

Сообщение rxu »

Как параметры через POST или GET?
Изображение
Аватара пользователя
Алг
Former team member
Сообщения: 933
Стаж: 12 лет 8 месяцев
Откуда: Израиль
Благодарил (а): 72 раза
Поблагодарили: 248 раз

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

Сообщение Алг »

собрать все параметры в ассоциативный массив и применить ф-цию db->sql_build_array
Там упёртость и инертность, могут, кстати, в морду дать.
А ты проявляй интеллигентность, постарайся убеждать...

Т. Шаов
UncleAndy
phpBB 1.4.1
Сообщения: 44
Стаж: 10 лет 2 месяца
Благодарил (а): 7 раз

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

Сообщение UncleAndy »

собрать все параметры в ассоциативный массив и применить ф-цию db->sql_build_array
Однако, это будет не биндинг, а именно подстановка значений в SQL запрос. При биндинге сам запрос и значения параметров отправляются SQL серверу отдельно друг от друга.

Например (perl):
$c = $dbh->prepare('SELECT * FROM table1 WHERE id = ?');
$c->execute($id);
Аватара пользователя
rxu
phpBB Guru
phpBB Guru
Сообщения: 16947
Стаж: 18 лет 11 месяцев
Откуда: Красноярск
Благодарил (а): 549 раз
Поблагодарили: 1700 раз

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

Сообщение rxu »

UncleAndy
Сейчас интерфейса в phpBB для биндинга переменных нет. В чем существенное преимущество и почему не использовать обычные запросы?
Изображение

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