Наконец я нашел в себе силы и время(как говорится, жизнь бьет ключом(гаечным
)) довести инструкцию до какого-либо логического завершения. Хоть она и не является полной, но я думаю поможет новичкам в освоении. Стартап как-бы есть, а в деталях дело за гуглом.
1 29.10.2010 14:55
Re: HOWTO: Создание расширений. (17 ответов, оставленных в Расширения v1.3)
2 14.09.2009 09:10
Re: HOWTO: Создание расширений. (17 ответов, оставленных в Расширения v1.3)
andrew, хотелось бы ещё увидеть на примере простого расширения работу с кэшем, то есть как толкать в кэш свои данные или хуки, и работу с redirect'ом (пытался разобраться в коде расширения portal_by_daris - ничего не понял).
Тоже думаю было бы уместно показать тэги <dependencies></dependencies>, <install></install> и <uninstall></uninstall>
ОК. Пожелание принято.
andrew, У меня предложение - делать отдельные вопросы отдельными сообщениями, чтобы во-первых не превысить максимальный размер сообщения, и чтобы иметь под рукой прямую ссылку.
Согласен. Я бы так и делал сразу, если бы не склейка сообщений.
Продолжение откладывается до субботы, т.к. мне нужно уехать. Не скучайте ![]()
3 13.09.2009 05:21
Re: HOWTO: Создание расширений. (17 ответов, оставленных в Расширения v1.3)
* * * Структура хука * * *
Пояснения приводятся на примере расширения, которое заменяет заголовок форума на графический логотип.
Хуки находятся в разделе:
<hooks>
</hooks>файла manifest.xml.
Сам хук объявляется следующим образом:
<hook id="ЗДЕСЬ ПРОПИСЫВАЕТСЯ ИДЕНТИФИКАТОР ХУКА">и закрывается тегом:
</hook>______________________________
Для того, чтобы узнать какой идентификатор хука использовать делаем следующее:
1) Ищем файл, который генерирует интересующий нас контент. (header.php)
2) Находим блок кода в который нам нужно влезть.
...
// Forum Title
$gen_elements['<!-- forum_title -->'] = <-- Переменная заголовка форума, которую нам нужно изменить.
...
($hook = get_hook('hd_gen_elements')) ? eval($hook) : null; <-- Объявление хука, который поможет это сделать.
...3) Видим идентификатор хука. (hd_gen_elements)
Таким образом объявление хука примет такой вид:
<hooks>
<hook id="hd_gen_elements"><![CDATA[
ИСХОДНЫЙ КОД НА PHP...
]]></hook>
</hooks>Исходный код должен помещаться в CDATA. Что это такое: На википедии
______________________________
Для замены заголовка логотипом нужно выполнить следующий код:
$gen_elements['<!-- forum_title -->'] = '<div id="logo"> <a href="'.forum_link($forum_url['index']).'" title="'.forum_htmlencode($forum_config['o_board_title']).'"><img src="'.$base_url.'/style/'.$forum_user['style'].'/logo.png" alt="'.forum_htmlencode($forum_config['o_board_title']).'" /></a> </div>';Который заменит текст заголовка на файл logo.png, который нужно положить в папку со стилем. (стадартный - /style/Oxygen)
______________________________
Итогом будет файл manifest.xml с таким содержанием:
<?xml version="1.0" encoding="utf-8"?>
<extension engine="1.0">
<id>forum_logo</id>
<title>Замена заголовка на логотип</title>
<description>Замена заголовка на логотип.</description>
<version>1.0</version>
<author>andrew(punbb.ru)</author>
<minversion>1.3.3</minversion>
<maxtestedon>1.3.4</maxtestedon>
<hooks>
<hook id="hd_gen_elements"><![CDATA[
$gen_elements['<!-- forum_title -->'] = '<div id="logo"> <a href="'.forum_link($forum_url['index']).'" title="'.forum_htmlencode($forum_config['o_board_title']).'"><img src="'.$base_url.'/style/'.$forum_user['style'].'/logo.png" alt="'.forum_htmlencode($forum_config['o_board_title']).'" /></a> </div>';
]]></hook>
</hooks>
</extension>Готовое расширение в аттаче.
4 12.09.2009 13:56
Тема: HOWTO: Создание расширений. (17 ответов, оставленных в Расширения v1.3)
* * * Что такое расширение и для чего это нужно? * * *
Итак, расширения - это механизм, который позволяет добавлять функционал форуму не внося изменений в исходный код. Преимущества и недостатки такого механизма:
Преимущества:
+ код, реализованный в виде расширения, прост в написании, установке и удалении. Не нужно помнить какие файлы редактировались для добавления новой функции.
+ Обновлять ядро(основной код) форума можно не опасаясь потерять важные изменения и дополнения.
+ Обновлять модули также становится гораздо проще.
Недостатки:
- пока не выявлено
Как видим преимуществ все-же больше чем недостатков, поэтому продолжим.
______________________________
* * * За счет чего работают расширения? * * *
Расширения для PunBB возможны благодаря так называемым хукам(hook - крюк, ловушка).
Хук - перехват обработки события. Служит этот механизм для внедрения кода в определенное место ядра.
Как работают хуки?
Для примера возьмем последние строки файла header.php:
unset($main_elements);
($hook = get_hook('hd_end')) ? eval($hook) : null;
if (!defined('FORUM_HEADER'))
define('FORUM_HEADER', 1);Здесь мы видим, что в переменную $hook загружается некий код:
$hook = get_hook('hd_end')а затем выполняется:
eval($hook)Параметр обработчика(в нашем случае это hd_end) принято называть идентификатором хука или хуком.
Т.е. использование хука hd_end равносильно замене строки
($hook = get_hook('hd_end')) ? eval($hook) : null;Произвольным исходным кодом.
______________________________
* * * Структура расширения * * *
Все расширения должны находится в папке extesions. В этой папке необходимо создать свою папку, имя которой соответствует идентификатору расширения, например: my_extension, no_header, new_smilies и т.д. Категорически не рекомендую использовать префикс pun, например: pun_extension, pun_header, pun_smilies, потому как он "зарезервирован" для официальных(поддерживаемых командой разработчиков форума) расширений.
Для примера, я буду использовать идентификатор my_extension.
Папка расширения должна содержать файл manifest.xml в кодировке UTF-8. То есть относительный путь к файлу manifest.xml должен выглядеть следующим образом:
/extensions/my_extension/manifest.xml, где my_extension - идентификатор расширения.
Структура manifest.xml
Это пустая заготовка файла manifest.xml:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE extension SYSTEM "ext-1.0.dtd">
<extension engine="1.0">
<id>my_extension</id>
<title>Мое расширение</title>
<version>1.0</version>
<description>Описание моего расширения</description>
<author>Andrew</author>
<minversion>1.3</minversion>
<maxtestedon>1.3.4</maxtestedon>
<hooks>
Здесь находятся хуки, реализующие функционал расширения.
</hooks>
</extension>Пояснения:
• Идентификатор расширения. Должен быть таким-же, как и имя папки, в которой расположен файл manifest.xml
<id>my_extension</id>• Имя расширения. Этим именем расширение будет подписано в админке форума.
<title>Мое расширение</title>• Версия
<version>1.0</version>• Описание
<description>Описание моего расширения.</description>• Автор расширения
<author>Andrew</author>• Минимальная версия ядра форума. Если версия форума будет ниже указанной, расширение не будет доступно для установки.
<minversion>1.3</minversion>• Максимальная версия, для которой проводилась проверка совместимости. Если версия форума выше указанной, форум установит расширение но предупредит о том, что расширение не тестировалось на совместимость
<maxtestedon>1.3.4</maxtestedon>5 11.09.2009 08:45
Re: Зачем весь базар? (7 ответов, оставленных в Общие вопросы)
perec, спасибо за замечание, надо сделать инструкцию.
Может быть тебя не затруднит накидать несколько основных вопросов по установке, которые возникали, или какие были трудности?
Поддерживаю. Проблема написания инструкции для знающего человека заключается в том, что он понятия не имеет, какие вопросы могут заинтересовать пользователя. Поэтому, задавайте вопросы - получайте ответы. Так, глядишь, и инструкция появится.
6 09.09.2009 04:47
Re: Размеры смайлика и parser.php, help.php (5 ответов, оставленных в Общие вопросы)
Кстати, несмотря на то, что браузеры не валятся с ошибками из-за отсутствия этих атрибутов, тем не менее они обязательны по стандарту, это подтверждают валидаторы. Удалять-неудалять это выбор веб-мастера
Эээм... Не понял. Для ПунББ 1.3 имеем стандарт XHTML 1.0 Strict. Для него не нужны атрибуты размеров. Только альт.
Вот интересующий кусок из xhtml1-strict.dtd
<!ELEMENT img EMPTY>
<!ATTLIST img
%attrs;
src %URI; #REQUIRED
alt %Text; #REQUIRED
longdesc %URI; #IMPLIED
height %Length; #IMPLIED
width %Length; #IMPLIED
usemap %URI; #IMPLIED
ismap (ismap) #IMPLIED
>7 09.09.2009 04:07
Re: Подскажите как залить новые смайлы? (4 ответов, оставленных в Общие вопросы)
а откуда смыйлы брать? какие-то очень маленькие они получаются.
1) Смайлы определены в фале parser.php. Строка 17 (в версии 1.3.4)
$smilies = array(':)' => 'smile.png', '=)' => 'smile.png', ':|' => 'neutral.png', '=|' => 'neutral.png', ':(' => 'sad.png', '=(' => 'sad.png', ':D' => 'big_smile.png', '=D' => 'big_smile.png', ':o' => 'yikes.png', ':O' => 'yikes.png', ';)' => 'wink.png', ':/' => 'hmm.png', ':P' => 'tongue.png', ':p' => 'tongue.png', ':lol:' => 'lol.png', ':mad:' => 'mad.png', ':rolleyes:' => 'roll.png', ':cool:' => 'cool.png');2) Размеры смайлов определены соответствующим аттибутом тега IMG. Чтобы от этого избавиться можно редактировать файлы include/parser.php, help.php и если установлено расширение pun_bbcode, то и bar.php в папке расширения.
Также можно почитать тему:
http://punbb.ru/topic3322-razmery-smail … lpphp.html
8 09.09.2009 03:54
Re: не могу установить форум (3 ответов, оставленных в Общие вопросы)
выдает такое вот сообщение
Important! To finalize the installation, you need to click on the button below to download a file called config.php. You then need to upload this file to the root directory of your PunBB installation.
Once you have uploaded config.php, PunBB will be fully installed! You may then go to the forum index once config.php has been uploaded.
и ниже еще...
Warning!
The cache directory is currently not writable! In order for PunBB to function properly, the directory named cache must be writable by PHP. Use chmod to set the appropriate directory permissions. If in doubt, chmod to 0777.
The avatar directory is currently not writable! If you want users to be able to upload their own avatar images you must see to it that the directory named img/avatars is writable by PHP. You can later choose to save avatar images in a different directory (see Administration/Settings/Features). Use chmod to set the appropriate directory permissions. If in doubt, chmod to 0777.а еще ниже кнопочка Download config.php file
версия PunBB 1.3.3
помогите пожалуйста, а то я не силен пока в этом
1) В какой ОС ты устанавливаешь форум? Если это *nix система, то проверь права на файл config.php. Попробуй поставить 755. Так-же проверь физическое наличие наличие этого в папке форума.
2) Папка cache должна иметь права на запись. Например 777.
9 08.09.2009 13:31
Re: Как заменить стандартные квадратики обозначения форумов? (6 ответов, оставленных в Общие вопросы)
сделал хук, с кодом ниже. Может что-то нет так??? Подскажите, дураку, где ошибка
<?xml version="1.0" encoding="utf-8"?> <extension engine="1.0"> <id>hd_gen_elements</id> <title>Откючение показа названия форума</title> <description>Откючение показа названия форума в верху страницы</description> <version>1.0</version> <author>Andrew</author> <minversion>1.3.4</minversion> <maxtestedon>1.3.4</maxtestedon> <hooks> <hook id="co_common"><![CDATA[ $gen_elements['<!-- forum_title -->'] = '' ]]></hook> <!-- HIDE LIST OF EXTENSIONS --> <hook id="es_essentials"><![CDATA[ define('gen_elements', 2); ]]></hook> </hooks> </extension>
Начнемс...
1) Хук co_common в расширении является служебным и должен выглядеть так(всегда!):
<hook id="co_common"><![CDATA[
$pun_extensions_used = array_merge(isset($pun_extensions_used) ? $pun_extensions_used : array(), array($ext_info['id']));
]]></hook>Никогда его не изменяй, или не используй вообще.
2) Тебе нужен(как я писал) хук hd_gen_elements. Т.е. код будет выглядеть так:
<hook id="hd_gen_elements"><![CDATA[
$gen_elements['<!-- forum_title -->'] = '';
]]></hook>3) Ошибка
syntax error, unexpected T_STRINGвозникла потому, что ты не поставил точку с запятой после
$gen_elements['<!-- forum_title -->'] = ''Перечитай еще раз: http://punbb.ru/post24987.html#p24987. Можно добавить в уже существующее расширение код, который я написал в пункте 2, но для того чтобы все заработало расширение нужно переустановить в админке форума.
Фуххх. Надеюсь разберешься.
10 07.09.2009 14:09
Re: Как заменить стандартные квадратики обозначения форумов? (6 ответов, оставленных в Общие вопросы)
Друзья, как заменить синие стандартные квадратики обозначения форумов?
И второй вопрос, как убрать название форума в верхнем левом углу, т.е. напримере punbb.ru - это надпись "PunBB по-русски"?
П.С. Вы, наверное, посоветуете воспользоваться поиском, но 15 минут потраченного мною времени на это занятие не дали никаких результатов?:rolleyes:
Лентяй.
1) http://punbb.ru/topic3323-standartnye-z … oruma.html
2) испоьзуем хук
hd_gen_elementsКод:
$gen_elements['<!-- forum_title -->'] = '';11 06.09.2009 12:42
Re: [Запрос] WYSIWYG редактор (5 ответов, оставленных в Расширения v1.3)
насчет расширения не скажу, но из редакторов советую TinyMCE, у которого есть плагин bbcode. По поводу интеграции, как вариант, переделать расширение pun_bbcode, вместо его javascript вписав свой(TinyMCE).
12 01.09.2009 17:16
Re: Интеграция с движком (21 ответов, оставленных в Общие вопросы)
Заглянул в pubnbb, черт только css вынесен в тему
...
Можно скопировать main.tpl и admin.tpl в папку темы и там их редактировать.
13 30.08.2009 08:31
Re: Как мне вставить корд sape в самом низу? (2 ответов, оставленных в Общие вопросы)
Ну например:
1) Для начала отредактируйте main.tpl таким образом:
<div id="brd-about" class="gen-content">
<!-- forum_about -->
</div>
<!-- forum_debug -->
</div>
<div id="sape-block">
<!-- my_sape_block -->
</div>
</div>
</body>
</html>где
<div id="sape-block">
<!-- my_sape_block -->
</div>вставляется перед последним дивом.
(Для того, чтобы быть спокойным при обновлениях (чтоб новые файлы не заменили отредактированные) лучше поместить main.tpl в папку темы и редактировать там. Например: style/Oxygen/main.tpl)
2) Теперь нужно вставить содержимое блока:
Используем хук: ft_about_end (не обязательно его, но думаю подойдет.):
$sape_content = /* здесь нужно сформировать содержимое блока в HTML */
$tpl_main = str_replace('<!-- my_sape_block -->', $sape_content, $tpl_main);О использовании хука и создании расширений можно почитать тут: http://punbb.ru/post24987.html#p24987.
14 28.08.2009 08:03
Re: Расшифровка css стиля в Oxygen (4 ответов, оставленных в Стили и темы)
На досуге скачал движок форума punbb, поковырялся в стилях от темы Oxygen,
и понял лишь одно что, без метода "проб и ошибок" сдесь не разобраться. Приходится проссматривать код форума загруженной страницы, изменять содержимое стиля прежде чем определишь, что к чему относится....
Если кому не трудно, выложите подписи к классам. А то пока докопаешься до истины, все желание отпадет в создании собственного стиля...
У вас неправильный подход. Самый простой вариант: использовать подходящий для разработки браузер. Например:
1) Mozilla Firefox + Расширение Firebug.
2) Google Chrome со стандартным средством inspector (Контекстное меню > Просмотр кода элемента).
3) Internet Explorer 8. Средство Developer Tools (F12).
4) Opera. Об опере ничего сказать не могу, т.к. хватает Chrome и Firefox, а IE нужен для исправления его ошибок. Опера обычно выводит страницу нормально (у меня с ней проблем не возникало).
Рекомендую использовать Google Chrome по причине соответствия стандартам.
15 27.08.2009 16:14
Re: PunBB 1.3: список проблем (6 ответов, оставленных в Общие вопросы)
Мелкий глюк:
В форме для отправки личных сообщений пользователю слова "Сообщение" и "Обязательно" налезают друг на друга.
Версия PunchBB 1.3.2, и для английского, и для русского варианта. Смотрю через браузер Internet Explorer 8.
Через оперу все нормально показывается.
16 27.08.2009 16:06
Тема: Верстка в IE (Internet Explorer) [РЕШЕНО] (0 ответов, оставленных в Стили и темы)
Надеюсь кому-нибудь пригодится:
Вот так выглядит textarea для ответа в браузере Google Chrome (в Mozilla Firefox результат такой-же):
А так в Internet Explorer 8 (накладывается надпись обязательно):
А так в IE7 (IE8 в режиме совместимости) (Нет выравнивания по верхней линии надписи и текстовой области):
Видно, что верстка сосет. Для исправления этой неприятности открываем файл Oxygen.css (в папке /style/Oxygen) (или файл вашей темы (в папке вашей темы
)).
Находим со строки 1371:
.brd .txt-set .required label span em {
margin-bottom: -1.2em;
}Если удалить эти строки решим проблему для IE8.
Находим со строки 1316:
.brd .txt-set label span {
float: left;
margin-left: -17em;
display: block;
position: relative;
padding: 2px 1em;
width: 16em;
text-align:right;
font-weight:bold;
}и меняем
padding: 2px 1em;на
padding: 2px 0px 2px 1em;это решит вопрос с IE7.
PS:
Если кто-нибудь зарегистрирован на punbb.informer.com, запостите это туда и отпишитесь здесь, пожалуйста.
17 24.08.2009 08:49
Re: Размеры смайлика и parser.php, help.php (5 ответов, оставленных в Общие вопросы)
Лучше сразу в сад.
Мое мнение - сделано так еще отцом основателем с целью повышения производительности. Перекочевало в новую ветку с небольшими изменениями - не до смайликов, есть поважнее дела.
В твоем примере недостаток в постоянном getimagesize. По-моему лучше это сделать один раз и положить результаты в кэш, потом уже по необходимости брать из кэша, подключаемого в парсере.Добавлено спустя 5 минут 15 секунд:
Кстати, этот вопрос отдан на откуп разработчикам расширений - не нравится стандартная реализация, делайте своё, хук для этого есть.
А если задуматься, то возникает вопрос: а зачем вообще для тега img атрибуты width и height?! Браузеру они нафик не нужны. XHTML их тоже не просит. Зачем? ![]()
Насчет хука: в parser.php есть красивый хук. А вот в help.php приходится использовать str_replace! ![]()
ПС: может кто-нибудь запостит проблему на http://punbb.informer.com/forums/ , а то очень лениво регистрироваться там!
Думаю лучший вариант: удалить width="15" height="15" вообще!
18 24.08.2009 07:49
Тема: Размеры смайлика и parser.php, help.php (5 ответов, оставленных в Общие вопросы)
Меня очень смущает такая вещь:
foreach ($smilies as $smiley_text => $smiley_img)
{
if (strpos($text, $smiley_text) !== false)
$text = preg_replace("#(?<=[>\s])".preg_quote($smiley_text, '#')."(?=\W)#m", '<img src="'.$base_url.'/img/smilies/'.$smiley_img.'" width="15" height="15" alt="'.substr($smiley_img, 0, strrpos($smiley_img, '.')).'" />', $text);
}width="15" height="15" - Зачем так?
Может кто-нибудь знает с какой целью авторы форума делают размеры смайлика статичными. Это глупо. Неужели это повышает производительность настолько, чтобы так писать? ![]()
Я думаю правильно должно быть так:
foreach ($smilies as $smiley_text => $smiley_img)
{
if (strpos($text, $smiley_text) !== false)
$attr = getimagesize($base_url.'/img/smilies/'.$smiley_img);
$text = preg_replace("#(?<=[>\s])".preg_quote($smiley_text, '#')."(?=\W)#m", '<img src="'.$base_url.'/img/smilies/'.$smiley_img.'" '.$attr[3].' alt="'.substr($smiley_img, 0, strrpos($smiley_img, '.')).'" />', $text);
}PS: А на этом форуме есть разработчики PunBB, или мне сразу идти в сад
19 24.08.2009 07:08
Re: Как поменять надпись "На основе PunBB" ??? (10 ответов, оставленных в Общие вопросы)
Там написанно:
"Для отключения сообщений режима отладки нужно отредактировать файл essentials.php в каталоге "include"
Но у меня в папке "include" нет такого файла!!! И как быть???
Странно. Этот файл должен быть. Попробуйте скачать дистрибутив форума:
http://punbb.informer.com/downloads.php#1.3.4
И сравнить с ним содержимое папки вашего форума. Файл Essentials должен быть 100%. Возможно вы не там ищете!
Не совсем понял о чем речь:/, но уже не столь важно!
*** Хуки ***
Хуки(перехваты обработки) используются для того, чтобы не вносить изменения в исходный код форума (хак ядра), т.к. любые изменения в ядре могут затруднить обновление до новых версий. (Согласитесь, трудно при каждом обновлении вносить требуемые именно для вашего форума изменения)
Пример использования хука (решение вопроса The pun_repository official extension is installed ...)
1) создаете папку no_pun_ext в папке extensions.
2) в ней создаете файл manifest.xml с таким содержанием:
<?xml version="1.0" encoding="utf-8"?>
<extension engine="1.0">
<id>no_pun_ext</id>
<title>Откючение показа расширений</title>
<description>Сокрытие строки с расширениями в forum-about.</description>
<version>1.0</version>
<author>Andrew</author>
<minversion>1.3.4</minversion>
<maxtestedon>1.3.4</maxtestedon>
<hooks>
<hook id="co_common"><![CDATA[
$pun_extensions_used = array_merge(isset($pun_extensions_used) ? $pun_extensions_used : array(), array($ext_info['id']));
]]></hook>
<!-- HIDE LIST OF EXTENSIONS -->
<hook id="es_essentials"><![CDATA[
define('PUN_EXTENSIONS_USED', 1);
]]></hook>
</hooks>
</extension>Где
1) <id>no_pun_ext</id> - идентификатор расширения. Должен совпадать с именем папки в которой находится файл manifest.xml.
2)
<hook id="co_common"><![CDATA[
$pun_extensions_used = array_merge(isset($pun_extensions_used) ? $pun_extensions_used : array(), array($ext_info['id']));
]]></hook>Служебный хук. Его нельзя изменять, если Вы не знаете что он делает.
3)
<hook id="es_essentials"><![CDATA[Хук(идентификатор или имя хука(в данном случае это: "es_essentials")).
4)
define('PUN_EXTENSIONS_USED', 1);Код PHP, который будет выполнен при вызове хука ядром форума.
5)
]]></hook>Закрывающий тег для хука.
Затем в браузере заходите в "Администрирование >> Расширения" своего форума и там устанавливаете созданное расширение.
Надеюсь помог разобраться. ![]()
20 23.08.2009 21:43
Re: Как поменять надпись "На основе PunBB" ??? (10 ответов, оставленных в Общие вопросы)
Друзья, помогите пожалуйста, у меня версия 1.3.4
снизу надпись на английском
The pun_repository official extension is installed. Copyright © 2003–2009 PunBB.
как её можно поменять на русский язык или удалить???
http://punbb.ru/post21056.html#p21056
И как заменить надпись: "На основе PunBB" на "Сделано с помощью PunBB" Полность удалять не собираюсь, т.к. с уважением отношусь к разработчикам данного продукта.:):)
/lang/russian/common.php - строка 88.
Если хочется удалить - файл footer.php - строка 41.
Или свой модуль и хук ft_about_end. А в нем уже или str_replace или preg_replace.