Как изменить поля, выводимые в RSS-каналах Drupal? - PullRequest
7 голосов
/ 05 января 2010

Попытка изменить RSS-каналы, созданные модулем Views в Drupal.

Поскольку для каналов RSS нет ловушек 'theme_' (по праву, поскольку XML не содержит тем), мне нужен альтернативный способ изменить поля, выводимые в RSS, предпочтительно, если возможно, с использованием template.php.

http://api.drupal.org/api/function/format_rss_item/6 выглядит многообещающе, поскольку именно там создается каждая строка, но это не

node_feed() - это то, что собирает узлы, создает дополнительные поля и затем вызывает format_rss_item().

В частности, нам нужно удалить элемент dc:creator из массива $extra, созданного в node_feed()

Ответы [ 4 ]

4 голосов
/ 16 марта 2011

Если вы входите в определенный тип контента, вы можете установить поля отображения RSS согласно этому сообщению:

http://redfinsolutions.com/redfin-blog/show-hide-fields-views-generated-drupal-rss-feed

2 голосов
/ 20 января 2010

Я добавляю еще один ответ, поскольку мне недавно пришлось это сделать, и мне удалось это сделать без изменения данных в слое темы.

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

Здесь есть рекомендации , но они немного запутаны. Вот мое резюме того, как это сделать.

Сначала убедитесь, что вес ваших модулей> просмотров

Во-вторых, скопируйте шаблон, в который вы хотите добавить препроцессор, в каталог ваших модулей. Переименуйте его, чтобы оно было чем-то в списке шаблонов в тематической информации.

Затем отредактируйте тему крючка следующим образом (но измените на использование существующего представления, которое необходимо переопределить.

function mymodule_theme($existing, $type, $theme, $path) {
  // Copy the exsisting views theme from the existing array.
  $override = $existing['views_view_row_rss'];
  // Add my preprocessor to the list of preprocess functions
  $override['preprocess functions'][] = 'mymodule_myfunction';
  // Point to a template so that this view will be used.
  $override['template'] = 'my_more_specific_template_name';
  $override['path'] = drupal_get_path('module', 'path');
  unset($override['file']);
  // Return your theme handler.
  return array('my_more_specific_template_name' => $override);
}

После этого вы сможете написать свой код предварительной обработки в функции mymodule_myfunction.

0 голосов
/ 06 января 2010

В представлении, если вы нажмете «Информация о стиле», это покажет вам файлы шаблонов, использованные для создания канала. Вы можете скопировать шаблон так, чтобы он был переопределен для вашего просмотра, и удалить dc: creator из массива $item_elements.

Это не особенно приятно, поскольку вы изменяете данные в слое темы, но это будет делать то, что вы хотите.

0 голосов
/ 05 января 2010

Я бы предложил для этого использовать модуль Feed Node Feed . Это позволит вам полностью написать XML, который выводится представлениями для каналов.

...