Новости в блоке
Прислано: igor1970
вт, 24/07/2007 - 16:50
Подскажите, пожалуйста, как разместить новости в блоке?
С Друпалом только начал разбираться, в PHP откровенно слаб.
- igor1970's blog
- Для комментирования войдите или зарегистрируйтесь
меня тоже интересует данная тема :)
нужно разместить новости в блоке
а на главной только статическую страницу!
есть какой нить модуль?
- Для комментирования войдите или зарегистрируйтесь
taxonomy_block. Самому только на днях это понадобилось, вчера нашёл. Выдаёт в блоке заданное в настройках количество статей из определённого словаря/термина таксономии
- Для комментирования войдите или зарегистрируйтесь
хм, прикольная тема. А быстрее работает, чем Блок, сделанный в Views интересно, или игра не стоит свеч?
- Для комментирования войдите или зарегистрируйтесь
- Создаёте блок
- В настройках указываете показывать везде кроме admin/* --в админке он вам не нужен
- Вставляете следующий код (указав фильтр ввода - php):
<?php // Лимит вывода статей на странице $limit = 20; // Выбранный типы материала $type = 'news' // тут будем всё хранить $output = ''; // Формируем запрос к базе $query = "SELECT node_revisions.nid, node_revisions.title, " . "node_revisions.teaser, users.name, node_type.name " . "AS typename FROM node_revisions, node, users, node_type " . "WHERE (node_revisions.nid = node.nid) " . "AND (node.status = 1)" . "AND (node.uid = users.uid)" . "AND (node_type.type = node.type) AND (node_type.type ='%s') LIMIT %d"; // Спрашиваем у БД то, что сформировали $result = db_query($query, $type, $limit); // Проходимся циклом по результату // На каждую найденную строку формируем строку вывода и прибавляем её к общему результату ($output) while ($arr = db_fetch_array($result)) { // Заголовок $$output .= '<h2 class="title">' . l($arr['title'], 'node/'. $arr[nid]) .'</h2>'; // Автор $output .= '<span class="submitted">' . t('автор: ') . l($arr['name'], 'user/'. $arr['name']) .'</span>'; // Основное содержание $output .= '<div class="content">' . $arr['teaser'] . '</div>'; // типа материала $output .= '<div class="clear-block clear"><div class="meta"><div class="terms">'. $arr['typename'] . '</div></div></div>'; } // Освобождаем память от переменной $result mysql_free_result($result); print $output; ?>
- Для комментирования войдите или зарегистрируйтесь
Мнда, таки всё верно : )
- Для комментирования войдите или зарегистрируйтесь
Тока форматирование надо поправить : )
- Для комментирования войдите или зарегистрируйтесь
Хорошая вещь! Я тут слегка подправил, работает. Поставил на прикрепленную главную страницу.
Сразу прошу прощения, разбераюсь в этом интуитивно.
Класно было бы сделать вывод цитат случайным, помогите.
<?php // Лимит вывода статей на странице $limit = 15; // Выбранный типы материала $type = 'page'; // тут будем всё хранить $output = ''; // Формируем запрос к базе $query = "SELECT node_revisions.nid, node_revisions.title, " . "node_revisions.teaser, users.name, node_type.name " . "AS typename FROM node_revisions, node, users, node_type " . "WHERE (node_revisions.nid = node.nid) " . "AND (node.status = 1)" . "AND (node.uid = users.uid)" . "AND (node_type.type = node.type) AND (node_type.type ='%s') LIMIT %d"; // Спрашиваем у БД то, что сформировали $result = db_query($query, $type, $limit); // Проходимся циклом по результату // На каждую найденную строку формируем строку вывода и прибавляем её к общему результату ($output) while ($arr = db_fetch_array($result)) { // Заголовок $output .= '<h2 class="title">' . l($arr['title'], 'node/'. $arr[nid]) .'</h2>'; // Автор $output .= '<span class="submitted">' . t('автор: ') . l($arr['name'], 'user/'. $arr['name']) .'</span>'; // типа материала $output .= '<div class="clear-block clear"><div class="meta"><div class="terms">'. $arr['typename'] . '</div></div></div><hr>'; } // Освобождаем память от переменной $result mysql_free_result($result); print $output; ?>
- Для комментирования войдите или зарегистрируйтесь
Нет ничего проще : )
Как говриться "Зри в корень" : )
Вам нужно всего лишь перемешать значения!
То есть вместо:
<?php // Формируем запрос к базе $query = "SELECT node_revisions.nid, node_revisions.title, " . "node_revisions.teaser, users.name, node_type.name " . "AS typename FROM node_revisions, node, users, node_type " . "WHERE (node_revisions.nid = node.nid) " . "AND (node.status = 1)" . "AND (node.uid = users.uid)" . "AND (node_type.type = node.type) AND (node_type.type ='%s') LIMIT %d"; ?>
Писать вот так
<?php: // Формируем запрос к базе // иперемешиваем занчения $query = "SELECT node_revisions.nid, node_revisions.title, " . "node_revisions.teaser, users.name, node_type.name " . "AS typename FROM node_revisions, node, users, node_type " . "WHERE (node_revisions.nid = node.nid) " . "AND (node.status = 1)" . "AND (node.uid = users.uid)" . "AND (node_type.type = node.type) AND (node_type.type ='%s') LIMIT %d ORDER BY RAND()"; ?>
Понятное дело вы можете сортировать не только так, но и по дате, автору, типу материала и так далее...
Сотрите функцию RAND(N)
Автору респект за скрипт ;-)
- Для комментирования войдите или зарегистрируйтесь
Я тут немного переставил значения, заработало.
Но, водятся ненужные страницы.
Как сделать исключения на страницу например page/123?
<?php // Лимит вывода статей на странице $limit = 30; // Выбранный типы материала $type = 'page'; // тут будем всё хранить $output = ''; // Формируем запрос к базе // иперемешиваем занчения $query = " SELECT node_revisions.nid, node_revisions.title, " . "node_revisions.teaser, users.name, node_type.name " . "AS typename FROM node_revisions, node, users, node_type " . "WHERE (node_revisions.nid = node.nid) " . "AND (node.status = 1)" . "AND (node.uid = users.uid)" . "AND (node_type.type = node.type) AND (node_type.type ='%s') ORDER BY RAND() LIMIT %d"; // Спрашиваем у БД то, что сформировали $result = db_query($query, $type, $limit); // Проходимся циклом по результату // На каждую найденную строку формируем строку вывода и прибавляем её к общему результату ($output) while ($arr = db_fetch_array($result)) { // Заголовок $output .= '<h4 class=".unnamed7">' . l($arr['title'], 'node/'. $arr[nid]) .'</h4>'; } // Освобождаем память от переменной $result mysql_free_result($result); print $output; ?>
- Для комментирования войдите или зарегистрируйтесь
Сам доделал http://www.drupal.ru/node/7063
- Для комментирования войдите или зарегистрируйтесь
а через Views блок делается еще проще, заодно и кеширование блоков будет.
- Для комментирования войдите или зарегистрируйтесь
......о как?!
- Для комментирования войдите или зарегистрируйтесь
Или лучше добавить возможность кэширования в данный скрипт :)
Все-таки views на уровне "нажал - работает" пользуют многие, а вот увидеть, как это делается пограммно - будет полезно многим.
- Для комментирования войдите или зарегистрируйтесь
Ну нужен модуль. Тем более такой монстр для такой мелочной задачи. Всё делается в течении 2 минут средствами элементарного php. Кеширование аналогично.
- Для комментирования войдите или зарегистрируйтесь
Совершенно верно!
<?php // Проверяем, существует ли кеш если существует, выводим его // Если не существует создаём // my_cache -- название придумманое для кеша // $block['content'] в функции кеширования заменить на собствевенно сам контент // 10 --Время кеширования в минутах if ($cached = cache_get("my_cache", 'cache_page')) { $block['subject'] = t('Title'); $block['content'] = $cached->data; return $block; } else { cache_set("my_cache", 'cache_page', $block['content'], time() + (60 * 10)); } ?>
- Для комментирования войдите или зарегистрируйтесь
Если я правильно все понимаю кеширование снижает нагрузку на сайт и хранит инф. в кеше компа пользователя?
- Для комментирования войдите или зарегистрируйтесь
Нет: это не так.
В дух словах, кеш хранится в БД и при запросе контента, SQL не выполняется, просто выводится кеш.
Конечно есть свои нюансы, но это в двух словах...
- Для комментирования войдите или зарегистрируйтесь
вы здесь выводите только $arr['title'].
Зачем вам такой запрос?
Если вам нужно только одно, два поля из таблицы, зачем так много спрашивать у БД? Скорость то падает...
- Для комментирования войдите или зарегистрируйтесь
Офтопик: Судя по количеству и качеству комментариев в этом топике -- основная масса "друпалеров" любые вопросы пытается решить путём установки модуля. Это говорит о том, что основная масса, не может считаться компетентными специалистами по Drupal. IMHO
- Для комментирования войдите или зарегистрируйтесь
Ну общая специфика - снижение нагрузки?
- Для комментирования войдите или зарегистрируйтесь
Да, так оно и есть : )
- Для комментирования войдите или зарегистрируйтесь
Ну это черновой вариант, беловой здесь http://www.drupal.ru/node/7063 обновил, хотелось все и сразу в один скрипт вместить, а так по вариациям тогда несколько версий делать надо. Да и куда в скрипт кеш вставить и как его протестировать?
- Для комментирования войдите или зарегистрируйтесь
Офтопик: Судя по количеству и качеству комментариев в этом топике -- основная масса "друпалеров" любые вопросы пытается решить путём установки модуля. Это говорит о том, что основная масса, не может считаться компетентными специалистами по Drupal. IMHO
Судя по состоянию дел в общем и целом, основная масса пользователей не является основной массой специалистов в любой сфере. И Друпал тут вовсе даже не при чем :)
- Для комментирования войдите или зарегистрируйтесь
Лਠта
Офтопик: Судя по количеству и качеству комментариев в этом топике -- основная масса "друпалеров" любые вопросы пытается решить путём установки модуля. Это говорит о том, что основная масса, не может считаться компетентными специалистами по Drupal. IMHO
Мне кажется, вывод тут целиком противоположный. В PHP обычно лезешь, когда не знаешь, как решить проблему стандартными средствами. И не надо только стонов про громоздкость Views - он и так у всех стоит, одно дело - ради такой фигни его ставить, другое дело, когда он уже установленный. А то, что тут понаписано - называется гемморой. Это видимо приколько тем, кто не рубит или всё ещё тащится от набивания кода. Вместо того, чтобы учить непрограммеров копи-пасте делать, лучше учить грамотно работать с имеющимся инструментарием, а одними сниппетами жив не будешь, тем более работая прямыми запросами - вон, названия баз без фигурных скобок, при мультисайтинге или базах с префиксами работать перестанет, и наивная блондинка заплачет, пытаясь найти ошибку в коде. Так что снобизм, Лਠта, здесь неуместен.
- Для комментирования войдите или зарегистрируйтесь
2jason32
эм... а что насчет названий баз и фигурных скобок? а можно пообщаться, лучше в ПМ
- Для комментирования войдите или зарегистрируйтесь
Интересный материал
- Для комментирования войдите или зарегистрируйтесь
Согласен, Views на сайте стоит, делает свою работу, с php вроде проблем нет, вот и думаешь что лучше, или сделать руками, или если уж стоит этот монстрик, то пусть отрабатывает по полной... Однако второй правильнее... Тут вроде как с фреймворком получается ;-)
- Для комментирования войдите или зарегистрируйтесь
Теперь полностью согласен! :)
- Для комментирования войдите или зарегистрируйтесь
jason32Мне кажется, вывод тут целиком противоположный. В PHP обычно лезешь, когда не знаешь, как решить проблему стандартными средствами. И не надо только стонов про громоздкость Views - он и так у всех стоит, одно дело - ради такой фигни его ставить, другое дело, когда он уже установленный. А то, что тут понаписано - называется гемморой. Это видимо приколько тем, кто не рубит или всё ещё тащится от набивания кода. Вместо того, чтобы учить непрограммеров копи-пасте делать, лучше учить грамотно работать с имеющимся инструментарием, а одними сниппетами жив не будешь, тем более работая прямыми запросами - вон, названия баз без фигурных скобок, при мультисайтинге или базах с префиксами работать перестанет, и наивная блондинка заплачет, пытаясь найти ошибку в коде. Так что снобизм, Лਠта, здесь неуместен.
А наивной блондинке разве нетрудно будет понять что новости надо добавлять в таксономию? Есть ли способ создав новый тип материала (например news_page), оперировать им добавляя страницы новостей как страницы новостей а не термины. Views так сможет? Просто, на мой взгляд и думаю взгляд наивной блондинки так будет правильнее и понятнее.
- Для комментирования войдите или зарегистрируйтесь
после моего столкновения с проблеммой новостей в живую, беру свои слова обратно =) ! виды + таксономия = рулез!
- Для комментирования войдите или зарегистрируйтесь
Модернизировала, чтобы новость созданная в типе материалов news с телом показывалась в блоке при нажатии на заголовок с помощью яваскрипта, вот это надо в head:
<script type="text/javascript"> function status(id){ if ( document.getElementById(id).style.display=='none' ){ document.getElementById(id).style.display=''; }else{ document.getElementById(id).style.display='none'; } } </script>
А вот php код измененного блока
<?php // Лимит вывода статей на странице $limit = 5; // Выбранный типы материала $type = 'news'; // тут будем всё хранить $output = ''; // Формируем запрос к базе $query = "SELECT node_revisions.nid, node_revisions.title, " . "node_revisions.teaser, users.name, node_type.name " . "AS typename FROM node_revisions, node, users, node_type " . "WHERE (node_revisions.nid = node.nid) " . "AND (node.status = 1)" . "AND (node.uid = users.uid)" . "AND (node_type.type = node.type) AND (node_type.type ='%s') LIMIT %d"; // Спрашиваем у БД то, что сформировали $result = db_query($query, $type, $limit); $i=1; // Проходимся циклом по результату // На каждую найденную строку формируем строку вывода и прибавляем её к общему результату ($output) while ($arr = db_fetch_array($result)) { // Заголовок $output .= ' <a href="javascript:status(' .$i .')">' .$arr['title'] .'</a>'; // Основное содержание $output .= '<div id="' .$i .'" style="display:none;">' . $arr['teaser'] . '</div>'; $i=$i+1; } // Освобождаем память от переменной $result mysql_free_result($result); print $output; ?>
Реально посмотреть можно здесь http://wtservices.ru
- Для комментирования войдите или зарегистрируйтесь
Не парьтесь, через Views ---------------------- :)
- Для комментирования войдите или зарегистрируйтесь
А если сайт визитка? и Views будет только лишним? Нагромождать его этим модулем считаю лишним поэтому сделала именно так)))
Кроме того я элементарно не знаю как сделать на яваскрипте такой показ новостей с помощью Views...
- Для комментирования войдите или зарегистрируйтесь
Для сайта-визитки со статическим контентом и Друпал будет лишним ;)
- Для комментирования войдите или зарегистрируйтесь
а у меня ошибку выбрасывает...
Parse error: parse error, unexpected T_VARIABLE in x:\www\themes\тема\page.tpl.php on line 74
Ругается на $output = '';
что делать???
- Для комментирования войдите или зарегистрируйтесь
<?php
// Лимит вывода статей на странице
$limit = 20;
// Выбранный типы материала
$type = 'news'
// тут будем всё хранить
$output = '';
// Формируем запрос к базе
$query = "SELECT node_revisions.nid, node_revisions.title, " .
"node_revisions.teaser, users.name, node_type.name " .
"AS typename FROM node_revisions, node, users, node_type " .
"WHERE (node_revisions.nid = node.nid) " .
"AND (node.status = 1)" .
"AND (node.uid = users.uid)" .
"AND (node_type.type = node.type) AND (node_type.type ='%s') LIMIT %d";
// Спрашиваем у БД то, что сформировали
$result = db_query($query, $type, $limit);
// Проходимся циклом по результату
// На каждую найденную строку формируем строку вывода и прибавляем её к общему результату ($output)
while ($arr = db_fetch_array($result)) {
// Заголовок
$$output .= '<h2 class="title">' . l($arr['title'], 'node/'. $arr[nid]) .'</h2>';
// Автор
$output .= '<span class="submitted">' . t('автор: ') . l($arr['name'], 'user/'. $arr['name']) .'</span>';
// Основное содержание
$output .= '<div class="content">' . $arr['teaser'] . '</div>';
// типа материала
$output .= '<div class="clear-block clear"><div class="meta"><div class="terms">'. $arr['typename'] . '</div></div></div>';
}
// Освобождаем память от переменной $result
mysql_free_result($result);
print $output;
?>
То что надо! а как сделать чтоб еще и дата публикации выводилась?
- Для комментирования войдите или зарегистрируйтесь
По-моему так:
$output .= t(format_date($arr['changed'], 'custom', ' j.m.y '));
- Для комментирования войдите или зарегистрируйтесь
что-то не то, он мне выдал
1.01.70
- Для комментирования войдите или зарегистрируйтесь
Вместо changed попробуйте created
- Для комментирования войдите или зарегистрируйтесь
не получается, все тот-же 1.01.70. код сниппета ниже.
-
<?php
unset ($output);
$node_type = "news"; // тип документа
$list_no =10; // количество выводимых документов
$sql = "SELECT node.title, node.type, node.nid FROM {node} WHERE node.type = '$node_type' AND node.status = 1 ORDER BY node.created DESC LIMIT $list_no";
$output .= t(format_date($arr['created'], 'custom', ' j.m.y '));
$output .= "<ul>";
$result = db_query($sql);
while ($anode = db_fetch_object($result)) {
$output .= "<li>".l($anode->title, "node/$anode->nid")."</li>";
}
$output .= "</ul>";
print $output;
?>
- Для комментирования войдите или зарегистрируйтесь
Запрос исправьте:
$sql = "SELECT node.changed, node_revisions.nid, node_revisions.title, " . "node_revisions.teaser, node_type.name " . "AS typename FROM node_revisions, node, users, node_type " . "WHERE (node_revisions.nid = node.nid) " . "AND (node.status = 1)" . "AND (node.uid = users.uid)" . "AND (node_type.type = node.type) AND (node_type.type ='%s') LIMIT %d";
PS: Я не программист
- Для комментирования войдите или зарегистрируйтесь
да что такое?! Вообще статьи данного типа перестали отображаться. зато в блоке гордо горит единственная надпись 1.01.70
-
<?php
unset ($output);
$node_type = "news"; // тип документа
$list_no =10; // количество выводимых документов
$sql = "SELECT node.changed, node_revisions.nid, node_revisions.title, " .
"node_revisions.teaser, node_type.name " .
"AS typename FROM node_revisions, node, users, node_type " .
"WHERE (node_revisions.nid = node.nid) " .
"AND (node.status = 1)" .
"AND (node.uid = users.uid)" .
"AND (node_type.type = node.type) AND (node_type.type ='%s') LIMIT %d";
$output .= t(format_date($arr['created'], 'custom', ' j.m.y '));
$output .= "<ul>";
$result = db_query($sql);
while ($anode = db_fetch_object($result)) {
$output .= "<li>".l($anode->title, "node/$anode->nid")."</li>";
}
$output .= "</ul>";
print $output;
?>
А может посоветуете готовый сниппет который-бы выводил в блоке содежимое по типу материалов + дату публикации. Ведь делал-же кто-нибудь без views!
Т.е. в идеале для меня в реализуемом сниппетом блоке 2 статьи одного типа должны отображаться как
12.12.08
Анонс
>далее
13.12.08
Анонс
>далее
а то хожу вокруг да около, весь сайт прерыл =(
- Для комментирования войдите или зарегистрируйтесь
Вот рабочий (специально для вас)))
<?php
$limit = 10;
$type = 'news';
$output = '';
$query = "SELECT node.changed, node_revisions.nid, node_revisions.title, " .
"node_revisions.teaser, node_type.name " .
"AS typename FROM node_revisions, node, users, node_type " .
"WHERE (node_revisions.nid = node.nid) " .
"AND (node.status = 1)" .
"AND (node.uid = users.uid)" .
"AND (node_type.type = node.type) AND (node_type.type ='%s') LIMIT %d";
$result = db_query($query, $type, $limit);
while ($arr = db_fetch_array($result)) {
$output .= t(format_date($arr['changed'], 'custom', ' j.m.y '));
$output .= '<div class="anons">' . $arr['teaser'] . '</div>';
$output .= l('Далее', 'node/'. $arr[nid]).'<br />';
}
mysql_free_result($result);
print $output;
?>- Для комментирования войдите или зарегистрируйтесь
Большое Вам спасибо! Всё получилось! Немного подправил запрос на предмет чтоб дата выводилась по времени создания документа.
Единственная проблема в том что последние новости уходят вниз по дате, т.е.
1.05.08
новость
2.05.08
новость
А как сделать чтоб было?
2.05.08
новость
1.05.08
новость
- Для комментирования войдите или зарегистрируйтесь
Проблема решена!
<? $limit = 3; $type = 'news'; $output = ''; $query = "SELECT node.created, node_revisions.nid, node_revisions.title, " . "node_revisions.teaser, node_type.name " . "AS typename FROM node_revisions, node, users, node_type " . "WHERE (node_revisions.nid = node.nid) " . "AND (node.status = 1)" . "AND (node.uid = users.uid)" . "AND (node_type.type = node.type) AND (node_type.type ='%s') ORDER BY node.created DESC LIMIT %d"; $result = db_query($query, $type, $limit); while ($arr = db_fetch_array($result)) { $output .= '<b>' . t(format_date($arr['created'], 'custom', ' j.m.y ')) .'</b>'; $output .= '<div class="anons">' . $arr['teaser'] . '</div>'; $output .= l('[далее]', 'node/'. $arr[nid]).'<br />'.'<hr />'; } mysql_free_result($result); print $output; ?>
- Для комментирования войдите или зарегистрируйтесь
Более правильно будет в данном блоке делать запрос с учетом возможных префиксов в базе данных:
<?php $limit = 3; $type = 'story'; /* поменяйте на нужный и СУЩЕСТВУЮЩИЙ у вас тип материалов */ $output = ''; $query = "SELECT {node}.created, {node_revisions}.nid, {node_revisions}.title, " . "{node_revisions}.teaser, {node_type}.name " . "AS typename FROM {node_revisions}, {node}, {users}, {node_type} " . "WHERE ({node_revisions}.nid = {node}.nid) " . "AND ({node}.status = 1)" . "AND ({node}.uid = {users}.uid)" . "AND ({node_type}.type = {node}.type) AND ({node_type}.type ='%s') ORDER BY {node}.created DESC LIMIT %d"; $result = db_query($query, $type, $limit); while ($arr = db_fetch_array($result)) { $output .= '<b>' . t(format_date($arr['created'], 'custom', ' j.m.y ')) .'</b>'; $output .= '<div class="anons">' . $arr['teaser'] . '</div>'; /* не забудьте добавить оформление для класса .anons в стили сайта или замените в этой строке anons на нужный вам класс из существующих у вас */ $output .= l('[далее]', 'node/'. $arr[nid]).'<br />'.'<hr />'; } mysql_free_result($result); print $output; ?>
- Для комментирования войдите или зарегистрируйтесь
Подскажите, плиз, как решить такую проблему: при добавлении следующего кода в блок
<?php
$limit = 3;
$type = 'story'; /* поменяйте на нужный и СУЩЕСТВУЮЩИЙ у вас тип материалов */
$output = '';
$query = "SELECT {node}.created, {node_revisions}.nid, {node_revisions}.title, " .
"{node_revisions}.teaser, {node_type}.name " .
"AS typename FROM {node_revisions}, {node}, {users}, {node_type} " .
"WHERE ({node_revisions}.nid = {node}.nid) " .
"AND ({node}.status = 1)" .
"AND ({node}.uid = {users}.uid)" .
"AND ({node_type}.type = {node}.type) AND ({node_type}.type ='%s') ORDER BY {node}.created DESC LIMIT %d";
$result = db_query($query, $type, $limit);
while ($arr = db_fetch_array($result)) {
$output .= '<b>' . t(format_date($arr['created'], 'custom', ' j.m.y ')) .'</b>';
$output .= '<div class="anons">' . $arr['teaser'] . '</div>'; /* не забудьте добавить оформление для класса .anons в стили сайта или замените в этой строке anons на нужный вам класс из существующих у вас */
$output .= l('[далее]', 'node/'. $arr[nid]).'<br />'.'<hr />';
}
mysql_free_result($result);
print $output;
?>выдает сообщение об ошибке:
warning: mysql_free_result(): supplied argument is not a valid MySQL result resource in Z:\home\govor\www\includes\common.inc(1645) : eval()'d code on line 20.
Действия происходят на drupal 6.12
- Для комментирования войдите или зарегистрируйтесь
нафиг тут вообще этот <?php mysql_free_result($result);?> ? Убрать его к чертям, mysql и сама всё неплохо чистит.
- Для комментирования войдите или зарегистрируйтесь
Думаю в код будет полезно добавить выборку по языку, чтобы сделать блок универсальным для любого языка. После такого добавления блок будет показывать новости только для текущего языка сайта.
<?php // Текущий язык global $language; // Лимит вывода статей на странице $limit = 5; // Выбранный типы материала $type = 'story'; // тут будем всё хранить $output = ''; // Формируем запрос к базе $query = "SELECT {node}.changed, {node_revisions}.nid, {node_revisions}.title, " . "{node_revisions}.teaser, {node_type}.name " . "AS typename FROM {node_revisions}, {node}, {users}, {node_type} " . "WHERE ({node_revisions}.nid = {node}.nid) " . "AND ({node}.language = '%s')". "AND ({node}.status = 1)" . "AND ({node}.uid = {users}.uid)" . "AND ({node_type}.type = {node}.type) AND ({node_type}.type ='%s') ORDER BY {node}.created DESC LIMIT %d"; // Спрашиваем у БД то, что сформировали $result = db_query($query, $language->language, $type, $limit); // Проходимся циклом по результату // На каждую найденную строку формируем строку вывода и прибавляем её к общему результату ($output) while ($arr = db_fetch_array($result)) { // Заголовок $output .= '<h5 class="title">' . l($arr['title'], 'node/'. $arr[nid]).'</h2>'; // Дата $output .= '<span class="submitted">' . t(format_date($arr['changed'], 'custom', ' j.m.y ')) . '</span>'; // Основное содержание $output .= '<span class="content">' . $arr['teaser'] . '</span>'; // типа материала // $output .= '<div class="clear-block clear"><div class="meta"><div class="terms">'. $arr['typename'] . '</div></div></div>'; // Разделительная полоса $output .= '<hr>'; } // Освобождаем память от переменной $result mysql_free_result($result); print $output; ?>
- Для комментирования войдите или зарегистрируйтесь
Вопрос: Как тоже самое сделать для страницы, но с поддержкой разбиения по на подстраницы, когда результат выборки длинный, например новостей более тысячи ?
- Для комментирования войдите или зарегистрируйтесь













Комментарии