Индексный файл: Код (PHP): require_once ROOT.'/core/db.class.php'; require_once ROOT.'/lib/Smarty.class.php'; $mysqli = db::getObject(); // соединение с БД $smarty = new Smarty(); $option = "index"; if(isset($_GET['option'])) { $tmp_name = $_GET['option']; $opt = $_GET['option']; $path = ROOT.'/core/'.$opt.".class.php"; if(file_exists($path)) { require_once $path; if(class_exists($opt)) { $option = $_GET['option']; } } else { echo "Ошибка подключения файла класса"; } } else { $tmp_name = "main"; require_once ROOT."/core/".$option.".class.php"; } $view = new $option(); $smarty->assign("tmp_name", $tmp_name); $view->getContent(); $smarty->display("index.tpl"); Класс: Код (PHP): class Index { public function getContent() { global $mysqli; $smarty = new Smarty(); $res = $mysqli->query("SELECT * FROM pages ORDER BY id DESC"); if ($res->num_rows > 0) { for ($i=0; $i<$res->num_rows; $i++) { $row[] = $mysqli->assoc($res); } $smarty->assign("row", $row); } } } Основной шаблон - index.tpl, в нем подключен шаблон main.tpl таким образом: {include file="$tmp_name.tpl"}. Массив формирует правильно, а вот выводит его не в месте где подключен шаблон main.tpl, а перед <html> тегом в самом начале страницы (и то только если в классе Index снизу добавить строку $smarty->display("main.tpl")). Получается что данные класса не доходят до индексного файла. P.S> Тот же код без класса (просто функция) все выводит нормально. Подскажите как можно решить проблему? PHP, JavaScript, SQL и другой код пишите внутри тегов Код ( (Unknown Language)): [b]php][/b]Тут код[b][/[/b][b]code][/b][/color]
Так вы в два разных объекта smarty пишете данный, один про другой ничего не знает. Класс - в один объект smarty, а index.php - в другой. Сделай или глобальный (правда, заклюют), или передавай в конструктор или метод getContent(). А вообще, здесь бы иерархию небольшую забабахать... Поскольку создание объекта smarty - тоже дело контроллера, по идее.
хм, просто в класс Index добавил строку global $smarty; и все заработало. А что конкретно означает "заклюют"? А если передавать в конструктор, нужно для него (и всего что связано с контроллерами) создать отдельный класс, который будут наследовать все остальные подобные модули, так? Просто с ООП и Smarty знаком всего день-два, после процедурного все это кажется "джунглями".
Так теорию бы почитали. Заклюют, потому что ООП и global считается не хорошо совмещать. Если просто добавили global, то не всё заработало, поскольку вы ссылку на один объект затираете ссылкой на другой