вывод новостей влевой части окна [Решено]

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

Аватар пользователя sadmin sadmin 5 января 2007 в 13:11

Всех с Новым годом и наступающим Рождеством!
Перед такой проблемой остановился - нужно новости поместить
в блоке левой части страницы.

Если подробнее, то задача описана может быть так:
у сайта будет несколько редакторов, у каждого свой раздел (страница),
как сделать чтобы при заходе пользователя (не редактора) на сайт, он
видел новости в куче с левой стороны страницы, а когда заходил на
определенную страницу (редактитуемую), видел только новости этого
раздела.

Помогите мне, пожалуйста !

Комментарии

Аватар пользователя rapitosov@drupal.org rapitosov@drupal.org 5 января 2007 в 16:21

Создаете новый блок с фильтром PHP и привязываете вывод к таксономии (получить таксономию можно функцией node_load(arg(1))). Вывод формируете подобно блоку recent posts.

---
http://drupal5.ru - информация для друпателей
качественные ответы только на качественные вопросы

Аватар пользователя sadmin sadmin 6 января 2007 в 22:37

rapitosov@drupal.org! мне ужасно неудобно... можно чуть чуть подробнее как это сделать?

Создал новый блок, указал радиобатоном "Показать, если введенный PHP-код возвращает TRUE ",
создал таксономию и на этом застрял. Тут без АПИ не обойтись, или я мудрю?

Как именно привязать таксономию к блоку?

Аватар пользователя rapitosov@drupal.org rapitosov@drupal.org 7 января 2007 в 1:11

Мудрить действительно не стоит. Условный переход встраивается в тело блока, нет смысла использовать условие видимости блока, потому как пустой блок в любом случае не показывается. В блок пишите примерно такой код:

<?php

  global $node;
  global $user;
  $node = node_load(arg(1));
  $parent = $node->parent ? $node->parent : $node->cid;
  if ($parent == 2) {
    echo '...';
  } elseif ($parent == 3) {
    echo '...';
  } elseif ($parent == 4) {
    echo '...';
  }
?>

Только возможно придется изменить определение $parent, так как этот пример писался под модуль category.

---
http://drupal5.ru - информация для друпателей
качественные ответы только на качественные вопросы

Аватар пользователя sadmin sadmin 8 января 2007 в 16:54

даже когда пишу
<?php
global $node;
global $user;
$node = node_load(arg(1));
print_r($node);
?>
Drupal выдает кучу ошибок. С этим примером должен обязательно разобраться. А есть ссылки на API?

Аватар пользователя rapitosov@drupal.org rapitosov@drupal.org 8 января 2007 в 20:00

Это может работать только на страничках публикаций, где arg(1) соответствует идентификатору текущей публикации. Можно, во избежание ошибок, обернуть код в if(arg(1)) {}

---
http://drupal5.ru - информация для друпателей
качественные ответы только на качественные вопросы

Аватар пользователя sadmin sadmin 9 января 2007 в 9:44

сналача понял не верно, теперь проясняется.

так решиться проблема с просмотром публикации на странице публикации, а как можно вытянуть на главную страницу публикации всех авторов?

Аватар пользователя sadmin sadmin 9 января 2007 в 11:40

с таксономией очень удобно! СПАСИБО за совет - структуризация получается очень удобная.

к вопросу о всех новостях/публикациях в блоке слева. Думаю попробовать парсить страницу
с материалами публикаций (из таксономии).

Второй вариант, это подключаться к базе и брать информацию из нее. В этом случае надо смотреть на готовые встроенные функции на drupal.org. Правильно думаю?

Аватар пользователя rapitosov@drupal.org rapitosov@drupal.org 9 января 2007 в 12:19

Из таксономии не удобно доставать список публикаций, нужно писать расширенный заброс к базе.

---
http://drupal5.ru - информация для друпателей
качественные ответы только на качественные вопросы

Аватар пользователя sadmin sadmin 9 января 2007 в 12:34

а как, на ваш взгляд, лучше?
сейчас для одной новости/термина пишу в блоке
$node=taxonomy_get_term(3);
echo $node->name.'
';
и выводиться. Конечно возникает проблема выборки
нужных term, да и по датам придется сортировать, но
это большой прогресс...

а с node_load(arg(1)) не разобрался, пока:)

если с запросами к бд разбираться, можно сразу с
db_query() начинать или подключаться нужно и еще что-то?

Аватар пользователя rapitosov@drupal.org rapitosov@drupal.org 9 января 2007 в 12:42

Смотрите в код блока последних публикаций, дополняйте запрос фильтром таксономии. Конечно, там придётся писать Join.

---
http://drupal5.ru - информация для друпателей
качественные ответы только на качественные вопросы

Аватар пользователя sadmin sadmin 9 января 2007 в 12:55

нашел на http://drupal.org/node/75707 что при использовании
node_load() появляется ошибка точно как у меня.

далее, по ссылке http://drupal.org/node/22218#node_load
говорится... не понял что говорится. Нужно использовать
новый вариант функции и указывается та же самая функция

Аватар пользователя sadmin sadmin 9 января 2007 в 13:07

у меня в списке блоков есть только "Последние комментарии"
JOIN это из области перекрестных запросов?

Аватар пользователя rapitosov@drupal.org rapitosov@drupal.org 9 января 2007 в 13:49

Да, слегка соврал, смотрите блок "последнии обсуждения форума" из модуля форумов. Там же сразу будет понятно как делать выборку из словаря.

---
http://drupal5.ru - информация для друпателей
качественные ответы только на качественные вопросы

Аватар пользователя sadmin sadmin 9 января 2007 в 16:03

есть только "Новые обсуждения форума", "Активные обсуждения форума", "Последние комментарии" и нигде нет настроек в блоках чтобы можно было настраивать фильтры.
Что не так?

Аватар пользователя rapitosov@drupal.org rapitosov@drupal.org 9 января 2007 в 17:09

Вот любой из первых двух, смотрите в код блоков, там идет запрос на выборку последних публикаций ассоциированных со словарем форума. Анналогично можно написать код для выборки публикаций ассоциированных с другим словарем.

Есть альтернативное предложение: Вы рисуете схему строения словарей и в каких ветках каких словерей что отображать, а я Вам напишу код блока, пиво пришлете почтой Smile

---
http://drupal5.ru - информация для друпателей
качественные ответы только на качественные вопросы

Аватар пользователя sadmin sadmin 10 января 2007 в 11:43

Первый раз на такую глубину ушел в drupal - копаюсь в листинге кода. Придется разбираться, хотя и с трудом.
Насчет пива не вопрос:)

Аватар пользователя sadmin sadmin 10 января 2007 в 14:09

if(arg(0) == 'node' and is_numeric(arg(1)))
{echo "...";}
действительно работает. пишу
if(arg(0) == 'taxonomy' and arg(1) == 'term')
{echo "...";}
выводиться на странице уровнем выше. Спасибо Dan!

Аватар пользователя rapitosov@drupal.org rapitosov@drupal.org 10 января 2007 в 14:19

Ага, таки вот в чем дело, мой пример был для публикаций, а для таксономии нужно использовать arg(2)
---
http://drupal5.ru - информация для друпателей
качественные ответы только на качественные вопросы

Аватар пользователя sadmin sadmin 10 января 2007 в 14:22

соответственно можно еще подобным образом по пользователю фильтровать вывод в блоке? т.е. можно не залезать в базу серьезно.

Аватар пользователя rapitosov@drupal.org rapitosov@drupal.org 10 января 2007 в 15:31

С пользователем всё гораздо проще, достаточно объявить:

global $user;

в этом объекте уже содержится вся информация о пользователе.

---
http://drupal5.ru - информация для друпателей
качественные ответы только на качественные вопросы

Аватар пользователя Dan Dan 10 января 2007 в 16:46

> т.е. можно не залезать в базу серьезно.
лесть в базу - последнее дело (не в смысле пОдло, а в смысле "когда больше ничего не помогает :). сначала нужно поискать существующие переменные/функции - благо исходный код открыт Smile