---------
phpBB 3.1, 3.2 extension
copyright (c) 2014 c61 c61@yandex.ru http://c61.no-ip.org
license http://opensource.org/licenses/gpl-license.php GNU Public License
Empennage: Добавление кода и контента в верх/низ страниц
Расширение позволяет добавлять код и контент в верх/низ страниц (css, html, javascript) для всех стилей, что может быть использовано, например, для добавления объявлений, счетчиков, информеров, отладки собственных стилей и скриптов.
Код и контент могут быть добавлены:
- стили и скрипты (а также метатэги) могут быть добавлены в заголовок страницы (используется Template Event overall_header_stylesheets_after);
- код, контент и скрипты могут быть добавлены в верх страницы перед основным контентом, рекомендуется для размещения объявлений (используется Template Event overall_header_content_before);
- код, контент и скрипты могут быть добавлены в низ страницы после copyright, рекомендуется для размещения собственного cjpyright и дополнительной информации (используется Template Event overall_footer_copyright_append);
- код, контент и скрипты могут быть добавлены в низ страницы после футера, рекомендуется для размещения счётчиков и информеров (используется Template Event overall_footer_after);
- скрипты могут быть добавлены в низ страницы перед закрывающем тэгом body (используется Template Event overall_footer_body_after).
Используйте <style type="text/css">...</style> для стилей и <script type="text/javascript">...</script> для javascript.
Любая выдача может быть отключена. Для выдачи объявлений можно использовать дополнительные условия.
Можно использовать любые языковые переменные из языковых файлов. Например, {L_<STRINGNAME>}, где <STRINGNAME> — это имя переведённой строки, которую вы хотите добавить. Например, {L_WROTE} будет отображено как «wrote» или переведено в зависимости от выбранного пользователем языка. Можно использовать любые переменные, определённые для основного шаблона, например, {SCRIPT_NAME}. Для локальных переменных, определённых посредством DEFINE, используйте {$VARNAME}.
Допустимы все конструкции для шаблонов phpBB 3.0.13 (не 3.1.x), кроме включений файлов (INCLUDE и т.п.). Программы для разных вставок кода выполняются последовательно сверху вних в общем пространстве имён, то есть локальные переменные, определённые DEFINE при вставке в верхней части страницы, доступны для вставок в нижней части страницы. Для отладки можно включить выдачу отладочной информации при обнаружении ошибок.
Можно разрешить PHP в шаблонах расширения. При этом можно доступится к переменным основного шаблона через $this->rootref[]. Дополнительную информацию можно получить анализируя файлы расширения. Будьте осторожны, исполнение некорректного кода может привести к неработоспособности конференции.
Отличия от расширения автора DeaDRoMeO ( сайт phpbbworld умер и ссылка удалена ) - более широкие возможности по собственным стилям и месту отображения контента.
Отличия от расширения BoardAnnouncements ( https://www.phpbb.com ) - можно задать более гибкие условия выдачи объявлений, однако, их стиль придётся задавать вручную.
Основное отличие - возможность использования переменных и написания программы для своих шаблонов. Это может широко использоваться при разработке и отладке собственных стилей и скриптов, поскольку нет необходимости заменять файлы на сервере, что значительно экономит время.
Примечание о проблемах безопасности
-----------------------------------
Если разрешен PHP в шаблонах Empennage, можно использовать '<!-- PHP --> ... <!-- ENDPHP -->'. Однако, разрешать PHP в шаблонах не рекомендуется из соображений безопасности. Учтите, в этом случае возможно использование eval() и прочих "вредных" функций.
Потенциальная опасность разрешения PHP в шаблонах Empennage значительно ниже, чем разрешение PHP в шаблонах стилей, поскольку:
- шаблоны Empennage хранятся в базе данных, а не в файлах;
- компиляция выполняется до того, как доходит дело до компиляции общего шаблона.
Однако, если Вы допустили ошибку, последствия могут быть даже более печальны, чем при некорректном использовании PHP в шаблонах стилей, вплоть до полной неработоспособности конференции и потери данных. Поэтому рекомендуется проявлять осторожность.
Дополнительные переменные основного шаблона
-------------------------------------------
Empennage создаёт переменные с компилированным содержимым (имя в соответствии с местом вставки), если вставка будет выдана:
S_EMPENNAGE_CONTENT_HEADER_STYLESHEETS_AFTER
S_EMPENNAGE_CONTENT_HEADER_CONTENT_BEFORE
S_EMPENNAGE_CONTENT_COPYRIGHT_APPEND
S_EMPENNAGE_CONTENT_FOOTER_AFTER
S_EMPENNAGE_CONTENT_FOOTER_BODY_AFTER
и вышепеременные с суффиксами '_HASH', в которых содержится crc32 (беззнаковый десятичный) соответствующего исходного кода.
S_EMPENNAGE_CONTENT_HEADER_CONTENT_BEFORE можно использовать в своём алгоритме скрытия объявления (javascript) для проверки на изменение текста объявения.
Создаётся также S_EMPENNAGE_COOKIENAME - имя cookie для использования в javascript.
Установка
---------
Копировать содержимое каталога root в корневую папку конференции с сохранением структуры каталогов (расширения phpBB 3.1 и 3.2 располагаются в /ext).
Примеры:
-------
Выравнивание добавляемого контента
----------------------------------
По центру
<div width="100%" align="center">
...контент...
</div>
Слева и справа
<div width="100%">
<div style="float:left; padding:8px;">
...контент слева...
</div>
<div style="float:right; padding:8px;">
...контент справа...
</div>
</div>
Объявление только для страницы входа
------------------------------------
Включить выдачу объявления:
Да
Включить для ботов:
Нет
Включить для гостей:
Да
Включить для зарегистрированных пользователей:
Нет
Включить для имени страницы и запроса, удовлетворяющих регулярному выражению:
/ucp.php\?mode=login/isu
Контент объявления, добавляемый в верх страниц:
<br />
<font color="red" size="+0.5em">
Текст объявления
</font>
<br /><br />
Объявление с возможностью скрытия
---------------------------------
<div id="announcement" style="display:none;"></div>
<script type="text/javascript">
// <![CDATA[
function EAsetCookie(hide) {
var date = new Date;
date.setDate(date.getDate() + 1000);
document.cookie = "{S_EMPENNAGE_COOKIENAME}=" + hide + "; path=/; expires=" + date.toUTCString();
}
function EAgetCookie()
{
var eqname = "{S_EMPENNAGE_COOKIENAME}=";
var cookies = document.cookie.split(";");
for ( var i = 0; i < cookies.length; i++ ) {
var cookie = cookies;
while ( cookie.charAt(0) == " " ) cookie = cookie.substring(1, cookie.length);
if ( !cookie.indexOf(eqname) ) {
var d = parseInt(cookie.substring(eqname.length, cookie.length));
return d;
}
}
return 0;
}
var announcement = document.getElementById("announcement");
if ( announcement ) {
var announcement_title="{L_VIEW_TOPIC_ANNOUNCEMENT}";
var announcement_text="Текст объявления";
if ( EAgetCookie() != {S_EMPENNAGE_CONTENT_HEADER_CONTENT_BEFORE_HASH} ) {
announcement.style.display="block";
}
announcement.innerHTML='<font color="darkred" size="+0.5em"><div><input type="button" value=" × " style="background: transparent; border: 1px solid lightgray; margin: 0; padding: 0; font-weight: bolder; vertical-align: top;" onclick="announcement.style.display='+"'"+'none'+"'"+'; EAsetCookie({S_EMPENNAGE_CONTENT_HEADER_CONTENT_BEFORE_HASH});" /> <b style="vertical-align: bottom;">'+announcement_title+'</b> </div> <div> <div style="display: block;">'+announcement_text+'<hr></hr></div></div></font><br />';
}
// ]]>
</script>
Выдача информеров только для пользователей с правами администратора
-------------------------------------------------------------------
<!-- IF U_ACP -->
<div>...Здесь код информеров...</div>
<!-- ENDIF -->
Разрешить PHP и отключить <link rel="canonical" ...> в шаблонах
---------------------------------------------------------------
<!-- PHP -->
$this->rootref['U_CANONICAL'] = 0;
<!-- ENDPHP -->
Разрешить PHP и заменить логотип сайта
--------------------------------------
<!-- PHP -->
$this->rootref['SITE_LOGO_IMG'] = '<img src="http://mysite.ru/forum/styles/prosilver/site-logo.gif" style="max-width: 100%; height:auto; width:auto;">';
<!-- ENDPHP -->
Разрешить PHP и дополнить расширение External Links
---------------------------------------------------
<!-- PHP -->
$this->rootref['CREDIT_LINE'] = str_replace('https://www.phpbb.com/',$this->rootref['BOARD_URL'].'go.php?http%3A%2F%2Fwww.phpbb.com%2F',$this->rootref['CREDIT_LINE']);
$this->rootref['TRANSLATION_INFO'] = str_replace('http://www.phpbbguru.net/',$this->rootref['BOARD_URL'].'go.php?http%3A%2F%2Fwww.phpbbguru.net%2F',$this->rootref['TRANSLATION_INFO']);
<!-- ENDPHP -->
Установить иконку сайта (не favicon.ico в корне), добавив в заголовок страницы
------------------------------------------------------------------------------
<link rel='icon' href='/myfavicon.png' type='image/x-icon'>
<link rel='shortcut icon' href='/myfavicon.png' type='image/x-icon'>
История версий
--------------
0.3.2 - 20160201:
- по просьбам трудящихся: корректная миграция с любой версии, в предыдущей была только с 0.3.0
Скачать: 0.3.1 - 20160201:
- найдена и устранена ещё одна ошибка, приводящая к конфликту с расширением "Быстрый ответ" и др., использующими AJAX
- победив лень, внял замечаниям Sumanai и сделал-таки нормальную миграцию ))
0.3.0 - 20160127:
- реализована совместимость расширения с PHP 7 и phpBB 3.2
0.2.0 - 20160126:
- устранены конфликты с обновленным twig в phpBB 3.1.6, приводящие к конфликтам с расширением "Быстрый ответ" и др., использующими AJAX
0.1.4 - 20150905:
- для редактирования кода приделан CodeMirror (только в полноэкранном режиме из-за проблем совместимости со стилями phpbb), для чего добавляется кнопка над окном редактирования кода
- в полноэкранном режиме CodeMirror слева вверху добавлена кнопка выхода (x), дублирующая F11 и Esc
- добавлено задание пути к CodeMirror
Скачать: 0.1.3 - 20150304:
- исправлена ошибка с логикой выдачи объявления
- изменена обработка eval() и выдача листинга при наличи ошибок
- добавлена возможность доступа к переменных и данным шаблона
- дополнены примеры
0.1.2 - 20150221:
- исправлена ошибка с short_open_tag = off
- дбавлено отдельное разрешение на использование PHP в шаблонах расширения
- дополнены примеры
Скачать: 0.1.1 - 20150213:
- использован компилятор шаблонов от phpBB 3.0.13
Скачать: 0.1.0 - 20150212:
- экспериментальная версия: программирование шаблонов и многое другое...
0.0.7 - 20150210:
- расширение возможностей: дополнительные места выдачи кода и контента
- добавлена возможность использования лексем
0.0.6 - 20150209:
- перед записью в базу данных проводится сравнение старой и новой строк конфигурации, и если изменений не обнаружено, запись не выполняется (иначе может возникать ошибка SQL 1062 в функции set_array из-за возврата функцией mysql_affected_rows() нулевого значения и выполнения запроса INSERT INTO)
- добавлена выдача объявлений перед началом контента страниц с задаваемыми условиями (для ботов, гостей, зарегистрированных пользователей и по регулярному выражению)
- добавлен контроль последней версии расширения через сайт http://c61.no-ip.org (см. в админке Персонализация->Управление расширениями->Empennage->Информация)
0.0.5 - 20141228:
- удалены лишние файлы из migrations и выкину мусор, влиявшие на установку и работу расширения
0.0.4 - 20141114:
- снято ограничение на размер добавляемого контента
0.0.3 - 20141114:
- исправления ошибок
- добавлены примеры
0.0.2 - 20141102:
- косметические исправления
0.0.1 - 20141101:
- навеяно модом hook_counters_and_informers phpBB 3.0.x...
P.S. При добавлении счетчиков и информеров просто выполняем copy-paste их кода, для информеров может понадобиться
<br />
и <div width="100%" align="center">...</div>
(или "устаревший" и "невалидный", хотя и воспринимаемый браузерами правильно, <center>...</center>
) в нужном месте, и не надо ковырять overall_footer.html
, и более никаких забот ! ))P.P.S. Empennage - хвостовое оперение, по сути так оно и есть... Не называть же tail......
Устаревшие версии безжалостно удаляю )
Тема на моей тествой площадке тынц
Скриншоты: Добавлено спустя 7 минут 22 секунды:
Обращаю внимание на то, что данное расширение может быть использовано как инструмент разработчика. Маленько ускоряется отладка своих дополнительных стилей и скриптов со вставками переменных шаблонов, поскольку не надо копировать файлы на сервер и чистить кэш. Используем несколько вкладок браузера: в одной правим содержимое вставок страниц (через админку), в других смотрим сами страницы. Наличие возможности получения листинга компиляции вставок шаблонов помогает в отладке. После того, как сочтём результат удовлетворительным, втыкаем отлаженные вставки в свой код.