Уважаемые пользователи!
C 7 ноября 2020 года phpBB Group прекратила выпуск обновлений и завершила дальнейшее развитие phpBB версии 3.2.
С 1 августа 2024 года phpBB Group прекращает поддержку phpBB 3.2 на официальном сайте.
Сайт официальной русской поддержки phpBB Guru продолжит поддержку phpBB 3.2 до 31 декабря 2024 года.
С учетом этого, настоятельно рекомендуется обновить конференции до версии 3.3.

Первый опыт :)

Форум для авторов модов для phpBB 2.0.x.
Аватара пользователя
svk
phpBB 2.0.3
Сообщения: 384
Стаж: 18 лет 9 месяцев
Откуда: Москва, Fortuna-net

Первый опыт :)

Сообщение svk »

Мой первый опыт в написании модов, сделал небольшой мод что бы можно было прям из админки добавлять html код в шапку и в область ссылок. Слижком уж часто меня просили что то там изменить :)

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

#
#-----[ SQL ]------------------------------
#
CREATE TABLE `phpbb_top` ( 
`name` VARCHAR( 255 ) NOT NULL ,
`value` TEXT NOT NULL );

#
#-----[ SQL ]------------------------------
#
INSERT INTO `phpbb_top` ( `name` , `value` ) VALUES ( 'links', '');
INSERT INTO `phpbb_top` ( `name` , `value` ) VALUES ( 'top', '');

#
#-----[ OPEN ]------------------------------
# 
includes/page_header.php
#
#-----[ FIND ]-----------------------------------
# 
$l_timezone = (count($l_timezone) > 1 && $l_timezone[count($l_timezone)-1] != 0) ? $lang[sprintf('%.1f', $board_config['board_timezone'])] : $lang[number_format($board_config['board_timezone'])];
#
#-----[ AFTER, ADD ]-----------------------------------
#
//Custom Top And links
//Add header and links from database
$sql = "SELECT value FROM phpbb_top WHERE name = 'top'
   LIMIT 1";

if ( !($result = $db->sql_query($sql)) ) 
{ 
message_die(GENERAL_ERROR, "Could not obtain header information.", '', __LINE__, __FILE__, $sql); 
} 

$postrow = $db->sql_fetchrow($result); 

$topp = $postrow['value']; 
$topp = str_replace("'", "\'", $topp);

$sql = "SELECT config_value FROM phpbb_config WHERE config_name = 'links'
   LIMIT 1";

if ( !($result = $db->sql_query($sql)) ) 
{ 
message_die(GENERAL_ERROR, "Could not obtain header information.", '', __LINE__, __FILE__, $sql); 
} 

$postrow = $db->sql_fetchrow($result); 

$links = $postrow['value']; 
$links = str_replace("'", "\'", $links);

//End
#
#-----[ FIND ]-----------------------------------
# 
	'T_SPAN_CLASS3' => $theme['span_class3'],
#
#-----[ AFTER, ADD ]-----------------------------------
#
	'TOPP' => $topp,
	'LINKS' => $links,

#
#-----[ OPEN ]------------------------------
# 
templates/SubSilver/overall_header.tpl
#
#-----[ FIND ]-----------------------------------
#
		<td class="bodyline"><table width="100%" cellspacing="0" cellpadding="0" border="0">
#
#-----[ AFTER, ADD ]-----------------------------------
#
		{TOPP}

#
#-----[ FIND ]-----------------------------------
#
					<td height="25" align="center" valign="top" nowrap="nowrap"><span class="mainmenu">&nbsp;<a href="{U_PROFILE}" class="mainmenu"><img src="templates/subSilver/images/icon_mini_profile.gif" width="12" height="13" border="0" alt="{L_PROFILE}" hspace="3" />{L_PROFILE}</a>&nbsp; &nbsp;<a href="{U_PRIVATEMSGS}" class="mainmenu"><img src="{PRIVMSG_IMG}" width="12" height="13" border="0" alt="{PRIVATE_MESSAGE_INFO}" hspace="3" />{PRIVATE_MESSAGE_INFO}</a>&nbsp; &nbsp;<a href="{U_LOGIN_LOGOUT}" class="mainmenu"><img src="templates/subSilver/images/icon_mini_login.gif" width="12" height="13" border="0" alt="{L_LOGIN_LOGOUT}" hspace="3" />{L_LOGIN_LOGOUT}</a>&nbsp;</span></td>
#
#-----[ AFTER, ADD ]-----------------------------------
#
<br />{LINKS}

#
#-----[ OPEN ]------------------------------
# 
admin/admin_board.php

#
#-----[ FIND ]-----------------------------------
#
		if( isset($HTTP_POST_VARS['submit']) )
		{

#
#-----[ AFTER, ADD ]-----------------------------------
#
				if ($config_name == 'links')
				{
			     $sql = "UPDATE phpbb_top SET value = '$new[links]' WHERE name = 'links'";
				if( !$db->sql_query($sql) )
					{
				message_die(GENERAL_ERROR, "Failed to update general configuration for phpbb_top", "", __LINE__, __FILE__, $sql);
					}
				}
				
				
				if ($config_name == 'topp')
				{
			     $sql = "UPDATE phpbb_top SET value = '$new[topp]' WHERE name = 'top'";
				if( !$db->sql_query($sql) )
					{
				message_die(GENERAL_ERROR, "Failed to update general configuration for phpbb_top", "", __LINE__, __FILE__, $sql);
					}
				}

#
#-----[ FIND ]-----------------------------------
#
	if( isset($HTTP_POST_VARS['submit']) )
	{			
		$message = $lang['Config_updated'] . "<br /><br />" . sprintf($lang['Click_return_config'], "<a href=\"" . append_sid("admin_board.$phpEx") . "\">", "</a>") . "<br /><br />" . sprintf($lang['Click_return_admin_index'], "<a href=\"" . append_sid("index.$phpEx?pane=right") . "\">", "</a>");

		message_die(GENERAL_MESSAGE, $message);
	}
}

#
#-----[ AFTER, ADD ]-----------------------------------
#
$sql = "SELECT * FROM phpbb_top WHERE name = 'links'";
	if ( !($result = $db->sql_query($sql)) ) 
{ 
message_die(GENERAL_ERROR, "Could not obtain top or links information.", '', __LINE__, __FILE__, $sql); 
} 

$postrow = $db->sql_fetchrow($result); 
$new[links] = $postrow['value'];
$sql = "SELECT * FROM phpbb_top WHERE name = 'top'";
	if ( !($result = $db->sql_query($sql)) ) 
{ 
message_die(GENERAL_ERROR, "Could not obtain top or links information.", '', __LINE__, __FILE__, $sql); 
} 

$postrow = $db->sql_fetchrow($result); 
$new[topp] = $postrow['value']; 		

#
#-----[ FIND ]-----------------------------------
#
$template->pparse("body");

include('./page_footer_admin.'.$phpEx);

# 
#-----[ BEFORE, ADD ]------------------------------------------ 
#
$template->assign_vars(array(
	"LINKS" => $new['links'],
	"TOPP" => $new['topp']));
));

# 
#-----[ OPEN ]------------------------------------------ 
# 
templates/subSilver/admin/board_config_body.tpl

# 
#-----[ FIND ]------------------------------------------ 
# 
	<tr>
		<td class="row1">{L_DISABLE_BOARD}<br /><span class="gensmall">{L_DISABLE_BOARD_EXPLAIN}</span></td>
		<td class="row2"><input type="radio" name="board_disable" value="1" {S_DISABLE_BOARD_YES} /> {L_YES}&nbsp;&nbsp;<input type="radio" name="board_disable" value="0" {S_DISABLE_BOARD_NO} /> {L_NO}</td>
	</tr>
#
#-----[ AFTER, ADD ]-----------------------------------
#

	<tr>
		<td class="row1">Ссылки<br /><span class="gensmall">Добавление ссылок вверху страницы</span></td>
		<td class="row2"><textarea name="links" rows="5" cols="60">{LINKS}</textarea></td>
	</tr>
	<tr>
		<td class="row1">top<br /><span class="gensmall">Добавление кода в самый верх страницы</span></td>
		<td class="row2"><textarea name="topp" rows="5" cols="60">{TOPP}</textarea></td>
	</tr>
# 
# 
#-----[ SAVE/CLOSE ALL FILES ]------------------------------------------ 
# 
# EoM
Я уверен, что надопускал кучу ошибок, особенно в sql запросах.
Интересно что скажут более опытные.
Последний раз редактировалось svk 21.07.2005 19:51, всего редактировалось 1 раз.
NETBYNET Holding system administrator
Аватара пользователя
[R: R@m$e$ :U]
phpBB Maniac
Сообщения: 1464
Стаж: 19 лет 3 месяца
Откуда: Novosibirsk,RU

Сообщение [R: R@m$e$ :U] »

почитай http://www.phpbb.com/phpBB/viewtopic.php?t=218443 =))) если не ошибся ссылка на статью про защиту... =)
в общем тут SQL-injection =)))

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

если я не просмотрел =)
Руководство пользователя | FAQ | Правила | Как устанавливать MOD'ы
ВОСПОЛЬЗУЙСЯ ПОИСКОМ, ТАМ ЕСТЬ БОЛЬШИНСТВО ОТВЕТОВ
ЕСЛИ НЕ ПОМОГЛО, ИСПОЛЬЗУЙ ШАБЛОН ЗАПРОСА, ПОМОГИ В РЕШЕНИИ ЗАДАЧИ
БЕСПЛАТНО ПОМОГУ ТОЛЬКО НА ФОРУМЕ!!! (ЛС НЕ В СЧЕТ)

Оставь благодарность, подтверди работоспособность совета.

ВСЕ ПРАВА НА МОДЫ ОТДАНЫ m157y
Аватара пользователя
svk
phpBB 2.0.3
Сообщения: 384
Стаж: 18 лет 9 месяцев
Откуда: Москва, Fortuna-net

Сообщение svk »

Эм...
Мона канечна в админской панели, но смысл админу это делать? он и так базу может снести восстановив из пустого бэкапа )))

Как исправить лучше подскажи, тут же html код идет, глупо спец символы удалять :)
NETBYNET Holding system administrator
Аватара пользователя
[R: R@m$e$ :U]
phpBB Maniac
Сообщения: 1464
Стаж: 19 лет 3 месяца
Откуда: Novosibirsk,RU

Сообщение [R: R@m$e$ :U] »

svk
админ конечно делать не будет... но если я у тебя все же отбрутил хеш от админского акка? просто код должен быть от этого защищен...

я не про удаление спец.символов... а, например, про

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

str_replace("'", "\'", $new[topp]);
который у тебя отсутствует...
Руководство пользователя | FAQ | Правила | Как устанавливать MOD'ы
ВОСПОЛЬЗУЙСЯ ПОИСКОМ, ТАМ ЕСТЬ БОЛЬШИНСТВО ОТВЕТОВ
ЕСЛИ НЕ ПОМОГЛО, ИСПОЛЬЗУЙ ШАБЛОН ЗАПРОСА, ПОМОГИ В РЕШЕНИИ ЗАДАЧИ
БЕСПЛАТНО ПОМОГУ ТОЛЬКО НА ФОРУМЕ!!! (ЛС НЕ В СЧЕТ)

Оставь благодарность, подтверди работоспособность совета.

ВСЕ ПРАВА НА МОДЫ ОТДАНЫ m157y
Аватара пользователя
svk
phpBB 2.0.3
Сообщения: 384
Стаж: 18 лет 9 месяцев
Откуда: Москва, Fortuna-net

Сообщение svk »

Так? (Поправил первый пост)
NETBYNET Holding system administrator
quazi
phpBB 2.0.2
Сообщения: 306
Стаж: 19 лет 1 месяц

Сообщение quazi »

Xpert
phpBB Guru
phpBB Guru
Сообщения: 5484
Стаж: 20 лет 1 месяц
Поблагодарили: 2 раза

Сообщение Xpert »

[R: R@m$e$ :U]
Так phpBB стандартно делает addslashes. Можно посмотреть в сторону замены \' на '' (две одинарные).
svk писал(а):FROM phpbb_top
svk писал(а):FROM phpbb_config
Эти две таблицы надо вызывать как CONFIG_TABLE и TOP_TABLE, предварительно прописав последнюю в includes/constants.php
svk писал(а):$new[topp]
Имхо $new['topp']

Вроде пока все. Хотя я бы, честно говоря, вынес все это в отдельный модуль. Да и сама цель мода кроме учебной мне сомнительна. phpBB не терпит ламеров, за ним как за любимым домашним животным ухаживать надо.

Вот еще. Чтобы меньше было багов, особенного логических на время написания и тестирования мода отключай в common.php отключение проверки ошибок. Короче вместо

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

error_reporting  (E_ERROR | E_WARNING | E_PARSE); // This will NOT report uninitialized variables
... надо

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

error_reporting  (E_ALL); // This will report all errors
Эксперт - это человек, который избегает мелких ошибок на пути к грандиозному провалу.
Любая более-менее сложная задача имеет несколько простых, изящных, лёгких для понимания неправильных решений
Аватара пользователя
svk
phpBB 2.0.3
Сообщения: 384
Стаж: 18 лет 9 месяцев
Откуда: Москва, Fortuna-net

Сообщение svk »

Xpert писал(а):Имхо $new['topp']
имхо синтаксис php допускает и так и так :?
Xpert писал(а):Да и сама цель мода кроме учебной мне сомнительна. phpBB не терпит ламеров, за ним как за любимым домашним животным ухаживать надо.
По этому же форуму видно, что и ла.... деревья держат свои форумы с модами.
Хотя ты прав, я писал его в основном для учебных целей :)
NETBYNET Holding system administrator
Xpert
phpBB Guru
phpBB Guru
Сообщения: 5484
Стаж: 20 лет 1 месяц
Поблагодарили: 2 раза

Сообщение Xpert »

svk писал(а):синтаксис php допускает и так и так
Вот как раз так он не допускает, это считается ошибкой. Единственный случай, когда такой синтаксис возможен - если переменная является частью строки, т.е.:

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

$text = "Title: $row[title]";
Эксперт - это человек, который избегает мелких ошибок на пути к грандиозному провалу.
Любая более-менее сложная задача имеет несколько простых, изящных, лёгких для понимания неправильных решений
Аватара пользователя
peter
phpBB 1.4.1
Сообщения: 44
Стаж: 18 лет 9 месяцев
Откуда: Moscow

Сообщение peter »

Господа Гуру, а для лохов окончательный вариант будет?
Аватара пользователя
SugutorBatia
phpBB 1.4.4
Сообщения: 151
Стаж: 18 лет 7 месяцев

Сообщение SugutorBatia »

Мне понравился мод! Я бы тоже хотел иметь возможность из админки менять headers.tpl - чтоб там можно было баннер или объявление рекламное впихнуть.

Полезный мод! Сам хотел написать, но знаний конечно нехватило.... :lol:
Буду ждать релиза рабочей версии.
http://batia.info
Быстрое решение проблемы с PhpBB3: Кодировки
Аватара пользователя
Filippok
phpBB 1.4.4
Сообщения: 121
Стаж: 18 лет 1 месяц

Сообщение Filippok »

Сделал все так как описано в первом посту и вот что получилось: Parse error: parse error, unexpected '/' in /pub/home/ДОМЕН/ПАПКА/forum/includes/page_header.php on line 23
Аватара пользователя
Nemo1987
phpBB 2.0.7
Сообщения: 560
Стаж: 18 лет 2 месяца

Сообщение Nemo1987 »

Filippok, у тя ковычка одиночная осталась открытая... там же глюк был в начале.. его ииспавили... посмотри внимательнее Строка 23
Аватара пользователя
Filippok
phpBB 1.4.4
Сообщения: 121
Стаж: 18 лет 1 месяц

Сообщение Filippok »

Nemo1987 писал(а):посмотри внимательнее Строка 23
А можно носом ткнуть?:)
Первый пост это уже полностью работоспособный МОД?
Аватара пользователя
Nemo1987
phpBB 2.0.7
Сообщения: 560
Стаж: 18 лет 2 месяца

Сообщение Nemo1987 »

Да, полностью :) Я не ставил, потому ненаю :) Просто перед ' поставть \ должно быть так= \'

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