taxonomy_block. Самому только на днях это понадобилось, вчера нашёл. Выдаёт в блоке заданное в настройках количество статей из определённого словаря/термина таксономии
// Спрашиваем у БД то, что сформировали $result = db_query($query, $type, $limit);
// Проходимся циклом по результату // На каждую найденную строку формируем строку вывода и прибавляем её к общему результату ($output) while($arr = db_fetch_array($result)){
Хорошая вещь! Я тут слегка подправил, работает. Поставил на прикрепленную главную страницу.
Сразу прошу прощения, разбераюсь в этом интуитивно.
Класно было бы сделать вывод цитат случайным, помогите.
<?php // Лимит вывода статей на странице $limit = 15;
// Спрашиваем у БД то, что сформировали $result = db_query($query, $type, $limit);
// Проходимся циклом по результату // На каждую найденную строку формируем строку вывода и прибавляем её к общему результату ($output) while($arr = db_fetch_array($result)){
Я тут немного переставил значения, заработало.
Но, водятся ненужные страницы.
Как сделать исключения на страницу например 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)){
Ну это черновой вариант, беловой здесь http://www.drupal.ru/node/7063 обновил, хотелось все и сразу в один скрипт вместить, а так по вариациям тогда несколько версий делать надо. Да и куда в скрипт кеш вставить и как его протестировать?
Ну нужен модуль. Тем более такой монстр для такой мелочной задачи. Всё делается в течении 2 минут средствами элементарного php. Кеширование аналогично.
<?php // Проверяем, существует ли кеш если существует, выводим его // Если не существует создаём // my_cache -- название придумманое для кеша // $block['content'] в функции кеширования заменить на собствевенно сам контент // 10 --Время кеширования в минутах
Нет: это не так.
В дух словах, кеш хранится в БД и при запросе контента, SQL не выполняется, просто выводится кеш.
Конечно есть свои нюансы, но это в двух словах...
Офтопик: Судя по количеству и качеству комментариев в этом топике -- основная масса "друпалеров" любые вопросы пытается решить путём установки модуля. Это говорит о том, что основная масса, не может считаться компетентными специалистами по Drupal. IMHO
Офтопик: Судя по количеству и качеству комментариев в этом топике -- основная масса "друпалеров" любые вопросы пытается решить путём установки модуля. Это говорит о том, что основная масса, не может считаться компетентными специалистами по Drupal. IMHO
Судя по состоянию дел в общем и целом, основная масса пользователей не является основной массой специалистов в любой сфере. И Друпал тут вовсе даже не при чем
Лਠта Офтопик: Судя по количеству и качеству комментариев в этом топике -- основная масса "друпалеров" любые вопросы пытается решить путём установки модуля. Это говорит о том, что основная масса, не может считаться компетентными специалистами по Drupal. IMHO
Мне кажется, вывод тут целиком противоположный. В PHP обычно лезешь, когда не знаешь, как решить проблему стандартными средствами. И не надо только стонов про громоздкость Views - он и так у всех стоит, одно дело - ради такой фигни его ставить, другое дело, когда он уже установленный. А то, что тут понаписано - называется гемморой. Это видимо приколько тем, кто не рубит или всё ещё тащится от набивания кода. Вместо того, чтобы учить непрограммеров копи-пасте делать, лучше учить грамотно работать с имеющимся инструментарием, а одними сниппетами жив не будешь, тем более работая прямыми запросами - вон, названия баз без фигурных скобок, при мультисайтинге или базах с префиксами работать перестанет, и наивная блондинка заплачет, пытаясь найти ошибку в коде. Так что снобизм, Лਠта, здесь неуместен.
Согласен, Views на сайте стоит, делает свою работу, с php вроде проблем нет, вот и думаешь что лучше, или сделать руками, или если уж стоит этот монстрик, то пусть отрабатывает по полной... Однако второй правильнее... Тут вроде как с фреймворком получается
jason32Мне кажется, вывод тут целиком противоположный. В PHP обычно лезешь, когда не знаешь, как решить проблему стандартными средствами. И не надо только стонов про громоздкость Views - он и так у всех стоит, одно дело - ради такой фигни его ставить, другое дело, когда он уже установленный. А то, что тут понаписано - называется гемморой. Это видимо приколько тем, кто не рубит или всё ещё тащится от набивания кода. Вместо того, чтобы учить непрограммеров копи-пасте делать, лучше учить грамотно работать с имеющимся инструментарием, а одними сниппетами жив не будешь, тем более работая прямыми запросами - вон, названия баз без фигурных скобок, при мультисайтинге или базах с префиксами работать перестанет, и наивная блондинка заплачет, пытаясь найти ошибку в коде. Так что снобизм, Лਠта, здесь неуместен.
А наивной блондинке разве нетрудно будет понять что новости надо добавлять в таксономию? Есть ли способ создав новый тип материала (например news_page), оперировать им добавляя страницы новостей как страницы новостей а не термины. Views так сможет? Просто, на мой взгляд и думаю взгляд наивной блондинки так будет правильнее и понятнее.
Модернизировала, чтобы новость созданная в типе материалов news с телом показывалась в блоке при нажатии на заголовок с помощью яваскрипта, вот это надо в head:
// Спрашиваем у БД то, что сформировали $result = db_query($query, $type, $limit); $i=1; // Проходимся циклом по результату // На каждую найденную строку формируем строку вывода и прибавляем её к общему результату ($output) while($arr = db_fetch_array($result)){
А если сайт визитка? и Views будет только лишним? Нагромождать его этим модулем считаю лишним поэтому сделала именно так)))
Кроме того я элементарно не знаю как сделать на яваскрипте такой показ новостей с помощью Views...
// Спрашиваем у БД то, что сформировали
$result = db_query($query, $type, $limit);
// Проходимся циклом по результату
// На каждую найденную строку формируем строку вывода и прибавляем её к общему результату ($output)
while ($arr = db_fetch_array($result)) {
А может посоветуете готовый сниппет который-бы выводил в блоке содежимое по типу материалов + дату публикации. Ведь делал-же кто-нибудь без views!
Т.е. в идеале для меня в реализуемом сниппетом блоке 2 статьи одного типа должны отображаться как
$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; ?>
'; /* не забудьте добавить оформление для класса .anons в стили сайта или замените в этой строке anons на нужный вам класс из существующих у вас */
$output .= l('[далее]', 'node/'. $arr[nid]).' '.'
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.
Думаю в код будет полезно добавить выборку по языку, чтобы сделать блок универсальным для любого языка. После такого добавления блок будет показывать новости только для текущего языка сайта.
Вопрос: Как тоже самое сделать для страницы, но с поддержкой разбиения по на подстраницы, когда результат выборки длинный, например новостей более тысячи ?
Ребята, подскажите как вывести в другой скрипт(СMS) блок с друпала?
Нужно вывести блок последних n нод определенного типа (опубликованные). Т.е запрос нужно делать не используя всяких друпаловских классов для запросов.
Вообщем сам запрос
<?php require_once('./global.php'); //тут данные для коннекта, база у скриптов одна
// Лимит вывода статей на странице
$limit = 7;
// Выбранный типы материала $type = 'news';
// Формируем запрос к базе $result = $db->query_read( " SELECT nid, title WHERE 1=1 type = $type AND status = 1 FROM vb_drupal_node ORDER BY created DESC LIMIT $limit ");
// Спрашиваем у БД то, что сформировали while ($arr = $db->fetch_array($result)) { echo "Название ноды: ".$arr['title']." , и ее ID: ".$arr[nid]." "; }
?>
Скрипт вылетает с ошибкой ситаксиса запроса
<?php Ошибка MySQL : You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE 1=1 type = news AND status = 1 FROM vb_drupal_node ORDER BY creat' at line 2 ?>
Комментарии
меня тоже интересует данная тема
нужно разместить новости в блоке
а на главной только статическую страницу!
есть какой нить модуль?
taxonomy_block. Самому только на днях это понадобилось, вчера нашёл. Выдаёт в блоке заданное в настройках количество статей из определённого словаря/термина таксономии
хм, прикольная тема. А быстрее работает, чем Блок, сделанный в Views интересно, или игра не стоит свеч?
// Лимит вывода статей на странице
$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;
?>
Мнда, таки всё верно : )
Тока форматирование надо поправить : )
Хорошая вещь! Я тут слегка подправил, работает. Поставил на прикрепленную главную страницу.
Сразу прошу прощения, разбераюсь в этом интуитивно.
Класно было бы сделать вывод цитат случайным, помогите.
// Лимит вывода статей на странице
$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;
?>
Нет ничего проще : )
Как говриться "Зри в корень" : )
Вам нужно всего лишь перемешать значения!
То есть вместо:
// Формируем запрос к базе
$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";
?>
Писать вот так
// Формируем запрос к базе
// иперемешиваем занчения
$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?
// Лимит вывода статей на странице
$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;
?>
вы здесь выводите только $arr['title'].
Зачем вам такой запрос?
Если вам нужно только одно, два поля из таблицы, зачем так много спрашивать у БД? Скорость то падает...
Ну это черновой вариант, беловой здесь http://www.drupal.ru/node/7063 обновил, хотелось все и сразу в один скрипт вместить, а так по вариациям тогда несколько версий делать надо. Да и куда в скрипт кеш вставить и как его протестировать?
Сам доделал http://www.drupal.ru/node/7063
а через Views блок делается еще проще, заодно и кеширование блоков будет.
Ну нужен модуль. Тем более такой монстр для такой мелочной задачи. Всё делается в течении 2 минут средствами элементарного php. Кеширование аналогично.
......о как?!
Или лучше добавить возможность кэширования в данный скрипт
Все-таки views на уровне "нажал - работает" пользуют многие, а вот увидеть, как это делается пограммно - будет полезно многим.
Совершенно верно!
// Проверяем, существует ли кеш если существует, выводим его
// Если не существует создаём
// 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 не выполняется, просто выводится кеш.
Конечно есть свои нюансы, но это в двух словах...
Ну общая специфика - снижение нагрузки?
Да, так оно и есть : )
Офтопик: Судя по количеству и качеству комментариев в этом топике -- основная масса "друпалеров" любые вопросы пытается решить путём установки модуля. Это говорит о том, что основная масса, не может считаться компетентными специалистами по Drupal. IMHO
Офтопик: Судя по количеству и качеству комментариев в этом топике -- основная масса "друпалеров" любые вопросы пытается решить путём установки модуля. Это говорит о том, что основная масса, не может считаться компетентными специалистами по Drupal. IMHO
Судя по состоянию дел в общем и целом, основная масса пользователей не является основной массой специалистов в любой сфере. И Друпал тут вовсе даже не при чем
Лਠта
Офтопик: Судя по количеству и качеству комментариев в этом топике -- основная масса "друпалеров" любые вопросы пытается решить путём установки модуля. Это говорит о том, что основная масса, не может считаться компетентными специалистами по Drupal. IMHO
Мне кажется, вывод тут целиком противоположный. В PHP обычно лезешь, когда не знаешь, как решить проблему стандартными средствами. И не надо только стонов про громоздкость Views - он и так у всех стоит, одно дело - ради такой фигни его ставить, другое дело, когда он уже установленный. А то, что тут понаписано - называется гемморой. Это видимо приколько тем, кто не рубит или всё ещё тащится от набивания кода. Вместо того, чтобы учить непрограммеров копи-пасте делать, лучше учить грамотно работать с имеющимся инструментарием, а одними сниппетами жив не будешь, тем более работая прямыми запросами - вон, названия баз без фигурных скобок, при мультисайтинге или базах с префиксами работать перестанет, и наивная блондинка заплачет, пытаясь найти ошибку в коде. Так что снобизм, Лਠта, здесь неуместен.
Согласен, Views на сайте стоит, делает свою работу, с php вроде проблем нет, вот и думаешь что лучше, или сделать руками, или если уж стоит этот монстрик, то пусть отрабатывает по полной... Однако второй правильнее... Тут вроде как с фреймворком получается
Теперь полностью согласен!
jason32Мне кажется, вывод тут целиком противоположный. В PHP обычно лезешь, когда не знаешь, как решить проблему стандартными средствами. И не надо только стонов про громоздкость Views - он и так у всех стоит, одно дело - ради такой фигни его ставить, другое дело, когда он уже установленный. А то, что тут понаписано - называется гемморой. Это видимо приколько тем, кто не рубит или всё ещё тащится от набивания кода. Вместо того, чтобы учить непрограммеров копи-пасте делать, лучше учить грамотно работать с имеющимся инструментарием, а одними сниппетами жив не будешь, тем более работая прямыми запросами - вон, названия баз без фигурных скобок, при мультисайтинге или базах с префиксами работать перестанет, и наивная блондинка заплачет, пытаясь найти ошибку в коде. Так что снобизм, Лਠта, здесь неуместен.
А наивной блондинке разве нетрудно будет понять что новости надо добавлять в таксономию? Есть ли способ создав новый тип материала (например news_page), оперировать им добавляя страницы новостей как страницы новостей а не термины. Views так сможет? Просто, на мой взгляд и думаю взгляд наивной блондинки так будет правильнее и понятнее.
после моего столкновения с проблеммой новостей в живую, беру свои слова обратно ! виды + таксономия = рулез!
2jason32
эм... а что насчет названий баз и фигурных скобок? а можно пообщаться, лучше в ПМ
Интересный материал
Модернизировала, чтобы новость созданная в типе материалов news с телом показывалась в блоке при нажатии на заголовок с помощью яваскрипта, вот это надо в head:
function status(id){
if ( document.getElementById(id).style.display=='none' ){
document.getElementById(id).style.display='';
}else{
document.getElementById(id).style.display='none';
}
}
</script>
А вот 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 = '';
что делать???
// Лимит вывода статей на странице
$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 .= '
' . l($arr['title'], 'node/'. $arr[nid]) .'
';
// Автор
$output .= '' . t('автор: ') . l($arr['name'], 'user/'. $arr['name']) .'';
// Основное содержание
$output .= '
';
// типа материала
$output .= '
';
}
// Освобождаем память от переменной $result
mysql_free_result($result);
print $output;
?>
То что надо! а как сделать чтоб еще и дата публикации выводилась?
По-моему так:
что-то не то, он мне выдал
1.01.70
Вместо changed попробуйте created
не получается, все тот-же 1.01.70. код сниппета ниже.
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 .= "
";- ".l($anode->title, "node/$anode->nid")."
$result = db_query($sql);
while ($anode = db_fetch_object($result)) {
$output .= "
";
}
$output .= "
";
print $output;
?>
Запрос исправьте:
"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
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 .= "
";- ".l($anode->title, "node/$anode->nid")."
$result = db_query($sql);
while ($anode = db_fetch_object($result)) {
$output .= "
";
}
$output .= "
";
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 .= '
';
$output .= l('Далее', 'node/'. $arr[nid]).'
';
}
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;
?>
Более правильно будет в данном блоке делать запрос с учетом возможных префиксов в базе данных:
$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 .= '' . t(format_date($arr['created'], 'custom', ' j.m.y ')) .'';
$output .= '
'; /* не забудьте добавить оформление для класса .anons в стили сайта или замените в этой строке anons на нужный вам класс из существующих у вас */
$output .= l('[далее]', 'node/'. $arr[nid]).'
'.'
';
}
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 и сама всё неплохо чистит.Думаю в код будет полезно добавить выборку по языку, чтобы сделать блок универсальным для любого языка. После такого добавления блок будет показывать новости только для текущего языка сайта.
// Текущий язык
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;
?>
Вопрос: Как тоже самое сделать для страницы, но с поддержкой разбиения по на подстраницы, когда результат выборки длинный, например новостей более тысячи ?
Сам спросил, сам ответил:
вод код для страницы новостей с поддержкой постраничной разбивки:
// Текущий язык
global $language;
$limit = 20;
// тут будем всё хранить
$output = '';
// Формируем запрос к базе
$query = "SELECT {node}.changed, {node_revisions}.nid, {node_revisions}.title, ".
"{node_revisions}.teaser, {node_type}.type " .
"AS typename FROM {node_revisions}, {node}, {node_type} " .
"WHERE ({node_type}.type = {node}.type) AND ({node}.type = 'story') ".
"AND ({node_revisions}.nid = {node}.nid) ".
"AND ({node}.language='" . $language->language. "') ".
"ORDER BY {node}.created DESC";
// Спрашиваем у БД то, что сформировали
$result = pager_query( $query, $limit );
while ($node = db_fetch_object($result))
{
// Заголовок
$output .= '<h5 class="title">' . l($node->title, 'node/'. $node->nid).'</h2>';
// Дата
$output .= '<span class="submitted">' . t(format_date($node->changed, 'custom', ' j.m.y ')) . '</span>';
// Основное содержание
$output .= '<span class="content">' . $node->teaser . '</span>';
// Разделительная полоса
$output .= '<hr>';
}
// добавляем листалку
$output .= theme('pager', NULL, $limit);
print $output;
?>
так вроде views уже давно для этого есть...
Для некоторых задач юзать вьюс неразумно
У меня стоит PHP 5.3 текущий Views на нем глючит страшно, можно сказать что вообще не работает... Так что, приходится ручками.
такую таблицу(фильтрация по бейджикам) на вьюхе не сделаешь и такую(фильтрация по ролям) тоже
Ребята, подскажите как вывести в другой скрипт(СMS) блок с друпала?
Нужно вывести блок последних n нод определенного типа (опубликованные). Т.е запрос нужно делать не используя всяких друпаловских классов для запросов.
Вообщем сам запрос
<?php
// Спрашиваем у БД то, что сформировали
require_once('./global.php'); //тут данные для коннекта, база у скриптов одна
// Лимит вывода статей на странице
$limit = 7;// Выбранный типы материала
$type = 'news';
// Формируем запрос к базе
$result = $db->query_read( "
SELECT nid, title
WHERE 1=1 type = $type AND status = 1
FROM vb_drupal_node
ORDER BY created DESC LIMIT $limit
");
while ($arr = $db->fetch_array($result))
{
echo "Название ноды: ".$arr['title']." , и ее ID: ".$arr[nid]." ";
}
?>
Скрипт вылетает с ошибкой ситаксиса запроса
<?php
Ошибка MySQL : You have an error in your SQL syntax; check the manual that
corresponds to your MySQL server version for the right
syntax to use near 'WHERE 1=1 type = news AND status = 1 FROM
vb_drupal_node ORDER BY creat' at line 2
?>
Ошибка синтаксиса. Ищем неправильные букавы.
Может, WHERE 1=1 AND type = news