Smarty - подскажите

oksale

Новичок
Smarty - подскажите

Есть шаблон:


Справа загружается php-файл, в котором из БД выбираются данные. ({include_php file = 'for_news.php'})

Переменная $BODY может содержать как стастический текст в зависимости от загружаемой страницы, так и пхп-код(опять же выборка из БД).

Как реализовано сейчас:

в файле 'for_news.php' происходит коннект к БД, затем выборка.

в файле, который разбирает шаблон, при необходимости осуществляется коннект к БД и выборка.

Что хочется:

Чтобы подключение к базе осуществлялось один раз, а не два.

Подскажите варианты реализации, плз.
 

kvf77

Red Devil
что мешает в index.php (первом файле) подключиться к базе, а компонентам передавать $connection_id, которое получаешь при подключении?
 

zerkms

TDD infected
Команда форума
есть ли вообще инклудить пхп файлы в шаблонах??

что мешает пхп инклудить в пхп же, а шаблоны - шаблонах
 

pompage

Новичок
Автор оригинала: Smartbb
А смысл в чем? :)
Смысл в том что, если на одной странице используется два разных скрипта для работы с базой, то не делать для каждого коннект к DB, а иметь одну и работать с ней.
 

kvf77

Red Devil
Поясняю популярно.
1) Подключаешься к базе и получаешь, скажем в переменную $connect, указатель.
2) После инициализации Smarty делаешь $smarty->register_object('connect', $connect);
3) после чего в любом скрипте, где используется смарти можно из смарти этот объект вытащить: $connect = &$smarty->get_registered_object('connect');
Хотя думаю, что тебе это не поможет :) ты скорее всего и смарти по 50 раз подключаешь в каждом скрипте. Строй правильно логику приложений и будет тебе счастье.
 

pompage

Новичок
PHP:
[b]news.php[/b]
<?
// здесь хранятся настройки smarty
include('conf/setup.php');
// здесь хранятся настройки приложения
include('conf/config.php');

$smarty = new My_Smarty;
$smarty->assign('TITLE','Новости'); 
$smarty->assign('IMAGE','2a');
$smarty->assign('HREF',  "<span style='padding-left:5px;'>Новости</span>");
$smarty->assign('HEADER', 'НОВОСТИ');

$sql = "Select id, header, date_format(date,'%d.%m.%y') as date_, text From news ";
	
if (DB::isError($res = $db->query($sql)))
{	  
 die (DB::errorMessage($res));
}


$body = "
	<table width = '98%' height = '100%' border = '0' cellpadding='0' cellspacing='0'  align = 'center' leftmargin = '0' rightmargin = '0' valign = 'top'>
	<tr align = 'left'><td width = '100%' colspan = '2' height = '20'>&nbsp;</td></tr>
";

while ($row = $res->fetchRow())
{
	$body = $body."<tr align = 'left' valign = 'top'><td width = '10%'>
			  <table width = '100%' border = '0' cellpadding='10' cellspacing='0'  align = 'center' >
					 <tr align = 'left' valign = 'middle'><td width = '10%' class = 'Header2' style = 'BORDER-TOP: 1px solid #77AAFF; BORDER-BOTTOM: 1px solid #77AAFF;'>".$row['date_'].
					"</td><td width = '90%' class = 'Header2' style = 'BORDER-TOP: #77AAFF 1px solid; BORDER-LEFT: #77AAFF 1px solid; BORDER-BOTTOM: #77AAFF 1px solid; background-color: #EEF5FF; font-size: 11px;'>".
					stripslashes($row['header'])
					."</td></tr><tr align = 'left'><td colspan = '2' class = 'text'>";

	// пребразование символов перевода строки 	$news = str_replace("\n", "<br>\n", stripslashes($row['text']));
	$news = preg_replace("/<a/","<a target = '_blank' ",$news); 

	$body = $body.$news."</td></tr></table></td></tr>";
}

$body .= "<tr align = 'left'><td width = '100%' colspan = '2' height = '20'>&nbsp;</td></tr>";

$body .= "<tr align = 'left'><td width = '100%' colspan = '2' height = '20'>&nbsp;</td></tr></table>";

$res->free();
//$db->disconnect();

$smarty->assign('BODY',$body);

$smarty->display('index.tpl');

?>
config.php
PHP:
<?
$user = 'user';
$pass = 'pass';
$host = 'host';
$db_name = 'dbname';
$mail_to = '[email protected]';

require_once './pear/DB.php';

// connect to db
$dsn = "mysql://$user:$pass@$host/$db_name";
$db = DB::connect($dsn);
if (DB::isError($db)) 
{
	die ($db->getMessage());
}
$db->setfetchmode(DB_FETCHMODE_ASSOC);

?>
index.tpl
PHP:
{* Smarty *}

<html>
<head>
<title>Центральное Конструкторское Бюро Арматуростроения - {$TITLE}</title>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<meta name="Description" content="">
<meta name="Keywords" content="">
<link href="conf/styles.css" rel="stylesheet" type="text/css">
</head>

<body bgcolor="#FFFFFF" leftmargin="0" rightmargin="0" topmargin="0" bottommargin="0">

{* ТАБЛИЦА С ШАПКОЙ *}
<table width="100%" height = '100%' border= '0' cellpadding='0' cellspacing='0' >
  <tr> 
    <td colspan ='2' height = '121' rowspan="2"><img src="images/1a.gif" width = '542' height = '121'></td>
    <td width = '100%' rowspan="2" ><img src="images/1b.gif" width = '100%' height = '121'></td>
    <td width = '213' height = '71' valign = 'bottom'> <a href = 'index.html' ><img src="images/1c_t_a.gif" border="0" alt = 'На главную'></a> 
      <a href = 'map.html' ><img src="images/1c_t_b.gif" border="0" alt = 'Карта сайта'></a> 
      <a href="mailto: [email][email protected][/email]"><img src="images/1c_t_c.gif" border="0" alt = 'Написать письмо'></a></td>
  </tr>
  <tr> 
    <td width = '213' height = '50'><img src="images/1c_b.gif"></td>
  </tr>
  <tr> 
    <td>
	&nbsp;	</td>
    
<td width = '329' height = '161'> <img src="images/{$IMAGE}.jpg" width = '329' height = '161'></td>
    <td bgcolor = 'EEF5FF' width = '100%'>&nbsp;</td>
    <td width = '213'><img src="images/2c.gif" width = '213' height = '161'></td>
  
  <tr> 
    <td colspan="3" height = '29' style="padding-left:20px" class = 'txt'>Вы находитесь 
      здесь: {$HREF}</td>
    <td><img src="images/3a.gif" width = '212' height = '29'></td>
  </tr>
  <tr> 
    <td colspan="2" style="background:  url(/images/heading-str.gif) no-repeat; padding-left:20px" width = '542' height = '26' class = 'Header1'> 
      {$HEADER} </td>
    <td><img src="images/heading-str_a.gif" width = '100%' height = '26'></td>
    <td colspan="2" style="background:  url(images/news.gif) no-repeat; padding-left:20px" width = '213' height = '26' class = 'Header2'> 
      ПОСЛЕДНИЕ НОВОСТИ </td>
  </tr>
  <tr> 
    <td colspan="3"  valign = 'top' align = 'center' class = 'text' style=" width: '100%' ; height:'100%' ; padding-left:20px; padding-right:20px; "> 
      {$BODY}
    </td>
    <td bgcolor = '#EEF5FF' valign = 'top'>
    {textformat wrap=45}
	
     {include_php file = 'for_news.php'} [COLOR=crimson]Вот здесь ни хрена не отрабатывает хотя в for_news.php только echo 'ok';[/COLOR] 

     {/textformat}
    </td>
  </tr>
  <tr> 
    <td colspan="4" height = '44'  style="background:  url(images/footer-bg.gif) repeat-x; padding-left:20px; padding-top:7px;" class = 'txt'> 
      © ЗАО "НПФ "ЦКБА" 2001-2005</td>
    <!--<td colspan="4" height = '44' ><img src="images/footer-bg.gif" width = '100%' height = '44'></td>-->
  </tr>
</table>
</body>
</html>
 

alexhemp

Новичок
Зачем тебе шаблонизатор, если ты код по прежнему с php кодом перемешиваешь. Что мешает сделать

while ($row = $res->fetchRow()) {
$smarty->append('news', $row);
}

А потом уже сделать foreach в шаблоне - ты же намешал все в кучу.

Для подстановок тогда уж проще str_replace использовать, смарти не нужен. Используй все его возможности, и тебе и include_php нужен вообще не будет. Твой код можно сократить раз в 10, если правильно использовать смарти.

Шаблоны неплохо бы разбить на несколько.
 

kvf77

Red Devil
Угу - еще о чем прочитать? Тут народу помоему стоит почитать о программировании вообще, а потом браться писать программы.
 
Сверху