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

Прислано: igor1970

вт, 24/07/2007 - 16:50

Другие статьи по теме:

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

Комментарии


Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Применить"
Опубликовано archtod в чт, 26/07/2007 - 20:01.

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

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


Опубликовано Shelendor в чт, 26/07/2007 - 20:14.

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


Опубликовано jason32 в пн, 30/07/2007 - 22:09.

хм, прикольная тема. А быстрее работает, чем Блок, сделанный в Views интересно, или игра не стоит свеч?


Опубликовано _SadhooKlay (гостевой логин) в вт, 31/07/2007 - 08: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;
 
?>


Опубликовано ԉӱҭѧ в вт, 31/07/2007 - 09:33.

Мнда, таки всё верно : )


Опубликовано ԉӱҭѧ в вт, 31/07/2007 - 20:58.

Тока форматирование надо поправить : )


Опубликовано artcons в ср, 01/08/2007 - 04: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;
 
?>


Опубликовано ԉӱҭѧ в ср, 01/08/2007 - 13: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)

Автору респект за скрипт ;-)


Опубликовано artcons в пт, 03/08/2007 - 01: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;
 
?>


Опубликовано artcons в ср, 08/08/2007 - 20:39.

Сам доделал http://www.drupal.ru/node/7063


Опубликовано kiev1 в ср, 08/08/2007 - 21:59.

а через Views блок делается еще проще, заодно и кеширование блоков будет.


Опубликовано artcons в ср, 08/08/2007 - 22:24.

......о как?!


Опубликовано marazmus в чт, 09/08/2007 - 06:01.

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

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


Опубликовано ԉӱҭѧ в чт, 09/08/2007 - 20:07.

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


Опубликовано ԉӱҭѧ в чт, 09/08/2007 - 20: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 в чт, 09/08/2007 - 20:31.

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


Опубликовано ԉӱҭѧ в чт, 09/08/2007 - 22:01.

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


Опубликовано ԉӱҭѧ в чт, 09/08/2007 - 22:10.

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

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


Опубликовано ԉӱҭѧ в чт, 09/08/2007 - 22:11.

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


Опубликовано artcons в чт, 09/08/2007 - 22:11.

Ну общая специфика - снижение нагрузки?


Опубликовано ԉӱҭѧ в чт, 09/08/2007 - 22:16.

Да, так оно и есть : )


Опубликовано artcons в чт, 09/08/2007 - 22:54.

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


Опубликовано marazmus в пт, 10/08/2007 - 08:58.

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

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


Опубликовано jason32 в пт, 10/08/2007 - 16:28.

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

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


Опубликовано igdrasil@drupal.org в пт, 10/08/2007 - 21:25.

2jason32
эм... а что насчет названий баз и фигурных скобок? а можно пообщаться, лучше в ПМ


Опубликовано Valeratal в пн, 13/08/2007 - 06:42.

Интересный материал


Опубликовано orbisnull в пн, 13/08/2007 - 12:20.

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


Опубликовано artcons в вс, 23/09/2007 - 21:30.

Теперь полностью согласен! :)


Опубликовано player в ср, 31/10/2007 - 05:57.

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

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


Опубликовано player в ср, 31/10/2007 - 07:45.

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


Опубликовано SaBoNim в пт, 30/11/2007 - 12: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


Опубликовано artcons в пт, 30/11/2007 - 18:03.

Не парьтесь, через Views ---------------------- :)


Опубликовано SaBoNim в пт, 30/11/2007 - 18:13.

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


Опубликовано Natalie в вс, 13/01/2008 - 23:02.

Для сайта-визитки со статическим контентом и Друпал будет лишним ;)


Опубликовано Dec0der в пн, 14/01/2008 - 00:57.

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

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


Опубликовано ga6iem в чт, 01/05/2008 - 19: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 .= '<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;
     
    ?>
  2. То что надо! а как сделать чтоб еще и дата публикации выводилась?


Опубликовано SaBoNim в чт, 01/05/2008 - 19:37.

По-моему так:

$output .= t(format_date($arr['changed'], 'custom', ' j.m.y '));


Опубликовано ga6iem в чт, 01/05/2008 - 19:57.

что-то не то, он мне выдал
1.01.70


Опубликовано SaBoNim в чт, 01/05/2008 - 20:07.

Вместо changed попробуйте created


Опубликовано ga6iem в чт, 01/05/2008 - 20: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 .= "<ul>";
    $result db_query($sql);
    while (
    $anode db_fetch_object($result)) {
    $output .= "<li>".l($anode->title"node/$anode->nid")."</li>";
    }
    $output .= "</ul>";
    print 
    $output;
    ?>


Опубликовано SaBoNim в чт, 01/05/2008 - 20: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 в чт, 01/05/2008 - 21: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 .= "<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
Анонс
>далее

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


Опубликовано SaBoNim в чт, 01/05/2008 - 22: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 .= '<div class="anons">' $arr['teaser'] . '</div>';
 
$output .= l('Далее''node/'$arr[nid]).'<br />';
   }
  
mysql_free_result($result);
  print  
$output;
 
?>


Опубликовано ga6iem в пт, 02/05/2008 - 10:37.

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

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

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


Опубликовано ga6iem в пт, 02/05/2008 - 10: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 в ср, 02/07/2008 - 13: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 в сб, 11/07/2009 - 09: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 .= '<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


Опубликовано jason32 в сб, 11/07/2009 - 14:11.

нафиг тут вообще этот <?php mysql_free_result($result);?> ? Убрать его к чертям, mysql и сама всё неплохо чистит.


Опубликовано W32 в ср, 04/11/2009 - 13: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 в ср, 04/11/2009 - 13:08.

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


Новое на сайте

Ссылки партнёров