Так mysql_fetch_array() выберет только один ряд результата запроса.
<?php
$r=mysql_query("SELECT * FROM news");
$news = array();
while($row=mysql_fetch_array($r))
{
$news[] = $row;
}
$smarty->assign("main_news",$news);
$smarty->display('body.tpl');
?>