Empennage: add code and content to page top/bottom
---------
phpBB 3.1 extension
copyright (c) 2014 c61 c61@yandex.ru
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, рекомендуется для размещения собственного copyright и дополнительной информации (используется 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 ( [del] ) - более широкие возможности по собственным стилям и месту отображения контента.
Отличия от расширения 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 располагаются в /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[i];
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 -->
$this->rootref['U_CANONICAL'] = 0;
<!-- ENDPHP -->
--------------------------------------
Код: Выделить всё
<!-- 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 -->
$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 -->
------------------------------------------------------------------------------
Код: Выделить всё
<link rel='icon' href='/myfavicon.png' type='image/x-icon'>
<link rel='shortcut icon' href='/myfavicon.png' type='image/x-icon'>
P.S. При добавлении счетчиков и информеров просто выполняем copy-paste их кода, для информеров может понадобиться
<br />
и <div width="100%" align="center">...</div>
(или "устаревший" и "невалидный", хотя и воспринимаемый браузерами правильно, <center>...</center>
) в нужном месте, и не надо ковырять overall_footer.html
, и более никаких забот ! ))P.P.S. Empennage - хвостовое оперение, по сути так оно и есть... Не называть же tail......
Тема на моей тествой площадке тынц
Скриншоты: