feeds и категории

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

Аватар пользователя roddy roddy 21 августа 2011 в 18:33

Моя задача:
нужно на основе нескольких RSS лент сделать новостную страницу с категориями, по категории на ленту.
Что уже сделал:
забираю исходные ленты, обрабатываю в Yahoo! Pipes, забираю модулем Feeds к себе на сайт по схеме "rss -> nodes". Настройки по умолчанию.
В чем проблемы:
1)ключевая проблема: полученные ноды вызываются через импортер 'node/%' с алиасом 'somecat' исключительно по адресу 'node/%/feed-items', с заголовком h1 над списком нод: "Articles from %title". Половина заголовка на английском, половина на русском, смотрится кошмарно и вообще он там не нужен.
что отвечает за появление этого заголовка? в views поковырялся, но не нашёл ничего.
2) как можно привязать ноды одного импортера к какой-либо категории, и вызывать их через нее? чтобы вместо адреса 'node/%/feed-items' было то-то наподобие 'somecat'?
3) вообще, каким средством лучше создать подходящую категорию?

И в довесок:
4) чем можно осуществлять премодерацию полученных нодов? Т.е. чтобы ноды создавались, но не были видны "гостям" до одобрения?
5) при помощи какого механизма можно забрать картинки из новости с сайта-донора, и разместить на своем?

Комментарии

Аватар пользователя Dimaseo Dimaseo 21 августа 2011 в 19:25

Может использовать не feeds а что-то типа самописного импортера?
В него можно и граббинг картинок вставить, и категории присваивать нужные и ставить статус "не опубликовано".
Пишете под себя, вешаете на крон и все.

Аватар пользователя YGerasimov YGerasimov 21 августа 2011 в 19:51

Уверен, что с помощью feeds можно добиться всего.
1. Алиасы, поля. Думаю нужно посмотреть настройки маппинга полей. Возможно в какое-то поле приходит не то, что нужно. В feeds, очень удобно провести обработку данных перед их маппингом. Но это нужно будет естественно писать код самостоятельно. Рекомендую почитать http://ygerasimov.com/feeds-cheatsheet-for-developers
2. Насколько я понял вопрос нужно к нодам, которые создаются импортером, привязать определенный термин таксономии. Это как раз и можно сделать на стадии обработки данных перед маппингом.
3. Не понял вопрос.
4. Премодерацию можно сделать убрав статус публикации у ноды. Тоесть все импортируемые ноды будут изначально депубликованы.
5. Картинки можно забрать в процессе работы импортера. Тут нужно например проанализировать текст ноды, выкачать исходные картинки, сохранить их локально, и поменять ссылки в тексте. Возможен конечно и вариант сохранить картинки в файловое поле ноды.

Аватар пользователя roddy roddy 22 августа 2011 в 13:50

Поиграл с полями, с маппингом, в частности установил связь: SOURCE:Feed node: Taxonomy: voc1 -> TARGET:field_cat, тип поля field_cat - ссылка на термин. Получил ошибку:

Fatal error: Call to undefined function taxonomy_node_get_terms() in sites/all/modules/feeds/mappers/taxonomy.inc

Ошибка возникает при вызове функции

function taxonomy_feeds_get_source(FeedsSource $source, FeedsParserResult $result, $key) {
  if ($node = node_load($source->feed_nid)) {
    $terms = taxonomy_node_get_terms($node);
    $vocabularies = taxonomy_vocabulary_load_multiple(array(), array('machine_name' => str_replace('parent:taxonomy:', '', $key)));
    $vocabulary = array_shift($vocabularies);
    $result = array();
    foreach ($terms as $tid => $term) {
      if ($term->vid == $vocabulary->vid) {
        $result[] = new FeedsTermElement($term);
      }
    }
    return $result;
  }
}

В комментариях документации по taxonomy_node_get_terms() нашёл, что в семерке она была удалена, и схожий функционал выполняет функция field_view_field(). Заменил название функции в указанном месте на field_view_field('feed', $node, 'field_cat'), стал получать

Возникла AJAX HTTP ошибка. Полученный код HTTP: 200 Следует отладочная информация. Путь: /?q=batch&id=29&op=do СтатусТекст: OK ResponseText: Fatal error: Cannot access empty property in /modules/field/field.attach.inc on line 314

Если не указывать тип ('feed'), ошибок при импорте не возникает, но и ссылка на термин не создается. Ищу дальше.

Аватар пользователя roddy roddy 22 сентября 2011 в 13:49

Поскольку на повестке дня висят задачи поважнее, правку модуля пока прекратил, уж больно много там от 6й версии атавизмов. Рискну предположить, что в виде затычки можно присваивать полю типа "ссылка на термин" готовое значение, генерируемое в Yahoo! Pipes.