Как сделать блок новостей

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

Комментарии

Аватар пользователя vadbars@drupal.org vadbars@drupal.org 13 июня 2007 в 21:45

Оформление - CSS. Сам блок можно создать через модуль Views. Там указываются поля, их очередность и количество записей, которые нужно выводить в блоке (и как их отсортировать - по времени, по алфавиту и т.п.).

Аватар пользователя form form 13 июня 2007 в 22:32

Подскажите как именно, я нчего не понял из доков вьюва. Надо создать блок в настройках и туда вписать какой то пхп код, я так понимаю?

Аватар пользователя form form 13 июня 2007 в 23:56

Cпасибо. Но я кое что еще спрошу. Прочитал статью. Только вы кое что забыли. Я создал вид представления, а как мне теперь его использовать? То есть как создавать статьи, которые бы этому виду представления соответствовали, мне этот момент непонятен

Аватар пользователя vadbars@drupal.org vadbars@drupal.org 14 июня 2007 в 8:33

Созданный вами вид может быть представлен как блок или как страница. Это вы указываете в настройках вида. (Виды также можно компоновать друг с другом, например, с помощью модуля Panels или программно, вставкой кода. Но это уже следующая ступень мастерства Smile
Там же, в настройках вида, вы можете указать, по какому адресу он будет доступен (если вы отметили, что вид будет страницей). А если вы указали, что вид будет блоком, то идите на страницу списка блоков /admin/build/block. Там появился ваш свежесозданный блок, укажите, где его надо показывать.

Аватар пользователя noway noway 6 августа 2007 в 11:44

Делаю такую же вещь, интересует один вопрос: как сделать так, чтобы в созданном блоке показывалось только N слов(символов) тела нода, а затем ставилось ...
???

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

Все делается средствами элементарного php.
Никакого дополнительного модуля не надо, тем более монстра-Views.

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

Ленитесь сударь, ленитесь.
Искать ответ не надо -- вы же не в загадки играете, надо решать задачу Smile

Очень подробно (можно сделать короче) :

<?php
// Выбранный тип материала
$type = 'page';

// Строка после обрезания Smile
$nev_str = '';

// Сколько символов оставляем
$str_len = 40;

// тут будем всё хранить
$output  = '';

// Формируем запрос к базе
 $query = "SELECT node_revisions.nid, 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_type.type = node.type) AND (node_type.type ='%s')";
             

// Спрашиваем у БД то, что сформировали
$result = db_query($query, $type);

// Проходимся циклом по результату
while ($arr = db_fetch_array($result)) {
   // Если тизер (анонс. teaser) длинее чем $str_len -- обрезаем её на количество $str_len
   if (strlen($arr['teaser']) > $str_len) {
      $nev_str = substr($arr['teaser'], 0, $str_len);
   }
   // Формируем заголовок из тизера
    $output .= '<h2 class="title">' . l($arr['teaser'], 'node/'. $arr[nid]) .'</h2>';

}

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

// Печатаем
print  $output;

?>

Домашнее задание:
Проработать раздел PHP Stings.

Аватар пользователя ultraboy@drupal.org ultraboy@drupal.org 6 августа 2007 в 13:34

ЛОЛ. В данном виде, имхо, не юзабельно. Нужно доделать чтобы не резало на полуслове и добавить LIMIT в запрос. Тогда и функция mysql_free_result окажется не нужна...

P.S. В друпале нужно не "лимит" в запрос добавлять, а вызывать функцию db_query_range

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

Это отправная точка Smile

Естественно можно улучшить и доработать.
Например убрать пробелы если они есть в начале строки, добавить троеточие в конец строки, вывети дату и тому подобное.
Я только каркас нарисовал : )

Аватар пользователя noway noway 6 августа 2007 в 17:46

Отлично. Сделал. Все работает!!!

<?php
// Выбранный тип материала
$type = 'news';

// Строка после обрезания Smile
$nev_str = '';

// Сколько символов оставляем
$str_len = 120;

// тут будем всё хранить
$output  = '<img src="/media/images/text-news.jpg" />';

// Формируем запрос к базе
 $query = "SELECT nr.title,nr.body,n.type,n.created,n.nid FROM node as n "
."LEFT JOIN `node_revisions` as nr ON nr.nid=n.nid "
."WHERE n.type='%s' ORDER BY n.created LIMIT 5";
             

// Спрашиваем у БД то, что сформировали
$result = db_query($query, $type);

// Проходимся циклом по результату
while ($arr = db_fetch_array($result)) {
   // Если тизер (анонс. teaser) длинее чем $str_len -- обрезаем её на количество $str_len
   if (strlen($arr['body']) > $str_len-3) {
      $nev_str = substr($arr['body'], 0, $str_len)."...";
   } else
$nev_str = $arr['body'];
   // Формируем заголовок из тизера
    $output .= '<div class="new-item">';
    $output .= '<div class="date">' . t(format_date($arr['created'],'small')) .'</div>';
    $output .= '<div class="title">' . t($arr['title']) .'</div>';
    $output .= '<div class="body">' . t($nev_str) .'</div>';
    $output .= '</div>';
}

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

// Печатаем
print  $output;

?>