Новости в блоке

Главные вкладки

Аватар пользователя igor1970 igor1970 24 июля 2007 в 20:50

Подскажите, пожалуйста, как разместить новости в блоке?
С Друпалом только начал разбираться, в PHP откровенно слаб.

Комментарии

Аватар пользователя archtod archtod 27 июля 2007 в 0:01

меня тоже интересует данная тема Smile
нужно разместить новости в блоке
а на главной только статическую страницу!

есть какой нить модуль?

Аватар пользователя Shelendor Shelendor 27 июля 2007 в 0:14

taxonomy_block. Самому только на днях это понадобилось, вчера нашёл. Выдаёт в блоке заданное в настройках количество статей из определённого словаря/термина таксономии

Аватар пользователя _SadhooKlay _SadhooKlay (не проверено) 31 июля 2007 в 12:51
  • Создаёте блок
  • В настройках указываете показывать везде кроме 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;

?>

Аватар пользователя artcons artcons 1 августа 2007 в 8:58

Хорошая вещь! Я тут слегка подправил, работает. Поставил на прикрепленную главную страницу.
Сразу прошу прощения, разбераюсь в этом интуитивно.
Класно было бы сделать вывод цитат случайным, помогите.

<?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;

?>

Аватар пользователя ԉӱҭѧ ԉӱҭѧ 1 августа 2007 в 17:01

Нет ничего проще : )

Как говриться "Зри в корень" : )

Вам нужно всего лишь перемешать значения!

То есть вместо:

<?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)

Автору респект за скрипт Wink

Аватар пользователя artcons artcons 3 августа 2007 в 5:01

Я тут немного переставил значения, заработало.
Но, водятся ненужные страницы.
Как сделать исключения на страницу например 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;

?>

Аватар пользователя ԉӱҭѧ ԉӱҭѧ 10 августа 2007 в 2:10

вы здесь выводите только $arr['title'].
Зачем вам такой запрос?

Если вам нужно только одно, два поля из таблицы, зачем так много спрашивать у БД? Скорость то падает...

Аватар пользователя artcons artcons 10 августа 2007 в 2:54

Ну это черновой вариант, беловой здесь http://www.drupal.ru/node/7063 обновил, хотелось все и сразу в один скрипт вместить, а так по вариациям тогда несколько версий делать надо. Да и куда в скрипт кеш вставить и как его протестировать?

Аватар пользователя ԉӱҭѧ ԉӱҭѧ 10 августа 2007 в 0:07

Ну нужен модуль. Тем более такой монстр для такой мелочной задачи. Всё делается в течении 2 минут средствами элементарного php. Кеширование аналогично.

Аватар пользователя marazmus marazmus 9 августа 2007 в 10:01

Или лучше добавить возможность кэширования в данный скрипт Smile

Все-таки views на уровне "нажал - работает" пользуют многие, а вот увидеть, как это делается пограммно - будет полезно многим.

Аватар пользователя ԉӱҭѧ ԉӱҭѧ 10 августа 2007 в 0:14

Совершенно верно!

<?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));
      }

?>

Аватар пользователя artcons artcons 10 августа 2007 в 0:31

Если я правильно все понимаю кеширование снижает нагрузку на сайт и хранит инф. в кеше компа пользователя?

Аватар пользователя ԉӱҭѧ ԉӱҭѧ 10 августа 2007 в 2:01

Нет: это не так.
В дух словах, кеш хранится в БД и при запросе контента, SQL не выполняется, просто выводится кеш.
Конечно есть свои нюансы, но это в двух словах...

Аватар пользователя ԉӱҭѧ ԉӱҭѧ 10 августа 2007 в 2:11

Офтопик: Судя по количеству и качеству комментариев в этом топике -- основная масса "друпалеров" любые вопросы пытается решить путём установки модуля. Это говорит о том, что основная масса, не может считаться компетентными специалистами по Drupal. IMHO

Аватар пользователя marazmus marazmus 10 августа 2007 в 12:58

Офтопик: Судя по количеству и качеству комментариев в этом топике -- основная масса "друпалеров" любые вопросы пытается решить путём установки модуля. Это говорит о том, что основная масса, не может считаться компетентными специалистами по Drupal. IMHO

Судя по состоянию дел в общем и целом, основная масса пользователей не является основной массой специалистов в любой сфере. И Друпал тут вовсе даже не при чем Smile

Аватар пользователя jason32 jason32 10 августа 2007 в 20:28

Лਠта
Офтопик: Судя по количеству и качеству комментариев в этом топике -- основная масса "друпалеров" любые вопросы пытается решить путём установки модуля. Это говорит о том, что основная масса, не может считаться компетентными специалистами по Drupal. IMHO

Мне кажется, вывод тут целиком противоположный. В PHP обычно лезешь, когда не знаешь, как решить проблему стандартными средствами. И не надо только стонов про громоздкость Views - он и так у всех стоит, одно дело - ради такой фигни его ставить, другое дело, когда он уже установленный. А то, что тут понаписано - называется гемморой. Это видимо приколько тем, кто не рубит или всё ещё тащится от набивания кода. Вместо того, чтобы учить непрограммеров копи-пасте делать, лучше учить грамотно работать с имеющимся инструментарием, а одними сниппетами жив не будешь, тем более работая прямыми запросами - вон, названия баз без фигурных скобок, при мультисайтинге или базах с префиксами работать перестанет, и наивная блондинка заплачет, пытаясь найти ошибку в коде. Так что снобизм, Лਠта, здесь неуместен.

Аватар пользователя orbisnull orbisnull 13 августа 2007 в 16:20

Согласен, Views на сайте стоит, делает свою работу, с php вроде проблем нет, вот и думаешь что лучше, или сделать руками, или если уж стоит этот монстрик, то пусть отрабатывает по полной... Однако второй правильнее... Тут вроде как с фреймворком получается Wink

Аватар пользователя player player 31 октября 2007 в 8:57

jason32Мне кажется, вывод тут целиком противоположный. В PHP обычно лезешь, когда не знаешь, как решить проблему стандартными средствами. И не надо только стонов про громоздкость Views - он и так у всех стоит, одно дело - ради такой фигни его ставить, другое дело, когда он уже установленный. А то, что тут понаписано - называется гемморой. Это видимо приколько тем, кто не рубит или всё ещё тащится от набивания кода. Вместо того, чтобы учить непрограммеров копи-пасте делать, лучше учить грамотно работать с имеющимся инструментарием, а одними сниппетами жив не будешь, тем более работая прямыми запросами - вон, названия баз без фигурных скобок, при мультисайтинге или базах с префиксами работать перестанет, и наивная блондинка заплачет, пытаясь найти ошибку в коде. Так что снобизм, Лਠта, здесь неуместен.

А наивной блондинке разве нетрудно будет понять что новости надо добавлять в таксономию? Есть ли способ создав новый тип материала (например news_page), оперировать им добавляя страницы новостей как страницы новостей а не термины. Views так сможет? Просто, на мой взгляд и думаю взгляд наивной блондинки так будет правильнее и понятнее.

Аватар пользователя player player 31 октября 2007 в 10:45

после моего столкновения с проблеммой новостей в живую, беру свои слова обратно Smile ! виды + таксономия = рулез!

Аватар пользователя SaBoNim SaBoNim 30 ноября 2007 в 15:48

Модернизировала, чтобы новость созданная в типе материалов 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

Аватар пользователя SaBoNim SaBoNim 30 ноября 2007 в 21:13

А если сайт визитка? и Views будет только лишним? Нагромождать его этим модулем считаю лишним поэтому сделала именно так)))
Кроме того я элементарно не знаю как сделать на яваскрипте такой показ новостей с помощью Views...

Аватар пользователя Dec0der Dec0der 14 января 2008 в 3:57

а у меня ошибку выбрасывает...
Parse error: parse error, unexpected T_VARIABLE in x:\www\themes\тема\page.tpl.php on line 74

Ругается на $output = '';
что делать???

Аватар пользователя ga6iem ga6iem 1 мая 2008 в 23:07
  1. <?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 .= '

    ' . l($arr['title'], 'node/'. $arr[nid]) .'

    ';

    // Автор
    $output .= '';

    // Основное содержание
    $output .= '

    ' . $arr['teaser'] . '

    ';

    // типа материала
    $output .= '

    '. $arr['typename'] . '

    ';
    }

    // Освобождаем память от переменной $result
    mysql_free_result($result);

    print $output;

    ?>

  2. То что надо! а как сделать чтоб еще и дата публикации выводилась?

Аватар пользователя ga6iem ga6iem 2 мая 2008 в 0:15

не получается, все тот-же 1.01.70. код сниппета ниже.

  1. <?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 .= "
      ";
      $result = db_query($sql);
      while ($anode = db_fetch_object($result)) {
      $output .= "
    • ".l($anode->title, "node/$anode->nid")."
    • ";
      }
      $output .= "

    ";
    print $output;
    ?>

Аватар пользователя SaBoNim SaBoNim 2 мая 2008 в 0:25

Запрос исправьте:

$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: Я не программист

Аватар пользователя ga6iem ga6iem 2 мая 2008 в 1:04

да что такое?! Вообще статьи данного типа перестали отображаться. зато в блоке гордо горит единственная надпись 1.01.70

  1. <?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 .= "

      ";
      $result = db_query($sql);
      while ($anode = db_fetch_object($result)) {
      $output .= "
    • ".l($anode->title, "node/$anode->nid")."
    • ";
      }
      $output .= "

    ";
    print $output;
    ?>

А может посоветуете готовый сниппет который-бы выводил в блоке содежимое по типу материалов + дату публикации. Ведь делал-же кто-нибудь без views!
Т.е. в идеале для меня в реализуемом сниппетом блоке 2 статьи одного типа должны отображаться как

12.12.08
Анонс
>далее
13.12.08
Анонс
>далее

а то хожу вокруг да около, весь сайт прерыл Sad

Аватар пользователя SaBoNim SaBoNim 2 мая 2008 в 2:02

Вот рабочий (специально для вас)))
<?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 .= '

' . $arr['teaser'] . '

';
$output .= l('Далее', 'node/'. $arr[nid]).'
';
}
mysql_free_result($result);
print $output;

?>

Аватар пользователя ga6iem ga6iem 2 мая 2008 в 14:37

Большое Вам спасибо! Всё получилось! Немного подправил запрос на предмет чтоб дата выводилась по времени создания документа.

Единственная проблема в том что последние новости уходят вниз по дате, т.е.
1.05.08
новость
2.05.08
новость

А как сделать чтоб было?
2.05.08
новость
1.05.08
новость

Аватар пользователя ga6iem ga6iem 2 мая 2008 в 14:45

Проблема решена!

<?
 $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;

?>

Аватар пользователя WiseMan WiseMan 2 июля 2008 в 17:59

Более правильно будет в данном блоке делать запрос с учетом возможных префиксов в базе данных:

<?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;
?>
Аватар пользователя pmserg2000 pmserg2000 11 июля 2009 в 13:58

Подскажите, плиз, как решить такую проблему: при добавлении следующего кода в блок

<?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 .= '

' . $arr['teaser'] . '

'; /* не забудьте добавить оформление для класса .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

Аватар пользователя W32 W32 4 ноября 2009 в 16:06

Думаю в код будет полезно добавить выборку по языку, чтобы сделать блок универсальным для любого языка. После такого добавления блок будет показывать новости только для текущего языка сайта.

<?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;
 
?>

Аватар пользователя W32 W32 4 ноября 2009 в 16:08

Вопрос: Как тоже самое сделать для страницы, но с поддержкой разбиения по на подстраницы, когда результат выборки длинный, например новостей более тысячи ?

Аватар пользователя W32 W32 6 ноября 2009 в 15:02

Сам спросил, сам ответил:
вод код для страницы новостей с поддержкой постраничной разбивки:

<?php

   // Текущий язык
   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;
?>

Аватар пользователя W32 W32 6 ноября 2009 в 15:01

У меня стоит PHP 5.3 текущий Views на нем глючит страшно, можно сказать что вообще не работает... Так что, приходится ручками.

Аватар пользователя Paldru Paldru 30 декабря 2009 в 22:11

Ребята, подскажите как вывести в другой скрипт(С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 syntaxcheck 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
?>
Аватар пользователя Алешка Алешка 12 января 2010 в 10:38

"Paldru" wrote:
You have an error in your SQL syntax; check ... syntax to use near 'WHERE 1=1 type = news AND status = 1 FROM
vb_drupal_node ORDER BY creat' at line 2

Ошибка синтаксиса. Ищем неправильные букавы.