Как добавить свою функцию?

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

Ваш вопрос может быть удален без объяснения причин, если на него есть ответы по приведённым ссылкам (а вы рискуете получить предупреждение ;) ).
Аватара пользователя
Otaku_Sempai
phpBB 1.2.0
Сообщения: 12
Стаж: 15 лет 11 месяцев
Благодарил (а): 2 раза

Как добавить свою функцию?

Сообщение Otaku_Sempai »

Здарвствуйте возникла необходимость сделать вывод списка форумов в шапку.

вот функция:

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

function forum_top_menu() {

$sql = "SELECT forum_id, forum_name, forum_topics FROM forums
            ORDER BY forum_id";

    $result = mysql_query($sql);

    if (!$result) {
        echo "Could not successfully run query ($sql) from DB: " . mysql_error();
        exit;
    }
    
    if (mysql_num_rows($result) == 0) {
        echo "No rows found, nothing to print so am exiting";
        exit;
    }

      while ($row = mysql_fetch_assoc($result)) {
      echo "<a href='viewforum.php?f=".$row['forum_id']."'>".$row['forum_name']." (".$row['forum_topics'].")</a>";
    }
        
    mysql_free_result($result);

}
нужно добавить её в шаблон overall_header.html.

Помогите пожалуйста
Аватара пользователя
MIT
Former team member
Сообщения: 2500
Стаж: 17 лет 6 месяцев
Откуда: 56°20′02″ с. ш. 36°42′45″ в. д.
Благодарил (а): 3 раза
Поблагодарили: 351 раз

Re: Как добавить свою функцию?

Сообщение MIT »

Душой и сердцем мы с тобой.
Чем помочь-то?
Аватара пользователя
Sheer
Former team member
Сообщения: 12113
Стаж: 19 лет 7 месяцев
Откуда: Калининград не Кенигсберг
Благодарил (а): 54 раза
Поблагодарили: 2756 раз

Re: Как добавить свою функцию?

Сообщение Sheer »

Ну во-первых
Заменить

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

$sql = "SELECT forum_id, forum_name, forum_topics FROM forums
            ORDER BY forum_id"; 
На

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

$sql = 'SELECT forum_id, forum_name, forum_topics FROM '.FORUMS_TABLE.'
            ORDER BY forum_id'; 
Заменить

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

echo "<a href='viewforum.php?f=".$row['forum_id']."'>".$row['forum_name']." (".$row['forum_topics'].")</a>"; 
на

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

$template->assign_block_vars('row', array(
        'ITEM'        => "<a href='viewforum.php?f=".$row['forum_id']."'>".$row['forum_name']." (".$row['forum_topics'].")</a>",
)); 
В overall_header.html всунуть

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

<!-- BEGIN row -->
{row.ITEM}<br>
<!-- END row -->
Куда и как оформить, смотри сам.

ЗЫ. Вместо echo() всегда и везде следует использовать trigger_error()
Аватара пользователя
Otaku_Sempai
phpBB 1.2.0
Сообщения: 12
Стаж: 15 лет 11 месяцев
Благодарил (а): 2 раза

Re: Как добавить свою функцию?

Сообщение Otaku_Sempai »

Огромное спасибо! Сейчас попробую.

А тольно замороченые все эти phpBB переменные))

п.с. а не подскажите как этот, ммм... язык програмиирование называется используемый в phpbb? вот типа этого:

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

<!-- BEGIN row -->
{row.ITEM}<br>
<!-- END row -->
что это вообще такое? просто впервые такое вижу=)
Аватара пользователя
Sheer
Former team member
Сообщения: 12113
Стаж: 19 лет 7 месяцев
Откуда: Калининград не Кенигсберг
Благодарил (а): 54 раза
Поблагодарили: 2756 раз

Re: Как добавить свою функцию?

Сообщение Sheer »

Яpык программирования используемый в phpbb называется php :D
Otaku_Sempai писал(а): что это вообще такое?
А это html. Подобные конструкции сплошь и рядом в html-шаблонах стилей, смотри styles/название_стиля/template
Аватара пользователя
Палыч
Former team member
Сообщения: 9683
Стаж: 20 лет 3 месяца
Откуда: Питер
Благодарил (а): 3 раза
Поблагодарили: 454 раза

Re: Как добавить свою функцию?

Сообщение Палыч »

Otaku_Sempai писал(а):что это вообще такое?
Это синтаксис блоков, используемых в шаблонах phpBB3
Почитать можно здесь Tutorial.Template+syntax
Не все то WINDOWS, что висит... phpBB только учусь.
ICQ, email, ЛС - только для личных сообщений. Вопросы по phpbb только на форумах. По найму не работаю.
Аватара пользователя
MIT
Former team member
Сообщения: 2500
Стаж: 17 лет 6 месяцев
Откуда: 56°20′02″ с. ш. 36°42′45″ в. д.
Благодарил (а): 3 раза
Поблагодарили: 351 раз

Re: Как добавить свою функцию?

Сообщение MIT »

Sheer писал(а):

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

$sql = 'SELECT forum_id, forum_name, forum_topics FROM '.FORUMS_TABLE.'
ORDER BY forum_id'; 
Вообще-то у нас есть ещё права доступа и посетители могут не иметь права видеть какой-то из форумов :roll:
Аватара пользователя
Sheer
Former team member
Сообщения: 12113
Стаж: 19 лет 7 месяцев
Откуда: Калининград не Кенигсберг
Благодарил (а): 54 раза
Поблагодарили: 2756 раз

Re: Как добавить свою функцию?

Сообщение Sheer »

Ну это на усмотрение разработчика функции. Я же просто ответил на вопрос, как сгенерированную ссылку воткнуть в шапку.
Аватара пользователя
Otaku_Sempai
phpBB 1.2.0
Сообщения: 12
Стаж: 15 лет 11 месяцев
Благодарил (а): 2 раза

Re: Как добавить свою функцию?

Сообщение Otaku_Sempai »

MIT писал(а):
Sheer писал(а):

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

$sql = 'SELECT forum_id, forum_name, forum_topics FROM '.FORUMS_TABLE.'
ORDER BY forum_id'; 
Вообще-то у нас есть ещё права доступа и посетители могут не иметь права видеть какой-то из форумов :roll:
не не всё норм, просто надо менюшку сверху страницы сделать, все форумы открыты.

Палыч, спасибо за ссыль почитаю, а то чисто интуитивно работать приходиться

Добавлено спустя 25 минут 3 секунды:

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

$template->assign_block_vars('row', array(
        'ITEM'        => "<a href='viewforum.php?f=".$row['forum_id']."'>".$row['forum_name']." (".$row['forum_topics'].")</a>",
)); 
во второй строчке вот такую ошибку выдаёт... функцию вставил в functions_display.php в самый конец. мож что не так сделал? :?

Fatal error: Call to a member function on a non-object
Аватара пользователя
MIT
Former team member
Сообщения: 2500
Стаж: 17 лет 6 месяцев
Откуда: 56°20′02″ с. ш. 36°42′45″ в. д.
Благодарил (а): 3 раза
Поблагодарили: 351 раз

Re: Как добавить свою функцию?

Сообщение MIT »

Угу.
Перед использованием переменных их надо объявлять. А вообще, запихни этот код в функцию functions.php:page_header и не мучайся.
Аватара пользователя
Otaku_Sempai
phpBB 1.2.0
Сообщения: 12
Стаж: 15 лет 11 месяцев
Благодарил (а): 2 раза

Re: Как добавить свою функцию?

Сообщение Otaku_Sempai »

MIT
ничего не понял что надо сделать, можно более доступно? =)
Аватара пользователя
MIT
Former team member
Сообщения: 2500
Стаж: 17 лет 6 месяцев
Откуда: 56°20′02″ с. ш. 36°42′45″ в. д.
Благодарил (а): 3 раза
Поблагодарили: 351 раз

Re: Как добавить свою функцию?

Сообщение MIT »

Можно.
Otaku_Sempai писал(а):функцию вставил в functions_display.php в самый конец
Что ты туда вставил? Покажи.
Аватара пользователя
Otaku_Sempai
phpBB 1.2.0
Сообщения: 12
Стаж: 15 лет 11 месяцев
Благодарил (а): 2 раза

Re: Как добавить свою функцию?

Сообщение Otaku_Sempai »

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

function forum_top_menu() {

$sql = 'SELECT forum_id, forum_name, forum_topics FROM '.FORUMS_TABLE.'
            ORDER BY forum_id'; 

    $result = mysql_query($sql);

    if (!$result) {
        echo "Could not successfully run query ($sql) from DB: " . mysql_error();
        exit;
    }
    
    if (mysql_num_rows($result) == 0) {
        echo "No rows found, nothing to print so am exiting";
        exit;
    }

	while ($row = mysql_fetch_assoc($result)) {
    $template->assign_block_vars('row', array(
        'ITEM'        => "<a href='viewforum.php?f=".$row['forum_id']."'>".$row['forum_name']." (".$row['forum_topics'].")</a>")); 
    }
        
    mysql_free_result($result);

}
Добавлено спустя 1 минуту 10 секунд:
Ошибку пишет тут:

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

$template->assign_block_vars('row', array(
        'ITEM'        => "<a href='viewforum.php?f=".$row['forum_id']."'>".$row['forum_name']." (".$row['forum_topics'].")</a>")); 
Аватара пользователя
MIT
Former team member
Сообщения: 2500
Стаж: 17 лет 6 месяцев
Откуда: 56°20′02″ с. ш. 36°42′45″ в. д.
Благодарил (а): 3 раза
Поблагодарили: 351 раз

Re: Как добавить свою функцию?

Сообщение MIT »

Вообще-то надо бы привести этот код к стандартам написания кода в рамках phpBB и общим принципам программирования на PHP.
Выглядеть оно будет вот таким образом:

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

$sql = 'SELECT forum_id, forum_name, forum_topics FROM ' . FORUMS_TABLE . ' ORDER BY forum_id'; 
$result = $db->sql_query($sql);

while ($row = $db->sql_fetchrow($result))
{
    $template->assign_block_vars('row', array(
        'ITEM'    => sprintf('<a href="%s">%s (%s)</a>', append_sid("{$phpbb_root_path}viewforum.$phpEx", 'f=' . $row['forum_id']), htmlspecialchars($row['forum_name']), $row['forum_id']),
    ));
}

$db->sql_freeresult($result); 
Но данный код будет работать только в контексте правильно составленной функции. Моё предложение добавить его в функцию page_header файла includes\functions.php всё ещё актуально. Например, перед строкой

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

    // The following assigns all _common_ variables that may be used at any point in a template. 
Однако, если тебе ну очень хочется свою собственную функцию, то в её начале надо объявить глобальные переменные, которые мы используем в этом коде:

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

global $phpbb_root_path, $phpEx, $db, $template; 
Аватара пользователя
Otaku_Sempai
phpBB 1.2.0
Сообщения: 12
Стаж: 15 лет 11 месяцев
Благодарил (а): 2 раза

Re: Как добавить свою функцию?

Сообщение Otaku_Sempai »

MIT
Огромнейшее спасибо, всё работает! (запихнул в functions.php) Вы меня уже второй раз выручаете =)

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