1

(17 ответов, оставленных в Расширения v1.3)

Наконец я нашел в себе силы и время(как говорится, жизнь бьет ключом(гаечным  smile )) довести инструкцию до какого-либо логического завершения. Хоть она и не является полной, но я думаю поможет новичкам в освоении. Стартап как-бы есть, а в деталях дело за гуглом.

2

(17 ответов, оставленных в Расширения v1.3)

kvo пишет:

andrew, хотелось бы ещё увидеть на примере простого расширения работу с кэшем, то есть как толкать в кэш свои данные или хуки, и работу с redirect'ом (пытался разобраться в коде расширения portal_by_daris - ничего не понял).
Тоже думаю было бы уместно показать тэги <dependencies></dependencies>, <install></install> и <uninstall></uninstall>

ОК. Пожелание принято.

hcs пишет:

andrew, У меня предложение - делать отдельные вопросы отдельными сообщениями, чтобы во-первых не превысить максимальный размер сообщения, и чтобы иметь под рукой прямую ссылку.

Согласен. Я бы так и делал сразу, если бы не склейка сообщений.

Продолжение откладывается до субботы, т.к. мне нужно уехать. Не скучайте smile

3

(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

(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

(7 ответов, оставленных в Общие вопросы)

hcs пишет:

perec,  спасибо за замечание, надо сделать инструкцию.
Может быть тебя не затруднит накидать несколько основных вопросов по установке, которые возникали, или какие были трудности?

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

6

(5 ответов, оставленных в Общие вопросы)

hcs пишет:

Кстати, несмотря на то, что браузеры не валятся с ошибками из-за отсутствия  этих атрибутов, тем не менее они обязательны по стандарту,  это подтверждают валидаторы.  Удалять-неудалять это выбор веб-мастера smile

Эээм... Не понял. Для ПунББ 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

(4 ответов, оставленных в Общие вопросы)

Signend пишет:

а откуда смыйлы брать? какие-то очень маленькие они получаются.

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

(3 ответов, оставленных в Общие вопросы)

s1im пишет:

выдает такое вот сообщение

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.

Flamaster пишет:

сделал хук, с кодом ниже. Может что-то нет так??? Подскажите, дураку, где ошибка

<?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, но для того чтобы все заработало расширение нужно переустановить в админке форума.

Фуххх. Надеюсь разберешься.

Flamaster пишет:

Друзья, как заменить синие стандартные квадратики обозначения форумов?

И второй вопрос, как убрать название форума в верхнем левом углу, т.е. напримере punbb.ru - это надпись "PunBB по-русски"?

П.С. Вы, наверное, посоветуете воспользоваться поиском, но 15 минут потраченного мною времени на это занятие не дали никаких результатов?:rolleyes:

Лентяй.
1) http://punbb.ru/topic3323-standartnye-z … oruma.html
2) испоьзуем хук

hd_gen_elements

Код:

$gen_elements['<!-- forum_title -->'] = '';

11

(5 ответов, оставленных в Расширения v1.3)

насчет расширения не скажу, но из редакторов советую TinyMCE, у которого есть плагин bbcode. По поводу интеграции, как вариант, переделать расширение pun_bbcode, вместо его javascript вписав свой(TinyMCE).

12

(21 ответов, оставленных в Общие вопросы)

Nikoshka пишет:

Заглянул в pubnbb, черт только css вынесен в тему sad ...

Можно скопировать main.tpl и admin.tpl в папку темы и там их редактировать.

13

(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

(4 ответов, оставленных в Стили и темы)

fil.diesel пишет:

На досуге скачал движок форума 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

(6 ответов, оставленных в Общие вопросы)

sirmax07 пишет:

Мелкий глюк:
В форме для отправки личных сообщений пользователю слова "Сообщение" и "Обязательно" налезают друг на друга.
Версия PunchBB 1.3.2, и для английского, и для русского варианта. Смотрю через браузер Internet Explorer 8.
Через оперу все нормально показывается.

Решение http://punbb.ru/post25037.html#p25037

16

(0 ответов, оставленных в Стили и темы)

Надеюсь кому-нибудь пригодится:

Вот так выглядит textarea для ответа в браузере Google Chrome (в Mozilla Firefox результат такой-же):
i.piccy.info/i4/61/63/f6709b74abb28c0b1f4d57a84b7b.jpeg

А так в Internet Explorer 8 (накладывается надпись обязательно):
i.piccy.info/i4/17/5a/3b22ced6521828d1b20bea7f5a73.jpeg

А так в IE7 (IE8 в режиме совместимости) (Нет выравнивания по верхней линии надписи и текстовой области):
i.piccy.info/i4/ef/11/f231860bf03fce5db53ee7d68d42.jpeg

Видно, что верстка сосет. Для исправления этой неприятности открываем файл Oxygen.css (в папке /style/Oxygen) (или файл вашей темы (в папке вашей темы smile )).

Находим со строки 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

(5 ответов, оставленных в Общие вопросы)

hcs пишет:

Лучше сразу в сад.
Мое мнение - сделано так еще отцом основателем с целью повышения производительности. Перекочевало в новую ветку с небольшими изменениями - не до смайликов, есть поважнее дела.
В твоем примере недостаток в постоянном getimagesize. По-моему лучше это сделать один раз и положить результаты в кэш, потом уже по необходимости брать из кэша, подключаемого в парсере.

Добавлено спустя 5 минут 15 секунд:

Кстати, этот вопрос отдан на откуп разработчикам расширений - не нравится стандартная реализация, делайте своё, хук для этого есть.

А если задуматься, то возникает вопрос: а зачем вообще для тега img атрибуты width и height?! Браузеру они нафик не нужны. XHTML их тоже не просит. Зачем? smile

Насчет хука: в parser.php есть красивый хук. А вот в help.php приходится использовать str_replace! sad

ПС: может кто-нибудь запостит проблему на http://punbb.informer.com/forums/ , а то очень лениво регистрироваться там! roll Думаю лучший вариант: удалить width="15" height="15" вообще!

18

(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" - Зачем так?
Может кто-нибудь знает с какой целью авторы форума делают размеры смайлика статичными. Это глупо. Неужели это повышает производительность настолько, чтобы так писать? hmm

Я думаю правильно должно быть так:

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

(10 ответов, оставленных в Общие вопросы)

Flamaster пишет:

Там написанно:

"Для отключения сообщений режима отладки нужно отредактировать файл essentials.php в каталоге "include"

Но у меня в папке "include" нет такого файла!!! И как быть???

Странно. Этот файл должен быть. Попробуйте скачать дистрибутив форума:
http://punbb.informer.com/downloads.php#1.3.4
И сравнить с ним содержимое папки вашего форума. Файл Essentials должен быть 100%. Возможно вы не там ищете!

Flamaster пишет:

Не совсем понял о чем речь:/, но уже не столь важно!


*** Хуки ***

Хуки(перехваты обработки) используются для того, чтобы не вносить изменения в исходный код форума (хак ядра), т.к. любые изменения в ядре могут затруднить обновление до новых версий. (Согласитесь, трудно при каждом обновлении вносить требуемые именно для вашего форума изменения)

Пример использования хука (решение вопроса 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>

Закрывающий тег для хука.



Затем в браузере заходите в "Администрирование >> Расширения" своего форума и там устанавливаете созданное расширение.

Надеюсь помог разобраться. wink

20

(10 ответов, оставленных в Общие вопросы)

Flamaster пишет:

Друзья, помогите пожалуйста, у меня версия 1.3.4
снизу надпись на английском
The pun_repository official extension is installed. Copyright © 2003–2009 PunBB.
как её можно поменять на русский язык или удалить???

http://punbb.ru/post21056.html#p21056

Flamaster пишет:

И как заменить надпись: "На основе PunBB" на "Сделано с помощью PunBB" Полность удалять не собираюсь, т.к. с уважением отношусь к разработчикам данного продукта.:):)

/lang/russian/common.php - строка 88.
Если хочется удалить - файл footer.php - строка 41.
Или свой модуль и хук ft_about_end. А в нем уже или str_replace или preg_replace.