Уважаемые пользователи!
В версии phpBB 3.3.13 обнаружены ошибки при использовании функции поиска по конференции.
Обсуждение проблемы и ее решения здесь Re: Вышел phpBB 3.3.13 [обсуждаем].
В связи с этим, не рекомендуется установка и обновление до phpBB 3.3.13.
Ошибка будет устранена разработчиками в версии phpBB 3.3.14.

Скачать предыдущую версию - phpBB 3.3.12 - можно здесь.
Уважаемые пользователи!
C 7 ноября 2020 года phpBB Group прекратила выпуск обновлений и завершила дальнейшее развитие phpBB версии 3.2.
С 1 августа 2024 года phpBB Group прекращает поддержку phpBB 3.2 на официальном сайте.
Сайт официальной русской поддержки phpBB Guru продолжит поддержку phpBB 3.2 до 31 декабря 2024 года.
С учетом этого, настоятельно рекомендуется обновить конференции до версии 3.3.

Как корректно передать переменную из расширения в стандартный шаблон?

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

Ваш вопрос может быть удален без объяснения причин, если на него есть ответы по приведённым ссылкам (а вы рискуете получить предупреждение ;) ).
romeo_piter
phpBB 2.0.22
Сообщения: 1368
Стаж: 15 лет 6 месяцев
Благодарил (а): 171 раз
Поблагодарили: 21 раз

Как корректно передать переменную из расширения в стандартный шаблон?

Сообщение romeo_piter »

В контроллере расширения (controller/index.php) объявляем переменную, например:

$this->template->assign_vars(array(
'PAGE_EXTID' => true,
));

Нужно чтобы эту переменную можно было использовать в стандартном шаблоне движка, например, во viewtopic для создания через нее условия.
Как это сделать?
Аватара пользователя
rxu
phpBB Guru
phpBB Guru
Сообщения: 16620
Стаж: 18 лет 5 месяцев
Откуда: Красноярск
Благодарил (а): 545 раз
Поблагодарили: 1821 раз

Re: Как корректно передать переменную из расширения в стандартный шаблон?

Сообщение rxu »

Для ответа на вопрос надо понять, как логически связаны контроллер и гипотетический viewtopic (или другое место).
Например, если шаблон вызывается в процессе работы контроллера, то она и так передастся прямо из контроллера. Если нет, то нет смысла передавать.
Изображение
Аватара пользователя
Татьяна5
Поддержка
Поддержка
Сообщения: 12562
Стаж: 13 лет 2 месяца
Благодарил (а): 168 раз
Поблагодарили: 2520 раз

Re: Как корректно передать переменную из расширения в стандартный шаблон?

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

Чаще из слушателя переменные передаются, не из контроллера
romeo_piter
phpBB 2.0.22
Сообщения: 1368
Стаж: 15 лет 6 месяцев
Благодарил (а): 171 раз
Поблагодарили: 21 раз

Re: Как корректно передать переменную из расширения в стандартный шаблон?

Сообщение romeo_piter »

Уточню ситуацию. Есть самодельное расширение, которое выводит вложения из темы на отдельную страницу. На странице темы есть кнопка, по которой по сути вызывается страница расширения. Как верно подсказал Руслан, переменные передаются, когда мы уже "запустили расширение", т.е. перешли по ссылке.

Но, часто в темах нет вложений, тогда по кнопке-ссылке во вьютопике мы получаем пустую страницу с фразой вроде "нифига тут нет". Это некрасиво и неудобно, было бы лучше, если бы кнопка вообще не отображалась при условии, что вложений = 0. Такое условие есть в расширении, но оно отрабатывает уже после того как мы на странице расширения.

Я правильно понимаю, что эта ситуация не решается? Точнее решается, но неудобно, надо добавлять счетчик вложений в теме, и записывать в таблице тем количество в какую-то ячейку. И ещё это обновлять?

Пока писал, подумал, может уже где-то есть подобная переменная?
Посмотрел, в PMA есть поле topic_attachment, это tinyint unsigned принимает значение 0 или 1 - это оно? Оно учитывает и инлайны и аттачи?
Аватара пользователя
rxu
phpBB Guru
phpBB Guru
Сообщения: 16620
Стаж: 18 лет 5 месяцев
Откуда: Красноярск
Благодарил (а): 545 раз
Поблагодарили: 1821 раз

Re: Как корректно передать переменную из расширения в стандартный шаблон?

Сообщение rxu »

romeo_piter писал(а): 04.07.2024 19:50 Оно учитывает и инлайны и аттачи?
Смотря что подразумевается под "инлайном". Если тег attachment, то это то же самое обычное вложение. Тогда да, учитывает, если в теме есть хотя бы одно.
Но вложений может и не быть на конкретной странице, если кнопка находится во вьютопике, а не во вьюфоруме (списке тем). Тогда надо считать посты с вложениями.
romeo_piter писал(а): 04.07.2024 19:50 Я правильно понимаю, что эта ситуация не решается?
Если расширение добавляет кнопку на стандартную страницу phpBB, значит, это делается через какое-то событие и есть его слушатель. А значит, любой код в слушателе можно обернуть в условие, управляющее отображением кнопки.
Изображение
romeo_piter
phpBB 2.0.22
Сообщения: 1368
Стаж: 15 лет 6 месяцев
Благодарил (а): 171 раз
Поблагодарили: 21 раз

Re: Как корректно передать переменную из расширения в стандартный шаблон?

Сообщение romeo_piter »

rxu писал(а): 04.07.2024 20:07 Но вложений может и не быть на конкретной странице
Это как раз удобно, именно такое поведение меня устраивает.

Нашел во вьютопике вроде бы готовую переменную шаблона:
'S_HAS_ATTACHMENTS' => $topic_data['topic_attachment'],

Но она почему-то всегда выдает 0. Использую в расширении в событии viewtopic_buttons_top_after
При выводе {S_HAS_ATTACHMENTS} отображает 0, хотя topic_attachment=1 для проверяемой темы .
Я что-то не так делаю?
Перенесено из форума phpBB-пространство в форум Для разработчиков 04.07.2024 21:31 модератором Татьяна5

Аватара пользователя
Татьяна5
Поддержка
Поддержка
Сообщения: 12562
Стаж: 13 лет 2 месяца
Благодарил (а): 168 раз
Поблагодарили: 2520 раз

Re: Как корректно передать переменную из расширения в стандартный шаблон?

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

Это из таблицы _topics, поле с соответствующим названием
romeo_piter
phpBB 2.0.22
Сообщения: 1368
Стаж: 15 лет 6 месяцев
Благодарил (а): 171 раз
Поблагодарили: 21 раз

Re: Как корректно передать переменную из расширения в стандартный шаблон?

Сообщение romeo_piter »

Да, так вроде все верно.
В таблице _topics поле topic_attachment имеет для темы с определенным id значение 1. Вывожу это в шаблон вьютопик, смотрю тему с этим id, а выводится 0. Почему?
Аватара пользователя
Татьяна5
Поддержка
Поддержка
Сообщения: 12562
Стаж: 13 лет 2 месяца
Благодарил (а): 168 раз
Поблагодарили: 2520 раз

Re: Как корректно передать переменную из расширения в стандартный шаблон?

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

Проверьте на чистом форуме то одно расширение. Если будет работать - где-то конфликт с другими, не будет - перепроверять на опечатки
romeo_piter
phpBB 2.0.22
Сообщения: 1368
Стаж: 15 лет 6 месяцев
Благодарил (а): 171 раз
Поблагодарили: 21 раз

Re: Как корректно передать переменную из расширения в стандартный шаблон?

Сообщение romeo_piter »

Нет, расширение прекрасно работает. Событие тоже работает.
Добавляю прямо в шаблон viewtopic_body после кнопки ответить вывод {S_HAS_ATTACHMENTS}
И тоже получаю 0. Хотя изображения есть и вставленные в пост и невставленные.

Отправлено спустя 5 минут 20 секунд:
Во вьютопик.пшп есть переменная подсчета постов S_NUM_POSTS:
$template->assign_vars(array(
'S_HAS_ATTACHMENTS' => $topic_data['topic_attachment'],
'S_NUM_POSTS' => count($post_list))
);
Она работает и отображается корректно как во вьютопике, так и через событие расширения, а вот с S_HAS_ATTACHMENTS что-то не то :shock:
Аватара пользователя
Татьяна5
Поддержка
Поддержка
Сообщения: 12562
Стаж: 13 лет 2 месяца
Благодарил (а): 168 раз
Поблагодарили: 2520 раз

Re: Как корректно передать переменную из расширения в стандартный шаблон?

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

Хоть в шаблон, хоть в событие в расширении - без разницы. Влияние других расширений ни то, ни то не исключит
Надо или отключать всё, или проверять на чистом форуме
romeo_piter
phpBB 2.0.22
Сообщения: 1368
Стаж: 15 лет 6 месяцев
Благодарил (а): 171 раз
Поблагодарили: 21 раз

Re: Как корректно передать переменную из расширения в стандартный шаблон?

Сообщение romeo_piter »

Добавил переменную.
'S_HAS_ATTACHMENTS' => $topic_data['topic_attachment'],
'WTF' => $topic_data['topic_attachment'],

WTF - работает везде корректно.

Такая же переменная S_HAS_ATTACHMENTS дальше во вьютопике штатно используется в массиве postrow.
'S_HAS_ATTACHMENTS' => (!empty($attachments[$row['post_id']])) ? true : false,
Они не могут пересекаться? Ну просто вдруг :oops:
Аватара пользователя
Татьяна5
Поддержка
Поддержка
Сообщения: 12562
Стаж: 13 лет 2 месяца
Благодарил (а): 168 раз
Поблагодарили: 2520 раз

Re: Как корректно передать переменную из расширения в стандартный шаблон?

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

Не могут. В массиве и без - это разные переменные
S_HAS_ATTACHMENTS может быть задета другим расширением

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