Как безопасно подключить баннер в шаблон

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

Ваш вопрос может быть удален без объяснения причин, если на него есть ответы по приведённым ссылкам (а вы рискуете получить предупреждение ;) ).
Аватара пользователя
kupidon
phpBB 1.4.4
Сообщения: 120
Стаж: 14 лет 5 месяцев
Благодарил (а): 62 раза

Как безопасно подключить баннер в шаблон

Сообщение kupidon »

Добрый день.
Имеется рекламный баннер: Такой.
Данные в нем берутся из базы данных. Баннер написан на php.

Как правильно и безопасно внедрить его в оверал хедер? Прямой код php вроде не рекомендуется вставлять в шаблон..

Очень прошу подсказать, а лучше привести пример, заранее спасибо.
Аватара пользователя
Pazh
Former team member
Сообщения: 2317
Стаж: 16 лет 10 месяцев
Благодарил (а): 42 раза
Поблагодарили: 506 раз

Re: Как безопасно подключить баннер в шаблон

Сообщение Pazh »

а что тебе мешает прописать вызов функционала твоего файла banner.php в функцию, отвечающую за формирование хедера? а результат передать через переменную? Функция называется page_header и располагается в /includes/functions.php
Помощь в ЛС/email только за WM или ЮMoney
Аватара пользователя
kupidon
phpBB 1.4.4
Сообщения: 120
Стаж: 14 лет 5 месяцев
Благодарил (а): 62 раза

Re: Как безопасно подключить баннер в шаблон

Сообщение kupidon »

Pazh писал(а):а что тебе мешает прописать вызов функционала твоего файла banner.php в функцию, отвечающую за формирование хедера? а результат передать через переменную? Функция называется page_header и располагается в /includes/functions.php
Дело в том, что я только учусь и в этом плане- двоечник, но стремящийся к обучению))

Посмотрите пожалуйста, и скажите что не так:

1. Помещаю в папку мой файл /includes/banner.php
2. Открываю /includes/functions.php
Под функцией page_header размещаю код:

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

 // баннер
include "banner.php";
  //
3. Передаю переменные из кода моего баннера:

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

// The following assigns all _common_ variables that may be used at any point in a template.
	$template->assign_vars(array(
		'SITENAME' => $config['sitename'],
.......
.....
'kart1'=> $kart1,
'kart2'=> $kart2,
'kart3'=> $kart3,
'kart4'=> $kart4,
....
4. Далее в файле оверал хедер
пишу таблицу на html

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

    <table> 
    <tr><td>{kart1}</td><td>{kart2}</td><td>{kart3}</td><td>{kart4}</td> </tr>
    </table> 
Может что то еще упустил? Нигде в оверал хедер не надо прописывать новые переменные?
Аватара пользователя
Sheer
Former team member
Сообщения: 12113
Стаж: 19 лет 7 месяцев
Откуда: Калининград не Кенигсберг
Благодарил (а): 54 раза
Поблагодарили: 2756 раз

Re: Как безопасно подключить баннер в шаблон

Сообщение Sheer »

Ну... в общем все не так. Покажи свой banner.php
Изображение
Общие ошибки новичков (07.11.2005) & Как задавать вопросы
Мини FAQ
Если ничто другое не помогает, прочтите, наконец, инструкцию!
"Никакая инструкция не может перечислить всех обязанностей должностного лица, предусмотреть все отдельные случаи и дать вперёд соответствующие указания, а поэтому господа инженеры должны проявить инициативу и, руководствуясь знаниями своей специальности и пользой дела, принять все усилия для оправдания своего назначения".
Циркуляр Морского технического комитета №15 от 29.11.1910 г.
Аватара пользователя
kupidon
phpBB 1.4.4
Сообщения: 120
Стаж: 14 лет 5 месяцев
Благодарил (а): 62 раза

Re: Как безопасно подключить баннер в шаблон

Сообщение kupidon »

banner.php

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

<html>
  <head>
         <title>Пример</title>
     </head>
     <body>

<?php
define('IN_PHPBB', true);
$phpbb_root_path = (defined('PHPBB_ROOT_PATH')) ? PHPBB_ROOT_PATH : './';
$phpEx = substr(strrchr(__FILE__, '.'), 1);
include($phpbb_root_path . 'common.' . $phpEx);
mysql_set_charset( 'utf8' );
$query = "SELECT item_order FROM sp_orders_items WHERE state_order=0 or state_order=1 or state_order=2";
$res = $db->sql_query( $query );
while( $row = $db->sql_fetchrow($res) ) {
$available_ids[] = $row["item_order"]; }
for($x=1;$x<9;$x++){
$rnd=rand( 0 , (count($available_ids)-1) );
$rand[$x]=$available_ids[$rnd];}
for($y=1;$y<9;$y++){
$query = "SELECT catalog_id, name, price, image_urls FROM sp_items WHERE id_items=".$rand[$y];
$res = $db->sql_query( $query );
$leader = $db->sql_fetchrow( $res );
$cat[$y]=$leader["catalog_id"];
$nam[$y]=$leader["name"];
$price[$y]=$leader["price"];
$krt=unserialize($leader["image_urls"]);
  if (!is_array($krt)) {
  // что-то пошло не так, инициализируем пустой массив
  $krt = array(); 
  }
$kart[$y]=$krt[1];
}

$kart1= "<a href='http://19sp.ru/forum/sp/catalog.php?catalog_id= $cat[1]'><img border=2px height=120px src=\"http://19sp.ru/forum/sp/photos/s/".$kart[1]."\" title='$nam[1]' /></a>"; 
$kart2= "<a href='http://19sp.ru/forum/sp/catalog.php?catalog_id= $cat[2]'><img border=2px height=120px src=\"http://19sp.ru/forum/sp/photos/s/".$kart[2]."\" title='$nam[2]' /></a>"; 
$kart3= "<a href='http://19sp.ru/forum/sp/catalog.php?catalog_id= $cat[3]'><img border=2px height=120px src=\"http://19sp.ru/forum/sp/photos/s/".$kart[3]."\" title='$nam[3]' /></a>"; 
$kart4= "<a href='http://19sp.ru/forum/sp/catalog.php?catalog_id= $cat[4]'><img border=2px height=120px src=\"http://19sp.ru/forum/sp/photos/s/".$kart[4]."\" title='$nam[4]' /></a>"; 
$kart5= "<a href='http://19sp.ru/forum/sp/catalog.php?catalog_id= $cat[5]'><img border=2px height=120px src=\"http://19sp.ru/forum/sp/photos/s/".$kart[5]."\" title='$nam[5]' /></a>"; 
$kart6= "<a href='http://19sp.ru/forum/sp/catalog.php?catalog_id= $cat[6]'><img border=2px height=120px src=\"http://19sp.ru/forum/sp/photos/s/".$kart[6]."\" title='$nam[6]' /></a>"; 
$kart7= "<a href='http://19sp.ru/forum/sp/catalog.php?catalog_id= $cat[7]'><img border=2px height=120px src=\"http://19sp.ru/forum/sp/photos/s/".$kart[7]."\" title='$nam[7]' /></a>"; 
$kart8= "<a href='http://19sp.ru/forum/sp/catalog.php?catalog_id= $cat[8]'><img border=2px height=120px src=\"http://19sp.ru/forum/sp/photos/s/".$kart[8]."\" title='$nam[8]' /></a>"; 

?>
	
	<table align="center" width="350" cellspacing="1" cellpadding="3" text-align: center> 
    <tr align="center" valign="bottom"> <td><?php echo $kart1; ?> </td><td><?php echo $kart2; ?> </td><td><?php echo $kart3; ?> </td><td><?php echo $kart4; ?> </td><td><?php echo $kart5; ?> </td><td><?php echo $kart6; ?> </td><td><?php echo $kart7; ?> </td> <td><?php echo $kart8; ?> </td></tr>
    <tr style="font: 10px arial;" align="center" valign="top" > <td><?php echo $price[1]."руб."; ?> </td><td><?php echo $price[2]."руб."; ?> </td><td><?php echo $price[3]."руб."; ?> </td> <td><?php echo $price[4]."руб."; ?> </td><td><?php echo $price[5]."руб."; ?> </td><td><?php echo $price[6]."руб."; ?> </td><td><?php echo $price[7]."руб."; ?> </td><td><?php echo $price[8]."руб."; ?> </td></tr>
  </table> 
	</body>
</html>
Аватара пользователя
Sheer
Former team member
Сообщения: 12113
Стаж: 19 лет 7 месяцев
Откуда: Калининград не Кенигсберг
Благодарил (а): 54 раза
Поблагодарили: 2756 раз

Re: Как безопасно подключить баннер в шаблон

Сообщение Sheer »

Жуть... код нечитабельный. Про остальное промолчу.
kupidon, научитесь правильно оформлять код. Ссылки вам уже давали.
http://www.phpbbguru.net/useful/codeboo ... uidelines/
http://www.phpbbguru.net/kb/styling/tem ... -tutorial/
http://www.phpbbguru.net/kb/modding/add ... stom-page/

Итак. Создаем в папкеincludes файл примерно следующего содержания (не проверял, ибо таких таблиц БД у меня естественно нет)

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

<?php

if (!defined('IN_PHPBB'))
{
	exit;
}


function show_banner()
{
	global $template, $db;

	$query = 'SELECT item_order FROM sp_orders_items WHERE state_order = 0 or state_order = 1 or state_order = 2';
	$res = $db->sql_query($query);
	while($row = $db->sql_fetchrow($res))
	{
		$available_ids[] = $row['item_order'];
	}
	
	for($x=1; $x<9; $x++)
	{
		$rnd=rand(0, (count($available_ids) - 1));
		$rand[$x] = $available_ids[$rnd];
	}

	for($y = 1; $y < 9; $y++)
	{
		$query = 'SELECT catalog_id, name, price, image_urls FROM sp_items WHERE id_items = ' .$rand[$y]. '';
		$res = $db->sql_query($query);
		$leader = $db->sql_fetchrow($res);
		$cat[$y] = $leader['catalog_id'];
		$nam[$y] = $leader['name'];
		$price[$y] = $leader['price'];
		$krt = unserialize($leader['image_urls']);

		if (!is_array($krt))
		{
			// что-то пошло не так, инициализируем пустой массив
			$krt = array();
		}
		$kart[$y] = $krt[1];

		$template->assign_block_vars('images', array(
			'IMG' 	=> '<a href="http://19sp.ru/forum/sp/catalog.php?catalog_id = ' .$cat[$y]. '"><img border=2px height=120px src="http://19sp.ru/forum/sp/photos/s/' .$kart[$y]. '" title="' .$nam[$y]. '" /></a>',
		)
		);
		$db->sql_freeresult($res);
	}
}
?>
Далее. Открыть includes/functions.php
Найти

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

	// Generate logged in/logged out status
Перед вставить

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

	include($phpbb_root_path . 'includes/banner.' . $phpEx);
	show_banner();
Открыть styles/__стиль__/template/overall_header.html
и в нужное место всавить примерно такой код

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

	<div>
		<table width="100%">
			<tr>
		<!-- BEGIN images -->
				<td style="text-align:center;">{images.IMG}</td>
		<!-- END images -->
			</tr>
		</table>
	</div>
Изображение
Общие ошибки новичков (07.11.2005) & Как задавать вопросы
Мини FAQ
Если ничто другое не помогает, прочтите, наконец, инструкцию!
"Никакая инструкция не может перечислить всех обязанностей должностного лица, предусмотреть все отдельные случаи и дать вперёд соответствующие указания, а поэтому господа инженеры должны проявить инициативу и, руководствуясь знаниями своей специальности и пользой дела, принять все усилия для оправдания своего назначения".
Циркуляр Морского технического комитета №15 от 29.11.1910 г.
Аватара пользователя
kupidon
phpBB 1.4.4
Сообщения: 120
Стаж: 14 лет 5 месяцев
Благодарил (а): 62 раза

Re: Как безопасно подключить баннер в шаблон

Сообщение kupidon »

Извиняюсь, что потерялся...меня грипп душил, душил, да к другим ушел..

Вы мне очень помогли и сэкономили мне дня три точно. Теперь я более менее понял алгоритм. Я все установил, как вы сказали и все заработало.

Один вопросик: Если передавать в шаблон не массив, а одну переменную, это так выглядит? $template->assign_block_vars('images', $temp);
Аватара пользователя
Sheer
Former team member
Сообщения: 12113
Стаж: 19 лет 7 месяцев
Откуда: Калининград не Кенигсберг
Благодарил (а): 54 раза
Поблагодарили: 2756 раз

Re: Как безопасно подключить баннер в шаблон

Сообщение Sheer »

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

$template->assign_vars(array(
	'DATE'			=> $user->format_date($cal_this_day),
	'S_HOLIDAY'		=> ($holiday) ? true : false,
));
Изображение
Общие ошибки новичков (07.11.2005) & Как задавать вопросы
Мини FAQ
Если ничто другое не помогает, прочтите, наконец, инструкцию!
"Никакая инструкция не может перечислить всех обязанностей должностного лица, предусмотреть все отдельные случаи и дать вперёд соответствующие указания, а поэтому господа инженеры должны проявить инициативу и, руководствуясь знаниями своей специальности и пользой дела, принять все усилия для оправдания своего назначения".
Циркуляр Морского технического комитета №15 от 29.11.1910 г.
Аватара пользователя
kupidon
phpBB 1.4.4
Сообщения: 120
Стаж: 14 лет 5 месяцев
Благодарил (а): 62 раза

Re: Как безопасно подключить баннер в шаблон

Сообщение kupidon »

Немного отклонюсь от темы, но это касается аналогичного вопроса. Столкнулся с такой проблемой:
Я, при просмотре профилей пользователей- делаю табличку небольшую с выборкой данных из БД.
Все делаю как вы меня научили.
Так вот,
1. в папке includes разместил файл showzakup.php с кодом $query = "SELECT item_order FROM sp_orders_items WHERE user_order=456
2. потом прописываю новую функцию в functions.php
3. в файле memberlist_view.html создаю таблицу и вывожу в ней данные из кода.

Все работает! НО показывает данные по пользователю 456. мне надо вот этого пользователя 456 заменить на {USERNAME}- это ник того чей профиль просматриваю (в файле memberlist_view.html).
если я в файле showzakup.php напишу ...WHERE user_order={USERNAME} он естественно выдает ошибку, поскольку в момент обработки этих данных нет. Как быть? Что и где прописывать?
Заранее благодарю за ответ.

Добавлено спустя 12 минут 1 секунду:
Sheer писал(а):Логично было бы предположить, что нужно предварительно определить имя пользователя из таблицы _users, и присвоить это значение объекту шаблонаUSERNAME
а как определить? я ведь получаю имя только когда захожу в профиль чей либо... я так понимаю надо сначала в профиль зайти, а потом уже обработчики включать.. или нет?
Аватара пользователя
Sheer
Former team member
Сообщения: 12113
Стаж: 19 лет 7 месяцев
Откуда: Калининград не Кенигсберг
Благодарил (а): 54 раза
Поблагодарили: 2756 раз

Re: Как безопасно подключить баннер в шаблон

Сообщение Sheer »

Ничё нипонел...

Добавлено спустя 3 минуты 25 секунд:
kupidon писал(а):а как определить?

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

$sql = 'SELECT username FROM ' .USERS_TABLE. ' WHERE user_id =' .$user_id. ''; // user_id наверное 456
Изображение
Общие ошибки новичков (07.11.2005) & Как задавать вопросы
Мини FAQ
Если ничто другое не помогает, прочтите, наконец, инструкцию!
"Никакая инструкция не может перечислить всех обязанностей должностного лица, предусмотреть все отдельные случаи и дать вперёд соответствующие указания, а поэтому господа инженеры должны проявить инициативу и, руководствуясь знаниями своей специальности и пользой дела, принять все усилия для оправдания своего назначения".
Циркуляр Морского технического комитета №15 от 29.11.1910 г.
Аватара пользователя
kupidon
phpBB 1.4.4
Сообщения: 120
Стаж: 14 лет 5 месяцев
Благодарил (а): 62 раза

Re: Как безопасно подключить баннер в шаблон

Сообщение kupidon »

:) и я..
Я так понимаю, только не смейтесь) :
Перед работой форума, файл functions.php обрабатывает все свои функции и, в том числе наш файл showzakup.php. Даже если я не просматриваю профили - все равно он его уже обработал, так?
а значит если я не просматриваю профили у меня нет данных юзера..? я совсем запутался.

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

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

$sql = 'SELECT username FROM ' .USERS_TABLE. ' WHERE user_id =' .$user_id. ''; // user_id наверное 456
.$user_id. - вот это что за переменная?
456 я прогонял, чтобы отладить функцию, а мне надо номер того пользователя, которого я буду просматривать
Аватара пользователя
Sheer
Former team member
Сообщения: 12113
Стаж: 19 лет 7 месяцев
Откуда: Калининград не Кенигсберг
Благодарил (а): 54 раза
Поблагодарили: 2756 раз

Re: Как безопасно подключить баннер в шаблон

Сообщение Sheer »

kupidon писал(а):все равно он его уже обработал, так?
С какой стати? Включаются объявленные там функции, но не факт, что все они запускаются.
kupidon писал(а):.$user_id. - вот это что за переменная?
id юзера.

Добавлено спустя 37 секунд:
kupidon писал(а):которого я буду просматривать
Где?

Добавлено спустя 1 минуту 26 секунд:
kupidon писал(а):файл showzakup.php с кодом
Чтоб я знал что там за код.
kupidon писал(а):прописываю новую функцию в functions.php
Какую?

Добавлено спустя 1 минуту 2 секунды:
http://segfault.kiev.ua/smart-questions-ru.html <-- указывайте конечную цель, а не отдельные шаги.
Изображение
Общие ошибки новичков (07.11.2005) & Как задавать вопросы
Мини FAQ
Если ничто другое не помогает, прочтите, наконец, инструкцию!
"Никакая инструкция не может перечислить всех обязанностей должностного лица, предусмотреть все отдельные случаи и дать вперёд соответствующие указания, а поэтому господа инженеры должны проявить инициативу и, руководствуясь знаниями своей специальности и пользой дела, принять все усилия для оправдания своего назначения".
Циркуляр Морского технического комитета №15 от 29.11.1910 г.
Аватара пользователя
kupidon
phpBB 1.4.4
Сообщения: 120
Стаж: 14 лет 5 месяцев
Благодарил (а): 62 раза

Re: Как безопасно подключить баннер в шаблон

Сообщение kupidon »

Мы просто маленько не понимаем друг друга. Надо вместо пользователя 456 ( это и есть его user_id ) прописать номер того, чей профиль просматриваю.
showzakupka.php

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

<?php

if (!defined('IN_PHPBB'))
{
	exit;
}
function show_zakupka()
{
global $template, $db;
mysql_set_charset( 'utf8' );
$query = "SELECT item_order FROM sp_orders_items WHERE user_order=456  and state_order<3";
$rгs = $db->sql_query( $query );
while( $row = $db->sql_fetchrow($rгs) ) {
$items[] = $row["item_order"]; }
$kol=(count($items)-2) ;

for($y=1;$y<$kol;$y++){
$query = "SELECT purchase_id, name, price  FROM sp_items WHERE id_items=".$items[$y];
$rгs = $db->sql_query( $query );
$leader = $db->sql_fetchrow( $rгs );
$pur[$y]=$leader["purchase_id"]; 
$nam[$y]=$leader["name"]; 
$price[$y]=$leader["price"]; 

$query = "SELECT id_username, name, forum_url  FROM sp_purchases WHERE id_purchases=".$pur[$y];
$rгs = $db->sql_query( $query );
$leader = $db->sql_fetchrow( $rгs );
$purch[$y]=$leader["name"]; 
$org[$y]=$leader["id_username"];
$url[$y]=$leader["forum_url"];

$query = "SELECT username  FROM phpbb_users WHERE user_id=".$org[$y];
$rгs = $db->sql_query( $query );
$leader = $db->sql_fetchrow( $rгs );
$organ[$y]=$leader["username"];
}
//$purch01=$organ[1];
for($y=1;$y<$kol;$y++){
//echo $organ[$y]." -- <a href=$url[$y]>$purch[$y]</a> -- ".$nam[$y]."<br />" ;
$template->assign_block_vars('zakupka', array(
'ORGANIZATOR' 	=> $organ[$y],
'ZAKUP' 	=> '<a href="'.$url[$y].'">'.$purch[$y].'</a>',
'ITEM' 	=> $nam[$y],
'PRICE' 	=> $price[$y],
	)
	);
$db->sql_freeresult($rгs);
}
}
?>
functions.php

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

include($phpbb_root_path . 'includes/showzakupka.' . $phpEx);
show_zakupka();
memberlist_view.html

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

<table border="1" width="100%" > 
<tr align="center" > <td>Организатор:</td><td>Закупка:</td><td>Наименование:</td><td>Цена, руб.</td></tr>
 <!-- BEGIN zakupka -->
 <tr> <td align="left" width="13%">{zakupka.ORGANIZATOR}</td><td align="left" width="40%">{zakupka.ZAKUP}</td><td align="left" width="40%">{zakupka.ITEM}</td><td width="7%">{zakupka.PRICE}</td></tr>  	
 <!-- END zakupka -->
  </table> 
Этот код работает, но при просмотре любого профиля пользователя- показывает таблицу с выбранными данными от пользователя user_id=456. А надо чтобы показывал данные того чей профиль просматривается.
Аватара пользователя
Sheer
Former team member
Сообщения: 12113
Стаж: 19 лет 7 месяцев
Откуда: Калининград не Кенигсберг
Благодарил (а): 54 раза
Поблагодарили: 2756 раз

Re: Как безопасно подключить баннер в шаблон

Сообщение Sheer »

Жуть...
Откуда вызывается функция show_zakupka ?
Изображение
Общие ошибки новичков (07.11.2005) & Как задавать вопросы
Мини FAQ
Если ничто другое не помогает, прочтите, наконец, инструкцию!
"Никакая инструкция не может перечислить всех обязанностей должностного лица, предусмотреть все отдельные случаи и дать вперёд соответствующие указания, а поэтому господа инженеры должны проявить инициативу и, руководствуясь знаниями своей специальности и пользой дела, принять все усилия для оправдания своего назначения".
Циркуляр Морского технического комитета №15 от 29.11.1910 г.
Аватара пользователя
kupidon
phpBB 1.4.4
Сообщения: 120
Стаж: 14 лет 5 месяцев
Благодарил (а): 62 раза

Re: Как безопасно подключить баннер в шаблон

Сообщение kupidon »

Получается в function.php. Может в functions_profile_fields.php прописать функцию? :| я же говорю: я- двоечник, но я с удовольствием учусь.

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