Данные БД из расширения

Board index phpBBex 2.x Поддержка

Description: У вас проблемы с phpBBex 2.x и вам необходима помощь? Спрашивайте здесь!
Forum rules: Одна тема — один вопрос или группа связанных вопросов. Обязательно формируйте внятный заголовок, максимально отражающий суть вопроса. Подробно описывайте проблему. Не забудьте указать версию phpBBex и какие моды установлены, по возможности добавьте скриншоты проблемы или ссылку на страницу с проблемой.
Moderator: Поддержка

Post #1by vbnm » 28.07.2016, 22:14

Сори, туплю. Нек старые расширения, что работали в версии 2.0.1,- перестали пахать в 2.0.4.
Ну да лано, это решаемо.
Вопрос.
Нужно простое расширение с ед целью,- подсоединиться к БД и выдать сообщение об успехе, или же отказе. Пока все.
Там еще какие-то моветоны по работе с БД с помощью средств "Симфоне",- эт тож вопрос, но пока второстепенный.
Так что скиньте, если у кого есть, иль кто может через СТК быстренько сваять такое, буду признателен.
Last edited by vbnm on 29.07.2016, 03:06, edited 1 time in total.
vbnm
Topic author, Гуру
Reputation: 92
With us: 4 yaers 5 months

Post #2by Sumanai » 29.07.2016, 01:11

Соединение с БД уже есть, зачем ещё одно?
Использование поиска продлевает жизнь.
Это форум поддержки форка phpBBex. Поддержка по phpBB осуществляется в других местах.
Sumanai M
Гуру
Avatar
Reputation: 1581
With us: 4 yaers 6 months

Post #3by vbnm » 29.07.2016, 01:56

Sumanai wrote:Соединение с БД уже есть, зачем ещё одно?
мож. не правильно выразился
допустим мне нужно сначала:

Spoiler
Code: Select all
$link = mysql_connect('localhost', 'root', '');
if (!$link) {
    die('Could not connect: ' . mysql_error());
}
echo 'Ура successfully';


а затем:

Spoiler
Code: Select all
printf ("<br>");

mysql_select_db("phpbbex2.0.3",$link);
$result = mysql_query("SELECT * FROM phpbb_users, phpbb_posts",$link);

$myrow = mysql_fetch_array($result);

do
{
printf ("%s<br>%s<br><br>",$myrow['username'],$myrow['post_text']);

}
while ($myrow = mysql_fetch_array($result));



mysql_close($link);

вроде все перед глазами, а не догоняю
смотрю, как это делается в других расширениях и не врубаюсь
некоторые креативят доп. папки с доп файлами (Коо, Джоб), нек все прописывают в Ивент
все же разбросанно по файлам и в голове общей картинки не возникает, что и откуда береться и куда затем идет

Мне просто нужно понять на простом примере с нуля
Допустим задание:
- Вытащить из таблицы юзер все ники.

для того, чтобы затем пошагово лопатить те расширения, которые почему-то не пашут
а там все начинается с этого,- имеет ли расширение доступ к БД, а уж потом смотреть выборку данных
vbnm
Topic author, Гуру
Reputation: 92
With us: 4 yaers 5 months

Post #4by Sumanai » 29.07.2016, 02:01

Code: Select all
$result = mysql_query("SELECT * FROM phpbb_users, phpbb_posts",$link);
Во- первых, нужно добавить в зависимости БД, во- вторых, использовать стандартные команды для выборки.
Ещё раз- подключаться не нужно, выбирать БД не нужно, всё уже сделано.
vbnm wrote:все же разбросанно по файлам и в голове общей картинки не возникает, что и откуда берётся и куда затем идет
Прочти мануал с гуру.
vbnm wrote:для того, чтобы затем пошагово лопатить те расширения, которые почему-то не пашут
Всё должно работать. Какие расширения не работают?
Использование поиска продлевает жизнь.
Это форум поддержки форка phpBBex. Поддержка по phpBB осуществляется в других местах.
Sumanai M
Гуру
Avatar
Reputation: 1581
With us: 4 yaers 6 months

Post #5by vbnm » 29.07.2016, 02:11

Sumanai wrote:Во- первых, нужно добавить в зависимости БД, во- вторых, использовать стандартные команды для выборки.
Ещё раз- подключаться не нужно, выбирать БД не нужно, всё уже сделано.
это я понимаю, просто привел, как пример азов
так же понимаю, как работать с Ивентами в шаблонах ХТМЛ
но, как скажем, сделат выборку из БД,- тут затык на первом шаге,- проверит, имеет ли расширение доступ к БД
т.е попадаю ли я в БД из своего расширения

а не пашет:
"name": "ppk/bb3topics",
Spoiler
"type": "phpbb-extension",
"description": "Расширение добавляет возможность вывода новых тем, объявлений, голосований, просматриваемых, случайных, 'персональных', важных, прилепленных и популярных тем на страницах форума",
в 2.0.1 работает нормально, а в 2.0.4 нет.

Added after 2 minutes 30 seconds:
Вот это не понимаю,-
$this->auth = $auth;
$this->config = $config;
$this->db = $db;

вроде эти три параметра должны давать желаемое

Added after 2 minutes 13 seconds:
В стандартном расширении, кот-е делается средствами СТК нет подключения к БД
vbnm
Topic author, Гуру
Reputation: 92
With us: 4 yaers 5 months

Post #6by Sumanai » 29.07.2016, 02:50

vbnm wrote:,- проверит, имеет ли расширение доступ к БД
Не нужно. Если нет доступа к БД, до расширения дело не дойдёт, форум окочурится раньше.
vbnm wrote:вроде эти три параметра должны давать желаемое
В общем объяснение работы расширений- это отдельная статья, было бы время, написал бы.
В общем и целом зависимости прописываются в /config/services.yml в arguments:- этот файл с настройками поясняет, какие зависимости требуются каждому классу в расширении.
Нижеследующий код подключает только БД:
Code: Select all
services:
    vendor.extName.listener:
        class: vendor\extName\event\listener
        arguments:
            - @dbal.conn
        tags:
            - { name: event.listener }
Потом движок из этого файла вызывает нужные классы по наступившим событиям, например, /event/listener.php для событий движка или там крон. В конструктор этого класса передаются аргументы из services.yml, которые мы прописали. Необходимо получить эти аргументы и сохранить как переменные класса.
Нижеследующий код-пример для файла listener это делает:
Code: Select all
<?php

namespace vendor\extName\event;

class listener
{
    // Делаем переменную класса защищённым
    protected $db;

    // Конструктор, получающий ссылку на экземпляр класса БД
    public function __construct(
        \phpbb\db\driver\driver_interface $db
    ) {
        // Сохраняем полученный экземпляр в переменную класса
        $this->db = $db;
    }
Так же в listener в специальной функции прописывается, на какие события движка мы подписываемся. Движок будет вызывать наш класс по наступлению нужных нам событий.
Например, данный код скажет движку вызывать наш класс после вызова функции page_header
Code: Select all
    static public function getSubscribedEvents()
    {
        return array(
            'core.page_header_after'            => 'my_function',
        );
    }
Ну и само собой в классе listener должна существовать эта функция и быть доступной для вызова. Аргументом этой функции является массив $event с переменными движка, уникальные для каждого события. Их можно изменять, а можно и забить на них :smile:
Вот пример
Code: Select all
    public function my_function($event)
    {
        // Здесь доступна наша $this->db, с которой можно делать выборки с синтаксисом движка phpBB.

    }
Использование поиска продлевает жизнь.
Это форум поддержки форка phpBBex. Поддержка по phpBB осуществляется в других местах.
Sumanai M
Гуру
Avatar
Reputation: 1581
With us: 4 yaers 6 months

Post #7by vbnm » 29.07.2016, 02:58

Sumanai, попробую догнать днем, счас чет бошка со :sad: всем уже не варит :biggrin:

А статью,- да, тебе лучше написать и желательно с простыми примерами по поводу событий ядра.
С событиями в шаблоне, как-то все просто, обозвал файл событием и твори в нем все, что хошь )))
vbnm
Topic author, Гуру
Reputation: 92
With us: 4 yaers 5 months

Post #8by Sumanai » 29.07.2016, 03:00

vbnm wrote:а не пашет:
Ах да, оно работает. Просто там заумная настройка, так же нужно включить право доступа, в теме расширения у разработчика всё сказано:
http://www.ppkbb3cker.ru/viewtopic.php?f=67&t=3926
У меня на https://sumanai.ru/forum/ сейчас для зарегистрированных он должен работать.
Использование поиска продлевает жизнь.
Это форум поддержки форка phpBBex. Поддержка по phpBB осуществляется в других местах.
Sumanai M
Гуру
Avatar
Reputation: 1581
With us: 4 yaers 6 months

Post #9by vbnm » 29.07.2016, 03:04

Sumanai wrote:. Просто там заумная настройка, так же нужно включить право доступа, в теме расширения у разработчика всё сказано:
дык я не первый день его юзаю
даж пытаюсь перелопатить под свой стиль, но вот вышла затычка и подумал, что проще будет вытащить оттуль только нужное
а тут на-те, приходится с азов начинать и врубаться, как это все пашет

Added after 4 minutes 17 seconds:
вообще, как в анекдоте про ишака и обезъяну с этим переходом на Симфони:
- "процесс все тот же, только писанины стало больше" )))
vbnm
Topic author, Гуру
Reputation: 92
With us: 4 yaers 5 months

Post #10by Sumanai » 29.07.2016, 03:17

vbnm wrote:вообще, как в анекдоте про ишака и обезьяну с этим переходом на Симфони:
- "процесс все тот же, только писанины стало больше" )))
И безопаснее и более совместим и не требует правок в файлах.
Использование поиска продлевает жизнь.
Это форум поддержки форка phpBBex. Поддержка по phpBB осуществляется в других местах.
Sumanai M
Гуру
Avatar
Reputation: 1581
With us: 4 yaers 6 months

Post #11by vbnm » 02.08.2016, 09:05

Sumanai wrote:/event/listener.php для событий движка или там крон.
Так этот фаил отвечает только за Ивенты Ядра?
А Ивенты шаблона он не трогает.
vbnm
Topic author, Гуру
Reputation: 92
With us: 4 yaers 5 months

Post #12by Sumanai » 02.08.2016, 09:11

vbnm wrote:Так этот фаил отвечает только за Ивенты Ядра?
Да. Хотя конечно можно наворотить страшную структуру, но большинство располагает там события ядра.
vbnm wrote:А Ивенты шаблона он не трогает.
Он их может заполнять данными. То есть в шаблоне есть {MY_DATA}, а в листенёре определяется её содержимое
Code: Select all
$this->template->assign_vars(array(
   'MY_DATA'   => $my_data,
));
Использование поиска продлевает жизнь.
Это форум поддержки форка phpBBex. Поддержка по phpBB осуществляется в других местах.
Sumanai M
Гуру
Avatar
Reputation: 1581
With us: 4 yaers 6 months

Post #13by vbnm » 02.08.2016, 09:11

а сам
vbnm wrote:listener
при этом является еще и классом?

Added after 4 minutes 55 seconds:
Sumanai wrote:Он их может заполнять данными. То есть в шаблоне есть {MY_DATA}, а в листенёре определяется её содержимое
ну, это то логично, а то нафига все эти танцы под водой, шоп потом не было видно результатов)))
с помощью Лиснера мы проводом операции внутри ядра, а потом выводим через ентот мостик в шаблон, если данные нам нужны публично
vbnm
Topic author, Гуру
Reputation: 92
With us: 4 yaers 5 months

Post #14by Sumanai » 02.08.2016, 09:25

vbnm wrote:при этом является ещё и классом?
Да, это класс, на что как бы намекает его шапка. Впрочем, в 3.1 почти все файлы php являются классами в своих пространствах имён, только разве что переводы являются plain php.
vbnm wrote:с помощью Лиснера мы проводом операции внутри ядра, а потом выводим через ентот мостик в шаблон, если данные нам нужны публично
Ага. Но это когда нужны свои данные на страницах форума.
Если нужна своя страница, то делают контролёр, который запускается на отдельной странице (цах).
Использование поиска продлевает жизнь.
Это форум поддержки форка phpBBex. Поддержка по phpBB осуществляется в других местах.
Sumanai M
Гуру
Avatar
Reputation: 1581
With us: 4 yaers 6 months

Post #15by vbnm » 02.08.2016, 12:43

угум, надо докумекать, от простого к сложному
создам простое расширение с привязкой с событием в шаблоне, потом попробую закинуть в него данные из лиснера
в виде простой переменной, потом уже моно разбираться с событиями ядра
надеюсь тут не обязательно должен быть массив
Sumanai wrote:array(
'MY_DATA'
vbnm
Topic author, Гуру
Reputation: 92
With us: 4 yaers 5 months

Post #16by Sumanai » 02.08.2016, 13:18

vbnm wrote:надеюсь тут не обязательно должен быть массив
Можно использовать любые поддерживаемые движком способы задания переменных шаблона.
Использование поиска продлевает жизнь.
Это форум поддержки форка phpBBex. Поддержка по phpBB осуществляется в других местах.
Sumanai M
Гуру
Avatar
Reputation: 1581
With us: 4 yaers 6 months

Post #17by vbnm » 02.08.2016, 14:14

не вышло, че-то опят не догоняю
создал расширение
задал событие в шаблоне "overall_header_navbar_before" с созданием файла
все норм, работает
а вот с лиснера ниче не могу туда закинуть

Added after 6 minutes 53 seconds:
Sumanai wrote:$this->template->assign_vars(array(
   'MY_DATA'   => $my_data,
));
такс, вот это обязательно быть внутри функции?
типо:
Code: Select all
public function ляляля()
{
$this->template->assign_vars(array(
   'MY_DATA'   => $my_data,
));
}

Added after 14 minutes 59 seconds:
Sumanai, может покажешь
вот мой Лиснер сейчас
Spoiler
Code: Select all
<?php
/**
*
* @package phpBB Extension - qwer
* @copyright (c) 2016 vbnmD
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
*
*/
namespace vbnm\mycql\event;

use Symfony\Component\EventDispatcher\EventSubscriberInterface;

/**
* Event listener
*/
class listener implements EventSubscriberInterface
{
/**
* Assign functions defined in this class to event listeners in the core
*
* @return array
* @static
* @access public
*/
   static public function getSubscribedEvents()
   {
      return array(
      );
   }

   /** @var \phpbb\template\template */
   protected $template;

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

   /**
   * Constructor
   */
   public function __construct($phpbb_root_path, \phpbb\template\template $template)
   {
      $this->phpbb_root_path = $phpbb_root_path;
      $this->template = $template;
   }
}

что и где в нем писать, чтобы затем вывести через overall_header_navbar_before, ну скажем "Привет!"
?
vbnm
Topic author, Гуру
Reputation: 92
With us: 4 yaers 5 months

Post #18by Sumanai » 02.08.2016, 14:46

vbnm wrote:такс, вот это обязательно быть внутри функции?
А как ещё?
Нужна функция, подписанное на какое- нибудь событие.
vbnm wrote:что и где в нем писать, чтобы затем вывести через overall_header_navbar_before, ну скажем "Привет!"
Нужны ещё файлы конфига для подключение зависимости шаблона.
Проще сгененировать каркас.
Использование поиска продлевает жизнь.
Это форум поддержки форка phpBBex. Поддержка по phpBB осуществляется в других местах.
Sumanai M
Гуру
Avatar
Reputation: 1581
With us: 4 yaers 6 months

Post #19by vbnm » 02.08.2016, 14:56

Sumanai wrote:Проще сгенерировать каркас
ну так вроде через СТК все это и делается?
Я это сделал, могу просто сюда в файлы запилит все расширение
Attachments
vbnm.zip
Скелет
(3.18 KiB) Downloaded 72 times
vbnm
Topic author, Гуру
Reputation: 92
With us: 4 yaers 5 months

Post #20by Sumanai » 02.08.2016, 15:06

vbnm wrote:ну так вроде через СТК все это и делается?
Там по моему настроек меньше.
vbnm wrote:Я это сделал, могу просто сюда в файлы запилит все расширение
Конфиги не соответствуют слушателю. Зачем так сделал?
Использование поиска продлевает жизнь.
Это форум поддержки форка phpBBex. Поддержка по phpBB осуществляется в других местах.
Sumanai M
Гуру
Avatar
Reputation: 1581
With us: 4 yaers 6 months

Next

Return to Поддержка