Здравствуйте, уважаемые! Сразу к делу. Задачи: 1. Вывод контента в переменную и затем в шаблон. Более подробно: Есть список кратких новостей; Есть полные новости; Есть статичные страницы. Необходимо следующее: Если $_GET['option'] = statics, то в переменной $content выводится статичная страница (какая именно использую $_GET['statics'] (alians из mysql); Если $_GET['option'] пустая, то в переменной $content выводитя список новостей через цикл (тут проблема, опишу чуть ниже); Если $_GET['option'] пустая, а $_GET['news_id'] равна id новости из MySQL, то выводится в $content эта самая новость. Казалось бы все очень просто, однако возникают следующие проблемки: Имеется след. функция для вывода списка новостей: Код (Text): function GetList() { global $mysql, $lang, $first, $news_on_page; $result = mysql_query("SELECT * FROM `".$mysql['news']."` where publish='1' ORDER BY `id` DESC LIMIT ".$first.",".$news_on_page.""); $news = mysql_fetch_array($result); do { ob_start(); $id = $news['id']; $title = $news['title']; $shortnews = $news['shortnews']; $added = $news['added']; $time = timestamp($added); $author = $news['author']; $category_id = $news['category']; $review = $news['review']; $rel = mysql_query("SELECT * FROM `".$mysql['category']."` WHERE id='".$category_id."'"); $category = mysql_fetch_array($rel); $category_name = $category['name']; $category_alians = $category['alians']; $comments_news = mysql_num_rows(mysql_query("SELECT id from ".$mysql['comments']." WHERE news_id='".$id."'")); define('ID_NEWS', $id); define('TITLE_NEWS', $title); define('SHORT_NEWS', $shortnews); define('ADDED_NEWS', $time); define('AUTHOR_NEWS', $author); define('CATEGORY_NEWS', $category_name); define('ALIANS_CATEGORY_NEWS', $category_alians); define('REVIEW_NEWS', $review); define('COMMENTS_NEWS', $comments_news); include (STYLE."/body/content/news/news.tpl"); $getList = ob_get_contents(); ob_end_clean(); } while($news = mysql_fetch_array($result)); return $getList; } Выводится шаблончики новости (news.tpl) ровно тем кол-во, что и находится в таблице. Казалось бы так и должно быть, НО все новости выводятся одинаковые. То есть выводится почему только id с новостью 3 (в моем случае). Все три новости одинаковые, их id=3. Уже не знаю, что и делать даже. В функцию занес все это дело лишь для того, чтобы затем просто проще вывести этот цикл в переменную $conten, а саму эту переменную уже в шаблон. Помогите мне, подскажите куда рыть. Добавлено спустя 4 минуты 43 секунды: Ах да, для определения статичная это страница или новости использую switch case. switch($option_get){ case "statics": include(CORE."/content/statics.php"); break; default: include(CORE."/content/news.php"); break; } Естественно и объявлено ранее: $option_get = $_POST['option']; По моему мнению это верно и хотелось бы использовать именно это.
Что-то первый раз вижу живой пример переопределения констант Код (PHP): define('ID_NEWS', $id); Обычно люди понимают, что такое константа. Racer, понимаешь? В константах остаются первоначальные значения. У тебя id первой новости равно 3? Если да, то у тебя тот же PHP, что и у меня, и он не терпит переопределения констант
После переопределения код красивее становится. Нет, не понимаю. Почему они там первоначальные? Я полагаю, что дело в том, что используются ob`ки, но без них в переменную занести не реально. Может скинуть полность content.php + news.php, чтоб сами все увидели? Думаю так будет лучше всего. content.php: Код (Text): <? switch($option_get){ case "statics": include(CORE."/content/statics.php"); break; default: include(CORE."/content/news.php"); break; } define('TITLE_STATIC', $title_static); define('CONTENT_STATIC', $content_static); define('KEYWORDS_STATIC', $keywords_static); // Определение дополнительного заголовка if(empty($subtitle) && empty($keywords) && empty($control_page)) { $subtitle = "".$cfg['description'].""; $keywords = "".$cfg['keywords'].""; $control_page = $subtitle; } define('SUBTITLE', $subtitle); define('CONTROL_PAGE', $control_page); define('KEYWORDS', $keywords); define('CONTENT', $content); define('PAGER', $pager); ?> news.php: Код (Text): <? $news_on_page = 10; // Подключение постраничного вывода include (CORE."/pagination.php"); // Вывод коротких новостей if(!isset($news_get) && !isset($category_get)) { $content = GetList(); } else // Вывод полной новости if(isset($news_get) && isset($category_get)) { $rel_n = mysql_query("SELECT * FROM `".$mysql['news']."` where publish='1' && id='".$news_get."'"); $news = mysql_fetch_array($rel_n); $title = $news['title']; $fullnews = $news['fullnews']; $keywords = $news['keywords']; $added = $news['added']; $time = timestamp($added); $author = $news['author']; $category_id = $news['category']; $review = $news['review']; $rel_c = mysql_query("SELECT * FROM `".$mysql['category']."` WHERE alians='".$category_get."'"); $category = mysql_fetch_array($rel_c); $category_name = $category['name']; $comments_news = mysql_num_rows(mysql_query("SELECT id from ".$mysql['comments']." WHERE news_id='".$news_get."'")); $subtitle = $title; $control_page = "$category_name / $title"; mysql_query("UPDATE `".$mysql['news']."` SET review = review + 1 where id='".$news_get."'"); $comments_page = Content(CORE."/comments.php"); define('TITLE_NEWS', $title); define('FULL_NEWS', $fullnews); define('ADDED_NEWS', $time); define('CATEGORY_NEWS', $category_name); define('ALIANS_CATEGORY_NEWS', $category_get); define('AUTHOR_NEWS', $author); define('REVIEW_NEWS', $review); define('COMMENTS_NEWS', $comments_news); define('COMMENTS', $comments_page); $content = Content(STYLE."/body/content/news/fullnews.tpl"); } else if(!isset($news_get) && isset($category_get)) { $content = GetList(); } if(!isset($news_get)) { $pager = Content(CORE."/pager.php"); } ?> Добавлено спустя 1 минуту 24 секунды: Функция Content(): Код (Text): function Content($include) { global $mysql, $lang, $page, $total; ob_start(); include($include); $content = ob_get_contents(); ob_end_clean(); return $content; } Добавлено спустя : Функция Content(): Код (Text): function Content($include) { global $mysql, $lang, $page, $total; ob_start(); include($include); $content = ob_get_contents(); ob_end_clean(); return $content; }
Да ваще... Кто придумал, что константы изменять нельзя? Требую прировнять pi к 3! з.ы. и опять do {} while. Всё таки попова надо запретить, как оружие массового поражения )
Нет. Первая новость, как и следовало ожидать имеет id=1. Последняя id=3. Всего их 3. То есть id по порядку. Учитывая, что вывожу я через DESC, то получается, что первая, как раз с id=3. Получается Вы правы, однако, что это дает?
Вы за анальную кастрацию? =) Добавлено спустя 1 минуту 21 секунду: темплейт через константы. это же так забавно. почему никто не смеется? =)
При чем тут Попов? Это прикол такой новый? Я никогда не узучал литература по языкам и не собираюсь, все сам, либо по примерам. while{} - не выводит 1-ю запись, либо выводит 1 запись из трех. Не помню точно. Уже пробовал. Добавлено спустя 52 секунды: Мне тут не особо смешно, давайте не будем отходить от темы. Знаете решение - помогите, а нет, так не надо засорять тему пожалуйста.
* попытался представить * пожалуй, да. Racer, константа это константа. Она задается один раз и более не меняется. "лат. constanta — постоянная, неизменная" говорит нам википедия. Соответственно ты заполняешь константы значениями первой новости и они выводятся циклом ровно по количеству новостей. Если нужно не только хранить, но и изменять, следует пользоваться другим великим изобретением человеческого гения - переменными.
Предложите решение лучше, хотелось бы с помощью функции выводить список новостей, при этом подключая в функии шаблон этой краткой новости. Затем эту функцию в переменную $content. Ведь это возможно?
А кто сказал что нельзя? Надо только чуть изменить скрипт. Код (Text): define('TITLE_NEWS'.ID_NEWS, $title); и потом выводить constant('TITLE_NEWS'.ID_NEWS) циклом )
Как можно считать, что помогли, если не показано не единого примера. Мне всего лишь навсего необходимо запихуть цикл в переменную. ВСЕ. Вы тут натации читаете, что хорошо, что плохо. Я этого не просил. Как заключить цикл или его вывод в переменную. Это возможно?
На самом деле всё плохо ) хз... ты забиваешь гвозди отверткой и спрашиваешь как это поудобнее сделать. Может стоит всё же чего-нибудь почитать, прежде чем спрашивать? Что бы понимать хоть какие-то базовые концепции? Не будет тебе готовых решений, ни в этом случае, ни после. Область деятельности такая. Могут только тыкнуть в какую сторону копать, что собственно и сделали, а дальше уж сам. Либо привыкай сразу, либо бросай это гиблое дело ) 1. Зачем ты плодишь сущности? Получаешь массив, раскидываешь по переменным и потом всё это задаешь в константы? Чем собственно массив то плох был? 2. ob_start() и иже с ним тебе тоже не нужен ) Не будем про bad practices, но почему тогда сразу не выводишь шаблон? Ну типа: Код (PHP): $news = mysql_fetch_array($result); include (STYLE."/body/content/news/news.tpl"); /* а там */ <h1><?php echo $news['title'];?></h1> <?php echo $news['content'];?> А еще лучше собрать все новости в один массив и потом уже в шаблоне циклом вывести разом, вместо того что бы дергать его инклудом на каждой записи. з.ы. мой пример кстати тоже ничего общего с пряморуким кодом не имеет ) з.з.ы. mysql_* - зло и уже по сути труп. mysqli или лучше сразу PDO.