Функция формирования пользовательских bbcode - вопрос.

Форум для авторов модов для phpBB 3.0.x. Здесь можно попросить помощи в разработке у коллег.
Правила форума
Местная Конституция | Шаблон запроса | Документация (phpBB3) | Переход на 3.0.6 и выше | FAQ-3 (phpbb3) | Как задавать вопросы | Как устанавливать моды

Ваш вопрос может быть удален без объяснения причин, если на него есть ответы по приведённым ссылкам (а вы рискуете получить предупреждение ;) ).
John Smith
phpBB 1.4.2
Сообщения: 62
Стаж: 18 лет 5 месяцев
Благодарил (а): 1 раз
Поблагодарили: 1 раз

Функция формирования пользовательских bbcode - вопрос.

Сообщение John Smith »

Мужчины, а у меня такой вопрос.
Есть в functions_display.php такая функция:

Код: Выделить всё

/**
* Assign/Build custom bbcodes for display in screens supporting using of bbcodes
* The custom bbcodes buttons will be placed within the template block 'custom_codes'
*/
function display_custom_bbcodes()
{
    global $db, $template;

    // Start counting from 22 for the bbcode ids (every bbcode takes two ids - opening/closing)
    $num_predefined_bbcodes = 22;

    $sql = 'SELECT bbcode_id, bbcode_tag, bbcode_helpline
        FROM ' . BBCODES_TABLE . '
        WHERE display_on_posting = 1
        ORDER BY bbcode_tag';
    $result = $db->sql_query($sql);

    $i = 0;
    while ($row = $db->sql_fetchrow($result))
    {
        $template->assign_block_vars('custom_tags', array(
            'BBCODE_NAME'        => "'[{$row['bbcode_tag']}]', '[/" . str_replace('=', '', $row['bbcode_tag']) . "]'",
            'BBCODE_ID'            => $num_predefined_bbcodes + ($i * 2),
            'BBCODE_TAG'        => $row['bbcode_tag'],
            'BBCODE_HELPLINE'    => $row['bbcode_helpline'],
            'A_BBCODE_HELPLINE'    => str_replace(array('&', '"', "'", '<', '>'), array('&', '"', "\'", '<', '>'), $row['bbcode_helpline']),
        ));

        $i++;
    }
    $db->sql_freeresult($result);
} 
Никак не могу понять, на шо там строчка "'BBCODE_ID' => $num_predefined_bbcodes + ($i * 2)", и как оно работает. Не, ну понятно, что оно формирует четные ID больше 22, потому что нечетные положены закрывающим тегам, а все, что до 22 - это встроенные теги, но все равно...
  1. Как BBCODE_ID связан со столбцом phpbb_bbcodes/bbcode_id (никак, судя по всему)?
  2. Что за переменная $template? Используется в шаблонах при формировании страницы?
  3. Где BBCODE_ID используется в дальнейшем (меня терзают смутные сомнения, что BBCODE_ID нужен только на этапе работы формы, где эти самые ббкоды используются)?
Аватара пользователя
nissin
phpBB 3.0.4
Сообщения: 2229
Стаж: 18 лет 9 месяцев
Откуда: Астана
Благодарил (а): 7 раз
Поблагодарили: 344 раза

Re: Функция формирования пользовательских bbcode - вопрос.

Сообщение nissin »

Сами всё знаете и спрашиваете :)
В BBCODE_NAME прописано два тега (открывающий и закрывающий), поэтому BBCODE_ID увеличивается с шагом два.
1. никак не связан
2. да, глобальная переменная для шаблонов.
3. да, только при работе формы, при формировании Javascript кодов для вставки BBCode.
John Smith
phpBB 1.4.2
Сообщения: 62
Стаж: 18 лет 5 месяцев
Благодарил (а): 1 раз
Поблагодарили: 1 раз

Re: Функция формирования пользовательских bbcode - вопрос.

Сообщение John Smith »

Ну, это были просто догадки. :)

Тогда вопрос в развитие темы. Когда я внутри функции display_custom_bbcodes() вставляю конструкцию типа if($auth->acl_get('m_')), при этом в начале функции, в глобальных объявляю $auth, то все работает, а если делаю конструкцию if($auth->acl_get('m_edit', $forum_id)), то ругается на $forum_id, причем не только в functions_display.php, но и в functions.php. Вопрос - чего я забыл объявить? На ум приходит добавить в globals $forum_id, но мне почему-то (интуитивно) кажется, что это не правильно, или этого будет недостаточно.

P.S. Можно на "ты" ;)
John Smith
phpBB 1.4.2
Сообщения: 62
Стаж: 18 лет 5 месяцев
Благодарил (а): 1 раз
Поблагодарили: 1 раз

Re: Функция формирования пользовательских bbcode - вопрос.

Сообщение John Smith »

Когда вставляю if($auth->acl_get('m_edit', $forum_id)) внутри функции (сама функция в первом посте), получаю ошибку:

Код: Выделить всё

[phpBB Debug] PHP Notice: in file /includes/functions_display.php on line 854: Undefined variable: forum_id
[phpBB Debug] PHP Notice: in file /includes/functions.php on line 3780: Cannot modify header information - headers already sent by (output started at /includes/functions.php:3184)
[phpBB Debug] PHP Notice: in file /includes/functions.php on line 3782: Cannot modify header information - headers already sent by (output started at /includes/functions.php:3184)
[phpBB Debug] PHP Notice: in file /includes/functions.php on line 3783: Cannot modify header information - headers already sent by (output started at /includes/functions.php:3184)
[phpBB Debug] PHP Notice: in file /includes/functions.php on line 3784: Cannot modify header information - headers already sent by (output started at /includes/functions.php:3184)
functions.php начиная со строки 3780 (самый конец функции page_header()):

Код: Выделить всё

header('Content-type: text/html; charset=UTF-8');

header('Cache-Control: private, no-cache="set-cookie"');
header('Expires: 0');
header('Pragma: no-cache'); 
Как иначе заставить работать, кроме как передать $forum_id при вызове функции, я так и не придумал. Если передать - то работает.
Аватара пользователя
Поручик
Former team member
Сообщения: 3942
Стаж: 21 год 4 месяца
Откуда: Оренбург (Южный Урал)
Благодарил (а): 24 раза
Поблагодарили: 54 раза

Re: Функция формирования пользовательских bbcode - вопрос.

Сообщение Поручик »

Надо в начале функции объявить

Код: Выделить всё

     global $forum_id;
Возможно.
Профессионал - тот же дилетант, только знающий, где ошибётся.
Генератор db_update.php для phpBB2 с некоторыми удобствами. Многие моды я беру или ищу здесь, здесь, тут
Все консультации только на форуме, приваты и стук в аську по таким вопросам игнорируются!
FAQ-phpBB3 | Ошибки новичков, или как не поссориться с модератором | Правила конференции

наш форум http://forum.aeroion.ru/cat1.html
John Smith
phpBB 1.4.2
Сообщения: 62
Стаж: 18 лет 5 месяцев
Благодарил (а): 1 раз
Поблагодарили: 1 раз

Re: Функция формирования пользовательских bbcode - вопрос.

Сообщение John Smith »

Поручик, помогло, спасибо.
Нигде не натыкался на подобные объявления этой переменной.

Добавлено спустя 28 минут 10 секунд:
В общем, что получилось в итоге - выделил отдельно модераторские теги. Модераторские теги видны только модераторам (право редактировать сообщения), и собраны в кучку в конце пользовательских тегов. Модераторские теги парсятся на общих основаниях, т.к. делалось все исключительно удобства ради - чтоб модеры могли не запоминать теги, а тыркать кнопочки.
Если есть интерес, как сделать - расскажу.

Вернуться в «Для авторов (phpBB 3.0.x)»