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

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

Ваш вопрос может быть удален без объяснения причин, если на него есть ответы по приведённым ссылкам (а вы рискуете получить предупреждение ;) ).
Аватара пользователя
ВладимирТ
phpBB 2.0.4
Сообщения: 421
Стаж: 14 лет 10 месяцев
Откуда: Москва
Благодарил (а): 14 раз
Поблагодарили: 23 раза

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

Сообщение ВладимирТ »

Sheer писал(а):Погодьте, вот сочиню статью Создание произвольной страницы в стиле конференции phpBB 3.1
Великое дело! Поможет многим справится на первых порах.
Sheer писал(а):и править его не надо.
Надо, но свой.
На вкус и цвет - разный CSS
Аватара пользователя
Webliberty
phpBB 2.0.5
Сообщения: 473
Стаж: 13 лет 4 месяца
Благодарил (а): 109 раз
Поблагодарили: 47 раз

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

Сообщение Webliberty »

Так и делаю, правлю свой на основе prosilver. Если под каждую мелочь писать такие сложные расширения - с ума сойти можно

Добавлено спустя 27 минут 4 секунды:
Вообще то заменил пропущенное $phpEx на $this->php_ext в коде и ошибка пропала!

Sheer, где вы берете что чему соответствует? Например это:
Sheer писал(а):$phpEx нужно передавать в списке аргументов в конструкторе как $php_ext, затем объявить ее там
Должно же оно быть задокументировано где-то? Еще вот такие переменные в моем коде тоже не определены:
Undefined variable: forum_id
Undefined variable: topic_id
Undefined variable: u_sort_param
Undefined variable: start
Откуда их можно подцепить?
Начинал с phpBB 3.0.9, закончил на phpBB 3.3.11 и продал форум...
Подпись заверена нотариусом :P
Аватара пользователя
Sheer
Former team member
Сообщения: 12113
Стаж: 18 лет 2 месяца
Откуда: Калининград не Кенигсберг
Благодарил (а): 36 раз
Поблагодарили: 1526 раз

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

Сообщение Sheer »

seodirection писал(а):Должно же оно быть задокументировано где-то?
Пока все сильно размазано и даже на areа51 толком ничего нет.
Но обязательно будет (их бин так думать)
seodirection писал(а):Откуда их можно подцепить?
надо передать в функцию.

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

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

Сообщение Webliberty »

Получилось! Добавил глобальные переменные как в примере по ссылке:

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

global $forum_id, $template, $topic_id, $phpEx, $u_sort_param, $start;
и ошибки пропали, канонические адреса работают. Но есть одно но. Для viewtopic они одни, а для viewforum - другие. Можно как-то разнести эти два направления? Существуют ли условия наподобие:

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

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

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

Сообщение Anvar »

seodirection, Для этого используй события той страницы на которой хочешь изменить канонические ссылки.
Shredder
Former team member
Сообщения: 2233
Стаж: 16 лет 4 месяца
Благодарил (а): 142 раза
Поблагодарили: 140 раз

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

Сообщение Shredder »

Существует ли способ вмешаться в работу, ну скажем файла assets/javascript/plupload.js , и изменить одну из содержащихся там функций? На ум приходит подключение отредактированной функции через свой файл, чтобы вызвать её после оригинальной и таким образом переопределить, но не знаю, насколько эта идея работоспособна.
Аватара пользователя
rxu
phpBB Guru
phpBB Guru
Сообщения: 16947
Стаж: 18 лет 11 месяцев
Откуда: Красноярск
Благодарил (а): 549 раз
Поблагодарили: 1700 раз

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

Сообщение rxu »

По поводу того, где что брать. Все доступные в phpBB сервисы можно найти в корневой папке /config в файлах *.yml.
Изображение
Аватара пользователя
Татьяна5
Поддержка
Поддержка
Сообщения: 12752
Стаж: 13 лет 8 месяцев
Благодарил (а): 159 раз
Поблагодарили: 2276 раз

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

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

seodirection писал(а):Добавил глобальные переменные
Оперативной памяти не хватит, если везде глобальные добавлять. Или хватит, но форум начнёт жутко тормозить.
Переменные надо брать из событий.

Для начала выбрать подходящее событие именно в том файле, в котором должен работать код
core.page_header_after - не подходит, из него код будет работать везде, а этого не надо
Подходят события из viewtopic.php
Anvar писал(а):core.viewtopic_get_post_data core.viewtopic_modify_post_data core.viewtopic_modify_page_title
Далее смотрим какие переменные нужны в коде. Это forum_id, topic_id, u_sort_param, start. Ищем среди 3-х событий то, где все эти переменные есть.
Беру первое - core.viewtopic_get_post_data. Переменные forum_id, topic_id, start там есть, а u_sort_param можно попробовать получить через sort_days, sort_dir, sort_key (или, как вариант, объявить только её глобальной и посмотреть как это будет работать)
Те переменные, которые есть в событии, получаем в методе так:

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

$forum_id = $event['forum_id'];
$topic_id = $event['topic_id'];
$start = $event['start'];
Аватара пользователя
c61
phpBB 2.0.6
Сообщения: 506
Стаж: 12 лет 4 месяца
Благодарил (а): 20 раз
Поблагодарили: 81 раз

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

Сообщение c61 »

rxu, добавьте, пожалуйста, в информацию по разработке расширений способ "как получить переменные из $template" (или назовите как-то иначе). Пригодится разработчикам расширений. Текст:

Для того, чтобы в обработчике событий получить значения переменных из $template, можно воспользоваться следующим способом (ниже - пример):

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

	public function my_event($event) {
		global $phpbb_container;
		$context = $phpbb_container->get('template_context');
		$rootref = &$context->get_root_ref();
		$tpldata = &$context->get_data_ref();
		// Выполнен вход ?
		if ( $rootref["S_USER_LOGGED_IN"] ) {
			// Есть viewtopic ?
			if (isset($tpldata['postrow'])) {
				foreach ($tpldata['postrow'] as $index => &$postrow) {
					// что-то сделать, например, добавить пару слов в сообщение
					$postrow['MESSAGE'] .= '<br /><br />Hello, '.$rootref["S_USERNAME"].' !';
				}
			}
		}
	}
Разумеется, данный код будет работать, если уже существуют требуемые переменные, например, в событии для футера

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

			'core.page_footer_after'	=> 'my_event',
Аналогичным способом можно "добраться" практически до любой переменной...
Аватара пользователя
Webliberty
phpBB 2.0.5
Сообщения: 473
Стаж: 13 лет 4 месяца
Благодарил (а): 109 раз
Поблагодарили: 47 раз

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

Сообщение Webliberty »

Посоветуйте, пожалуйста, какое событие взять для страницы с форумной категорией? Если страница форума viewforum.php, то взял событие core.viewforum_get_topic_data - работает.

По идее для категорий тот же файл используется viewforum.php но данные на странице категории не выводятся, видимо нужно другое событие, но подходящего не нахожу. Попробовал core.display_forums_modify_category_template_vars - не получается.

Добавлено спустя 1 час 22 минуты 41 секунду:
Вроде получилось, что хотел сделать, а именно:
  • Заменить канонические страницы для топиков с вида viewtopic.php?t=697 (такие страницы по-умолчанию назначает phpBB с версии 3.1) на viewtopic.php?f=7&t=697 (ранее такие страницы назначались каноническими модом Canonical URL т.к. в движке ветки 3.0 rel="canonical" не было). До тех пор, пока в адресной строке url топика содержит параметр f на мой взгляд целесообразнее считать каноническими страницы именно с f, иначе все внешние ссылки, будут вести на неканонические страницы.
  • Добавить rel="canonical" на главную страницу форума. Странно, что в phpBB 3.1 не сделали этого. Для топиков и форумов добавили, а главную страницу забыли.
  • Также переопределил канонические страницы для форумов, пример: viewforum.php?f=2. Можно было и не делать этого, так как адреса не отличаются от тех, что предлагал мод Canonical URL, но я преследовал другую цель - добавить rel="canonical" для форумных категорий - по-умолчанию их нет в phpBB 3.1, так же как и для главной. Но в итоге для категорий по-прежнему не работает.
Для viewtopic.php назначил переменные по совету Татьяны, для viewforum.php их в событии нет, поэтому сделал глобальными. В общем и целом удалось получить то, что мне требовалось. Оформил в виде расширения, прикреплю файл к сообщению, может еще кому пригодится :) Большое спасибо всем, кто помогал, предлагал варианты, давал советы!
Canonical URL.zip
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Последний раз редактировалось Webliberty 01.11.2014 17:34, всего редактировалось 3 раза.
Начинал с phpBB 3.0.9, закончил на phpBB 3.3.11 и продал форум...
Подпись заверена нотариусом :P
Аватара пользователя
xisp
phpBB 3.0.0 RC7
Сообщения: 1798
Стаж: 12 лет 11 месяцев
Благодарил (а): 97 раз
Поблагодарили: 91 раз
Забанен: Бессрочно

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

Сообщение xisp »

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

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

Сообщение Webliberty »

xisp, заменил в архиве
Начинал с phpBB 3.0.9, закончил на phpBB 3.3.11 и продал форум...
Подпись заверена нотариусом :P
Shredder
Former team member
Сообщения: 2233
Стаж: 16 лет 4 месяца
Благодарил (а): 142 раза
Поблагодарили: 140 раз

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

Сообщение Shredder »

Вопрос:

При отключении расширения из "персонализации", его настройки из управлений расширениями НЕ пропадают, хотя должны. Сравнил свой пак с паком recent_topics, в котором настройки после отключения исчезают (кстати, сами его модули на вкладке "Система" есть и даже включены, но настроек нет - вот такое вот "волшебство"), убрал все замеченные мелочи и различия, которые могли быть, но ничего не изменилось. В конце концов, удалил функцию revert_data из recent_topics, результат прежний - его настройки исчезают, мои нет.

Добавлено спустя 18 минут 39 секунд:
Ответ найден - нужно использовать специальную переменную для авторизации:
https://www.phpbb.com/community/viewtop ... &t=2222606
Последний раз редактировалось Shredder 02.11.2014 0:42, всего редактировалось 1 раз.
Аватара пользователя
Борис Бердичевский
phpBB 3.0.0 RC1
Сообщения: 1457
Стаж: 17 лет 4 месяца
Откуда: Израиль, Беэр-Шева
Благодарил (а): 28 раз
Поблагодарили: 53 раза

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

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

А как можно с помощью экстента внести изменения в файл includes\acp\info\acp_logs.php, чтобы добавить ещё один тип логов?
После нескольких лет общения здесь и техсопровождения форумов я наконец понял, что ничего не понимаю в phpBB!
Аватара пользователя
ВладимирТ
phpBB 2.0.4
Сообщения: 421
Стаж: 14 лет 10 месяцев
Откуда: Москва
Благодарил (а): 14 раз
Поблагодарили: 23 раза

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

Сообщение ВладимирТ »

Не подскажите, почему у меня не работает условие:

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

<!-- IF S_INDEX or S_VIEWFORUM -->
А так работает:

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

<!-- IF S_INDEX or SCRIPT_NAME == "viewforum" -->
На вкус и цвет - разный CSS

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