Smarty / Видимость для модулей

m33_nft

Новичок
Добрый день. Пишу cms. Метался между шаблонизаторами, Smarty/ Twig . Т.к. опыта их использования вообще ноль, и по сути являясь автором быдлокода попал в просак. Остановился на Smarty , т.к. больше гораздо русской документации.

Вообщем особенность Cms такая :Архитектура (приложен скрин)
Все основные функции (Работа с файлами, базой данных , правами/сессиями и т.п. ) Реализованы в папке system и подгружаются автоматически, при "запуске" приложения.
Также существует файл system_route который подгружает модуль , в зависимости от "надобности",
тобишь :
www.site.ru/news - подгружается модуль news и если больше нет параметров то вызывается метод Index(constuct).
www.site.ru/news/show/2 - подгружается подуль news, метод show с параметром 2 и т.п. с другими модулями.
Вообщем теперь я решил , что пора этому делу сделать морду.

system_template_engine.php
PHP:
class ApplicationTemplateEngine extends Application 
{
  
	function __construct() {
   // ГЛОБАЛЬНЫМ ОБЬЕКТ СМАРТИ
   $TemplateEngine = new Smarty();
   $TemplateEngine->template_dir = __APPTHEMEDIR.'/default/';
$TemplateEngine->compile_dir = __APPTHEMEDIR.'/cache/compiled/';
$TemplateEngine->config_dir = __APPFILES.'/configuration/';
$TemplateEngine->cache_dir = __APPTHEMEDIR.'/cache/';
$site_name = "Супер сайт";
$TemplateEngine->assign ('site_name',$site_name);
$TemplateEngine->display ('layout.tpl');	
	}

}
Хотелось бы видеть на главной странице например вывод новостей, не прибегая к ссылке /news/***/** , но в тоже время, чтобы и существующий функционал сохранялся. И всё это красиво подавалось.

Я пошел слудующим путём .

/module/news/news.php
PHP:
 function index()
    {
     
       // $news=mysql_query("SELECT * FROM `module_news`"); 
$result = ApplicationDatabase::qry("SELECT * FROM `module_news` where `news_status`=0 ORDER by news_date desc" );
 if (!$result) 
 {
	 exit ("Проверь настройки БД");
	 
 }
 if (mysql_num_rows($result) == 0 ) 
 {
	exit ("Статей нет"); 
 }

for ($i=0; $i < mysql_num_rows($result);$i++)
{
$news[] = mysql_fetch_array($result,MYSQL_ASSOC);	
}
print_r($news);
Smarty::assign ('news',$news);


        
    }
соответсвенно ничего не передается, и на главной странице косяк. в виде Notice: Undefined index: news in путь.

Прошу внести ясность в этом вопросе, или ткнуть на ссылку где описывается работа смарти в замороченных условиях. =)

Прошу сильно не критиковать, т.к. вообще не работал с шаблонизаторами.. Если понадобится скину весь код. Спасибо
 

Вложения

AmdY

Пью пиво
Команда форума
ни в коем случае не пиши свою cms, сначала посмотри на чужие.

ты хоть доку по смарти осилел, неужели там есть Smarty::assign ?
 

AmdY

Пью пиво
Команда форума
Соотвественно, у тебя должен быть глобальный объект смарти, куда ты ассайнишь переменную, а display делается не в конструкторе ApplicationTemplateEngine::__constructor, а когда уже данные все сформированы.
 

m33_nft

Новичок
Хорошо, это понял. Можно ли сделать в классе template_engine фукнцию аля assign к которой можно будет обратиться из модуля (любого) , тобишь передать в неё параметры для замены , тоесть TemplateEngine::asign('news',$news) . А дальше уже внутри этого руководящего класса все полученные "ассайшные" переменные вывести ... или бред?

Для наглядности залил код.
 

Вложения

Сверху