Фрагмент index.php(первые строки): Код (Text): error_reporting(E_ALL); date_default_timezone_set('Europe/Moscow'); include('../tpl/configs/bd.conf'); define('SMARTY_DIR','../smarty_library/'); require(SMARTY_DIR.'Smarty.class.php'); $smarty = new Smarty ();//объект smarty $smarty->template_dir='../tpl/templates/admin/';//путь к шаблонам $smarty->compile_dir='../tpl/templates_c/admin/'; $smarty->config_dir='../tpl/configs/admin/'; $smarty->cache_dir='../tpl/cache/admin/'; $domain = "http://vkanale.tk/"; include('functions.php'); В functions.php используется переменная $smarty: Код (Text): $smarty->assign("total", $total); Появляется errors: Код (Text): Notice: Undefined variable: smarty in /usr/home/ssm0014/data/www/vkanale.tk/admin/functions.php on line 155 Fatal error: Call to a member function assign() on a non-object in /usr/home/ssm0014/data/www/vkanale.tk/admin/functions.php on line 155 Help.
Код (Text): define('SMARTY_DIR','../smarty_library/'); require(SMARTY_DIR.'Smarty.class.php'); global $smarty; $smarty = new Smarty ();//объект smarty $smarty->template_dir='../tpl/templates/admin/';//путь к шаблонам $smarty->compile_dir='../tpl/templates_c/admin/'; $smarty->config_dir='../tpl/configs/admin/'; $smarty->cache_dir='../tpl/cache/admin/'; $domain = "http://vkanale.tk/"; Сделал так. Ничего не изменилось... Что не так?
200 строк в каждом норм? Добавлено спустя 1 минуту 46 секунд: в общем, вызываю функцию Код (Text): if(isset($_GET['numb'])){ all_articles_of_release(); } Соответственно функция находится в файле functions.php: Код (Text): function all_articles_of_release(){ $query = "SELECT * FROM `articles` WHERE `rel_id`=".$_GET['numb']." ORDER BY `Id` DESC"; $sql = mysql_query($query) or die(mysql_error()); $total = mysql_num_rows($sql); $smarty->assign("total", $total); while ($row = mysql_fetch_assoc($sql)) { $text = $row['text']; $text = preg_replace("|<[^>]*?>|s", "", $text); $counttext = 50; $sep = ' '; $words = explode($sep, $text); if ( count($words) > $counttext ) $text = join($sep, array_slice($words, 0, $counttext)); $row['text'] = $text."..."; $art[] = $row; $smarty->assign("art_arr", $art); } $arr_meta_tags['title'] = "Газета Видеоканал | Статьи номера".$_GET['numb']; $arr_meta_tags['keywords'] = "Ключевые слова"; $arr_meta_tags['description'] = "Описание"; $main_tpl = $smarty->fetch("articles.tpl"); }
Оффтоп прекращаем Да у меня действительно кривой код. Да может быть он неудобный. Но уж как умею, как научили. Был бы очень благодарен, если бы действительно помогли, потому что не знаю что с этим сделать. А вообще был бы еще благодарнее, если бы помогли сделать код правильнее.
Попробуй здесь: сделать так: Код (PHP): $smarty = new Smarty (); $smarty->assign("total", $total); а еще лучше так: Код (PHP): function all_articles_of_release($smarty) или даже так: Код (PHP): function all_articles_of_release(&$smarty) и функцию вызывай так: Код (PHP): all_articles_of_release($smarty)
Вы знакомы со Smarty? По моему это будет не правильно: у меня дублируется шаблон. Да и не работает эта затея, много левых ошибок. Суть в том, что до того, как я не вынес эти куски кода в функции и в отдельный файл - все работало.
Ну так у тебя в функции, $smarty - обычная переменная, а не объект класса. А ты пытаешься вызвать метод этого не объекта. Значит надо в функции сделать из этой переменной объект, прежде чем вызывать его методы.
сделай просто так: Код (PHP): function all_articles_of_release(&$smarty){ дальше твоя функция} вызывай Код (PHP): all_articles_of_release($smarty) должно помочь, ибо передашь в функцию указатель на объект, однако у тебя дальше будет свистопляска с $main_tpl
Спасибо, сработало. Дублировался шаблон из-за моей глупости. еще раз вызов функции Smarty() был лишний