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

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

Ваш вопрос может быть удален без объяснения причин, если на него есть ответы по приведённым ссылкам (а вы рискуете получить предупреждение ;) ).
Аватара пользователя
Татьяна5
Поддержка
Поддержка
Сообщения: 12752
Стаж: 13 лет 8 месяцев
Благодарил (а): 159 раз
Поблагодарили: 2276 раз

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

Сообщение Татьяна5 »

seodirection, в методе getSubscribedEvents() надо подписаться на существующее событие. События U_CANONICAL нет.
Список событий. Файлы, где находятся события, там указаны, а где именно они (события) расположены, можно посмотреть в коде phpBB

Добавлено спустя 1 минуту 6 секунд:
Борис Бердичевский писал(а):лень было добавить
Статус расширений [DEV], в разработке, там ещё не до описаний
Аватара пользователя
rxu
phpBB Guru
phpBB Guru
Сообщения: 16947
Стаж: 18 лет 11 месяцев
Откуда: Красноярск
Благодарил (а): 549 раз
Поблагодарили: 1700 раз

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

Сообщение rxu »

Борис Бердичевский писал(а):"<Краткое описание расширения, можно на русском>",
Краткое описание расширения - нельзя на русском.
Борис Бердичевский писал(а):Я вижу, господам-разработчикам расширений лень было
Это жесткую отповедь вы нам дали. Обязуемся впредь исправиться. Кто провинился?
Изображение
Аватара пользователя
Борис Бердичевский
phpBB 3.0.0 RC1
Сообщения: 1457
Стаж: 17 лет 4 месяца
Откуда: Израиль, Беэр-Шева
Благодарил (а): 28 раз
Поблагодарили: 53 раза

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

Сообщение Борис Бердичевский »

Ну, по-русски можно, потому что нормально показывает русский, в Информации. Если, конечно, распространяете по всему миру, то придется по-англицки! :)
- Все расширения, что я установил: QuickReply и Profile side switcher (ну, Татьяна5 уже поняла!), Board Rules.
После нескольких лет общения здесь и техсопровождения форумов я наконец понял, что ничего не понимаю в phpBB!
Аватара пользователя
Webliberty
phpBB 2.0.5
Сообщения: 473
Стаж: 13 лет 4 месяца
Благодарил (а): 109 раз
Поблагодарили: 47 раз

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

Сообщение Webliberty »

Татьяна5, получается что если нет события, то ничего и не сделать? Можно как-то по другому заменить эту строку на свою?
Начинал с phpBB 3.0.9, закончил на phpBB 3.3.11 и продал форум...
Подпись заверена нотариусом :P
Аватара пользователя
Татьяна5
Поддержка
Поддержка
Сообщения: 12752
Стаж: 13 лет 8 месяцев
Благодарил (а): 159 раз
Поблагодарили: 2276 раз

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

Сообщение Татьяна5 »

Менять строки вообще не надо. Надо переопределять переменные.

Если вызвать код

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

$template->assign_vars(array(
    'MY_VARIABLE' => 1,
));
, а после него

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

$template->assign_vars(array(
    'MY_VARIABLE' => 2,
));
, то в шаблон выведется 2
Anvar
Former team member
Сообщения: 1965
Стаж: 15 лет 1 месяц
Благодарил (а): 57 раз
Поблагодарили: 622 раза

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

Сообщение Anvar »

seodirection, Есть событие в includes/functions.php core.page_header_after

Файл папка_моих_расширений/папка_с_расширением/event/listener.php

Пример содержимого:

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

<?php

namespace папка_моих_расширений\папка_с_расширением\event;

use Symfony\Component\EventDispatcher\EventSubscriberInterface;

class listener implements EventSubscriberInterface
{
	protected $template;

	public function __construct(\phpbb\template\template $template)
	{
		$this->template = $template;
	}

	static public function getSubscribedEvents()
	{
		return array(
			'core.page_header_after' => 'header_after', // К событию вешаем функцию
		);
	}

	public function header_after($event) // Функция в которой работаем как обычно в php
	{
		$this->template->assign_var('U_CANONICAL', 'http://yandex.ru');
	}

}
?>
Помимо прочего файл папка_моих_расширений/папка_расширения/config/services.yml должен быть такого содержания:

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

services:
    папка_моих_расширений.папка_расширения.listener:
        class: папка_моих_расширений\папка_расширения\event\listener
        arguments:
            - @template
        tags:
            - { name: event.listener }
А что-бы расширение было обнаружено в админке нужен файл композитор))))
папка_моих_расширений/папка_с_расширением/composer.json 

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

{
    "name": "папка_моих_расширений/папка_с_расширением",
    "type": "phpbb-extension",
    "description": "",
    "homepage": "http://phpbbguru.net",
    "version": "1.0.0",
    "time": "2014-10-31", // Время и место
    "license": "GPL-2.0",
    "authors": [
        {
            "name": "DED Morozz",
            "homepage": "http://phpbbguru.net",
            "role": "Developer"
        }
    ],
    "require": {
        "php": ">=5.3.3"
    },
    "extra": {
        "display-name": "Yandex Canonical",
        "soft-require": {
		    "phpbb/phpbb": "3.1.*@dev"
        }
    }
}
Аватара пользователя
Webliberty
phpBB 2.0.5
Сообщения: 473
Стаж: 13 лет 4 месяца
Благодарил (а): 109 раз
Поблагодарили: 47 раз

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

Сообщение Webliberty »

Там где "Функция в которой работаем как обычно в php" вместо яндекса вставил тот код, который в viewtopic.php и получил ошибку:

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

[phpBB Debug] PHP Notice: in file [ROOT]/ext/Webliberty/Canonical/event/listener.php on line 25: Undefined variable: template
Использую такой код:

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

public function header_after($event) // Функция в которой работаем как обычно в php
	{
		$this->$template->assign_vars(array(
	'U_CANONICAL'			=> generate_board_url() . '/' . append_sid("viewtopic.$phpEx", "t=$topic_id" . ((strlen($u_sort_param)) ? "&$u_sort_param" : '') . (($start) ? "&start=$start" : ''), true, '')
));
	}
А если оставить тот вариант как вы предложили, то работает, в исходном коде указана ссылка на яндекс в качестве канонической.
Начинал с phpBB 3.0.9, закончил на phpBB 3.3.11 и продал форум...
Подпись заверена нотариусом :P
Anvar
Former team member
Сообщения: 1965
Стаж: 15 лет 1 месяц
Благодарил (а): 57 раз
Поблагодарили: 622 раза

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

Сообщение Anvar »

Ну Яндекс надо уважать!


$this->$template заменить на $this->template

$phpEx $topic_id $u_sort_param $start - данные переменные не определены.

Вообще канонические ссылки надо выводить индивидуально, в темах и форуме, используя события имеющиеся там.

В viewtopic.php есть три события которые подойдут для модификации канонических ссылок:
core.viewtopic_get_post_data core.viewtopic_modify_post_data core.viewtopic_modify_page_title
Последний раз редактировалось Anvar 31.10.2014 21:50, всего редактировалось 1 раз.
Аватара пользователя
Webliberty
phpBB 2.0.5
Сообщения: 473
Стаж: 13 лет 4 месяца
Благодарил (а): 109 раз
Поблагодарили: 47 раз

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

Сообщение Webliberty »

Как не определены, в общем то шаблоне же они есть

Добавлено спустя 15 минут 8 секунд:
Вообщем название темы "Расширения - это просто!" выбрано не правильно. Это очень сложно и непонятно. Получилось сделать небольшое расширение с использованием Template Events, а с PHP Events ничего не получается.
Начинал с phpBB 3.0.9, закончил на phpBB 3.3.11 и продал форум...
Подпись заверена нотариусом :P
Anvar
Former team member
Сообщения: 1965
Стаж: 15 лет 1 месяц
Благодарил (а): 57 раз
Поблагодарили: 622 раза

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

Сообщение Anvar »

seodirection, Честно сказать я уже не знаю что на это ответить. Подождём специалистов)))

Добавлено спустя 37 секунд:
Или чего ждать, попробуем так: Область видимости переменных php
Аватара пользователя
Webliberty
phpBB 2.0.5
Сообщения: 473
Стаж: 13 лет 4 месяца
Благодарил (а): 109 раз
Поблагодарили: 47 раз

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

Сообщение Webliberty »

Согласен. Надеюсь, найдутся специалисты которые смогут конвертировать простой мод в расширение. В моде пара строк, а пытаешься сделать расширение - одни непонятки.

Авторам расширений придется туго, а нам, обычным владельцам форумов, придется только ждать.
Начинал с phpBB 3.0.9, закончил на phpBB 3.3.11 и продал форум...
Подпись заверена нотариусом :P
Anvar
Former team member
Сообщения: 1965
Стаж: 15 лет 1 месяц
Благодарил (а): 57 раз
Поблагодарили: 622 раза

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

Сообщение Anvar »

seodirection, Судя по тому как активно начали делать расширения, туго приходится разработчикам phpBB с добавлением событий..

Возникают некоторые трудности с модификацией движка, но трудности потому что приходится думать как выкрутится с помощью событий которые находятся не там где хотелось бы. Есть ещё нюансы с шаблонами, так как вырезать часть кода не представляется возможным, а display: none; только утяжеляет код.
Аватара пользователя
Webliberty
phpBB 2.0.5
Сообщения: 473
Стаж: 13 лет 4 месяца
Благодарил (а): 109 раз
Поблагодарили: 47 раз

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

Сообщение Webliberty »

Шаблон я как раз не боюсь править, что не нужно - удаляю и все, а вот вносить изменения в файлы движка - этого хотелось бы избежать.

Добавлено спустя 5 минут 12 секунд:
Anvar писал(а):Или чего ждать, попробуем так: Область видимости переменных php
вот посмотрел одну из статей и почитал про Доступ к глобальным переменным внутри функции:

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

function myFunction() {
  global $globalVariable;
}
Попробовал сделать так, чтобы не переопределять переменную $phpEx

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

function myFunction() {
global $phpEx;
}
Если в движке уже есть $phpEx зачем ее еще раз писать в расширении, этим кодом делаем эту функцию глобальной и ее можно использовать внутри нашего кода расширения. Это по моей логике, но в итоге - опять белый экран)))
Начинал с phpBB 3.0.9, закончил на phpBB 3.3.11 и продал форум...
Подпись заверена нотариусом :P
Аватара пользователя
Sheer
Former team member
Сообщения: 12113
Стаж: 18 лет 2 месяца
Откуда: Калининград не Кенигсберг
Благодарил (а): 36 раз
Поблагодарили: 1526 раз

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

Сообщение Sheer »

$phpEx нужно передавать в списке аргументов в конструкторе как $php_ext, затем объявить ее там

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

		$this->php_ext = $php_ext;
и поместить в список аргументов в services.yml

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

            - %core.php_ext%
Добавлено спустя 1 минуту 28 секунд:
Погодьте, вот сочиню статью Создание произвольной страницы в стиле конференции phpBB 3.1

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

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

Сообщение Webliberty »

Sheer писал(а):и править его не надо.
В HTML и CSS я разбираюсь нормально, поэтому и правлю не боясь, в любой момент все можно переписать. А тут уже программирование, а я не программист, поэтому что-то пытаюсь сделать своими силами, но не всегда выходит.
Sheer писал(а):$phpEx нужно передавать в списке аргументов в конструкторе как $php_ext, затем объявить ее там
Попробовал, теперь ошибка еще одна добавилась, мол функция $php_ext не определена.
Начинал с phpBB 3.0.9, закончил на phpBB 3.3.11 и продал форум...
Подпись заверена нотариусом :P

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