Оформление - CSS. Сам блок можно создать через модуль Views. Там указываются поля, их очередность и количество записей, которые нужно выводить в блоке (и как их отсортировать - по времени, по алфавиту и т.п.).
Эх, разжуй да положи... Как говорил мой дед-украинец: "А кофтать (глотать) хто будэ?"
Ладно уж - http://drupal.ru/node/1786. Там, правда, про табличный вид, а не списком. Но принципы одни и те же.
Cпасибо. Но я кое что еще спрошу. Прочитал статью. Только вы кое что забыли. Я создал вид представления, а как мне теперь его использовать? То есть как создавать статьи, которые бы этому виду представления соответствовали, мне этот момент непонятен
Созданный вами вид может быть представлен как блок или как страница. Это вы указываете в настройках вида. (Виды также можно компоновать друг с другом, например, с помощью модуля Panels или программно, вставкой кода. Но это уже следующая ступень мастерства
Там же, в настройках вида, вы можете указать, по какому адресу он будет доступен (если вы отметили, что вид будет страницей). А если вы указали, что вид будет блоком, то идите на страницу списка блоков /admin/build/block. Там появился ваш свежесозданный блок, укажите, где его надо показывать.
Делаю такую же вещь, интересует один вопрос: как сделать так, чтобы в созданном блоке показывалось только N слов(символов) тела нода, а затем ставилось ...
???
ЛОЛ. В данном виде, имхо, не юзабельно. Нужно доделать чтобы не резало на полуслове и добавить LIMIT в запрос. Тогда и функция mysql_free_result окажется не нужна...
P.S. В друпале нужно не "лимит" в запрос добавлять, а вызывать функцию db_query_range
Естественно можно улучшить и доработать.
Например убрать пробелы если они есть в начале строки, добавить троеточие в конец строки, вывети дату и тому подобное.
Я только каркас нарисовал : )
// тут будем всё хранить $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);
Комментарии
Оформление - CSS. Сам блок можно создать через модуль Views. Там указываются поля, их очередность и количество записей, которые нужно выводить в блоке (и как их отсортировать - по времени, по алфавиту и т.п.).
Подскажите как именно, я нчего не понял из доков вьюва. Надо создать блок в настройках и туда вписать какой то пхп код, я так понимаю?
Это долго описывать. У меня в блоге была заметка про основы Views (кажется, самая первая). Прочитайте - может, немного яснее будет.
Можете кинуть ссылку, не могу найти! Заранее спасибо
Эх, разжуй да положи... Как говорил мой дед-украинец: "А кофтать (глотать) хто будэ?"
Ладно уж - http://drupal.ru/node/1786. Там, правда, про табличный вид, а не списком. Но принципы одни и те же.
Спасибо!
Cпасибо. Но я кое что еще спрошу. Прочитал статью. Только вы кое что забыли. Я создал вид представления, а как мне теперь его использовать? То есть как создавать статьи, которые бы этому виду представления соответствовали, мне этот момент непонятен
Созданный вами вид может быть представлен как блок или как страница. Это вы указываете в настройках вида. (Виды также можно компоновать друг с другом, например, с помощью модуля Panels или программно, вставкой кода. Но это уже следующая ступень мастерства
Там же, в настройках вида, вы можете указать, по какому адресу он будет доступен (если вы отметили, что вид будет страницей). А если вы указали, что вид будет блоком, то идите на страницу списка блоков /admin/build/block. Там появился ваш свежесозданный блок, укажите, где его надо показывать.
Спасибо огромное, очень помогли, теперь буду разбираться с настройками их отображения
Делаю такую же вещь, интересует один вопрос: как сделать так, чтобы в созданном блоке показывалось только N слов(символов) тела нода, а затем ставилось ...
???
Все делается средствами элементарного php.
Никакого дополнительного модуля не надо, тем более монстра-Views.
А подскажите как ? хотя бы в какую сторону искать ответ ?
Ленитесь сударь, ленитесь.
Искать ответ не надо -- вы же не в загадки играете, надо решать задачу
Очень подробно (можно сделать короче) :
// Выбранный тип материала
$type = 'page';
// Строка после обрезания
$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.
ЛОЛ. В данном виде, имхо, не юзабельно. Нужно доделать чтобы не резало на полуслове и добавить LIMIT в запрос. Тогда и функция mysql_free_result окажется не нужна...
P.S. В друпале нужно не "лимит" в запрос добавлять, а вызывать функцию db_query_range
Это отправная точка
Естественно можно улучшить и доработать.
Например убрать пробелы если они есть в начале строки, добавить троеточие в конец строки, вывети дату и тому подобное.
Я только каркас нарисовал : )
Отлично. Сделал. Все работает!!!
// Выбранный тип материала
$type = 'news';
// Строка после обрезания
$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;
?>