цикл и смарти

php_m

Новичок
цикл и смарти

Есть такая проблема:
есть скрипт, генерящий шапку сайта + главное меню, есть для него шаблон, примрено такого вида:
<html>
... other html tags ...
<body>
<table>
<tr>
<td width="15%">
{$menu}
</td>
<td width=70%>
{$content}
</td>
.....
так вот, меню хранится в БД, выбирается так:
PHP:
while( $row = mysql_fetch_array($result) ) {
	$menu .= "\n»&nbsp;<a href='".$site_url."/".$row['url']."'>".$row['name']."</a><br>\n";
 }
но это не очень удобно, т.к. меню должно зраниться в шаблоне, точнее не само меню, а способ его оформления, попробовал я сделать так:
PHP:
while( $row = mysql_fetch_array($result) ) {
     $smarty->assign('title',$row['title']);
     $smarty->assign('name',$row['name']);
     $smarty->assign('url',$row['url']);
     $menu .= $smarty->display('menu.tpl');
}
но при таком раскладе он выводит меню вообще всверху паги, т.е. поулчается сначала идет вывод шаблона менюхи, и только потом основной шаблон, вот хотелось бы узнать, как решить эту проблему, она , кстати, не только в меню, но и в некоторых других местах.
Заранее спасибо.
 

Demiurg

Guest
В смарти тоже есть операторы циклов. передаешь ему массив ссылок а в шаблоне уже выводишь его так, как надо.
 

Гравицапа

elbirret elcno
пример,..думаю подойдёт:
index.php
PHP:
<?
define(ROOT,$_SERVER['DOCUMENT_ROOT']);
include_once(ROOT."/_cfg/db_setup.php");
require_once(ROOT.'/_cfg/smarty_setup.php');

$news = array();
$query = "SELECT news.*, DATE_FORMAT(ndate,'%d.%m.%Y') AS date_column FROM news ORDER BY id DESC";
$result = $db->query($query);
$i = 0;
while ($row = $result->fetchRow(DB_FETCHMODE_ASSOC)) {
	$news[$i]['header'] =      $row['header'];
	$news[$i]['message'] =     $row['message'];
	$news[$i]['ndate'] =       $row['date_column'];
	$news[$i]['source_name'] = $row['source_name'];
	$news[$i]['source_url'] =  $row['source_url'];
	$i++;
}
$smarty = new Site;
$smarty->assign('news',$news);
$smarty->assign('current_page','main');
$smarty->display('index.tpl');
//header('location:[url]http://spec.hostel.nstu.ru/talk/[/url]');
?>
index.tpl
PHP:
{include file="header.tpl"}
<div id="main_block">
                {foreach key=key name=outer item=news_item from=$news}
                <div class="news">
                       <h4><span class="date">{$news_item.ndate}</span> {$news_item.header}</h4>
                       <div class="innews">
        				{$news_item.message}
                               <br>
                               <b>Источник</b>:&nbsp;<a href="/modules/redirect.php?url={$news_item.source_url}"
                                title="Перейти на страницу" target="_BLANK">
                               {$news_item.source_name}</a>
                       </div>
                </div>
                {if $key!=0}
                <div align="right"><a href="#" class="gotop" title="Вернуться наверх">&uarr;</a></div>
                {else}
                <div align="right" class="plus">+</div>
                {/if}
                {/foreach}
	</div>
{include file="footer.tpl"}
то есть используй ассоц.массивы + циклы внутри смарти
 
Сверху