【问题标题】:Drupal 7: Make an RSS feed with multiple <item>s per node?Drupal 7:制作一个每个节点有多个 <item> 的 RSS 提要?
【发布时间】:2012-01-29 08:18:39
【问题描述】:

我有一个包含音频文件字段的内容类型“音频”。该字段接受多个值,因此每个节点可以包含任意数量的音频文件。通常,当您构建 RSS 提要视图时,它会为每个节点生成一个 &lt;item&gt;,每个节点都会有多个 &lt;enclosure&gt; 条目,每个音频文件一个。但出于我的目的,我需要视图为每个音频文件值输出一个单独的&lt;item&gt;。因此,例如,如果选定节点中有 3 个音频文件,则整个节点将在提要中重复 3 次,每个节点将仅包含一个音频文件附件。

原因是在我的特定情况下,我在自定义模块中使用hook_node_view() 将 MRSS 标记添加到视图生成的每个节点。因此,音频文件不会被&lt;enclosure&gt; 包裹,而是被包裹在&lt;media:content&gt; 标签中。根据 MRSS 规范,每个&lt;media:content&gt; 条目不应超过一个&lt;item&gt;,除非它们代表相同的内容。这是因为像&lt;title&gt;&lt;description&gt; 这样的其他标签属于同一个&lt;item&gt; 中的所有&lt;media:content&gt; 标签。具有讽刺意味的是,自定义钩子是最简单的部分,但首先我需要让视图以我描述的方式输出节点。

那么有什么方法可以使用新的 Drupal 7 视图分组功能或其他方法来生成我正在寻找的输出?我很想知道诀窍!否则,我将不得不使用自定义菜单项,而失去使用 Views 获得的所有优势(例如自动缓存和能够在 Views UI 中工作)。

【问题讨论】:

    标签: drupal rss drupal-7 drupal-views mediarss


    【解决方案1】:

    创建“文件”视图,然后在视图 UI 右侧的高级折叠字段集下,创建节点与文件的关系(连接)。

    这是一个快速视图,您可以在此处复制并导入您的视图 ui:

    <?php
        $view = new view;
        $view->name = 'test';
        $view->description = '';
        $view->tag = 'default';
        $view->base_table = 'file_managed';
        $view->human_name = 'test';
        $view->core = 7;
        $view->api_version = '3.0';
        $view->disabled = FALSE; /* Edit this to true to make a default view disabled initially */
    
        /* Display: Master */
        $handler = $view->new_display('default', 'Master', 'default');
        $handler->display->display_options['title'] = 'test';
        $handler->display->display_options['access']['type'] = 'perm';
        $handler->display->display_options['cache']['type'] = 'none';
        $handler->display->display_options['query']['type'] = 'views_query';
        $handler->display->display_options['query']['options']['query_comment'] = FALSE;
        $handler->display->display_options['exposed_form']['type'] = 'basic';
        $handler->display->display_options['pager']['type'] = 'full';
        $handler->display->display_options['pager']['options']['items_per_page'] = '10';
        $handler->display->display_options['style_plugin'] = 'default';
        $handler->display->display_options['row_plugin'] = 'fields';
        /* Relationship: File Usage: Content */
        $handler->display->display_options['relationships']['file_to_node']['id'] = 'file_to_node';
        $handler->display->display_options['relationships']['file_to_node']['table'] = 'file_usage';
        $handler->display->display_options['relationships']['file_to_node']['field'] = 'file_to_node';
        $handler->display->display_options['relationships']['file_to_node']['required'] = 0;
        /* Field: File: Name */
        $handler->display->display_options['fields']['filename']['id'] = 'filename';
        $handler->display->display_options['fields']['filename']['table'] = 'file_managed';
        $handler->display->display_options['fields']['filename']['field'] = 'filename';
        $handler->display->display_options['fields']['filename']['label'] = '';
        $handler->display->display_options['fields']['filename']['alter']['alter_text'] = 0;
        $handler->display->display_options['fields']['filename']['alter']['make_link'] = 0;
        $handler->display->display_options['fields']['filename']['alter']['absolute'] = 0;
        $handler->display->display_options['fields']['filename']['alter']['word_boundary'] = 0;
        $handler->display->display_options['fields']['filename']['alter']['ellipsis'] = 0;
        $handler->display->display_options['fields']['filename']['alter']['strip_tags'] = 0;
        $handler->display->display_options['fields']['filename']['alter']['trim'] = 0;
        $handler->display->display_options['fields']['filename']['alter']['html'] = 0;
        $handler->display->display_options['fields']['filename']['hide_empty'] = 0;
        $handler->display->display_options['fields']['filename']['empty_zero'] = 0;
        $handler->display->display_options['fields']['filename']['link_to_file'] = 1;
        /* Field: Content: Body */
        $handler->display->display_options['fields']['body']['id'] = 'body';
        $handler->display->display_options['fields']['body']['table'] = 'field_data_body';
        $handler->display->display_options['fields']['body']['field'] = 'body';
        $handler->display->display_options['fields']['body']['relationship'] = 'file_to_node';
        /* Field: Content: Date */
        $handler->display->display_options['fields']['field_date']['id'] = 'field_date';
        $handler->display->display_options['fields']['field_date']['table'] = 'field_data_field_date';
        $handler->display->display_options['fields']['field_date']['field'] = 'field_date';
        $handler->display->display_options['fields']['field_date']['relationship'] = 'file_to_node';
        $handler->display->display_options['fields']['field_date']['alter']['alter_text'] = 0;
        $handler->display->display_options['fields']['field_date']['alter']['make_link'] = 0;
        $handler->display->display_options['fields']['field_date']['alter']['absolute'] = 0;
        $handler->display->display_options['fields']['field_date']['alter']['external'] = 0;
        $handler->display->display_options['fields']['field_date']['alter']['replace_spaces'] = 0;
        $handler->display->display_options['fields']['field_date']['alter']['trim_whitespace'] = 0;
        $handler->display->display_options['fields']['field_date']['alter']['nl2br'] = 0;
        $handler->display->display_options['fields']['field_date']['alter']['word_boundary'] = 1;
        $handler->display->display_options['fields']['field_date']['alter']['ellipsis'] = 1;
        $handler->display->display_options['fields']['field_date']['alter']['strip_tags'] = 0;
        $handler->display->display_options['fields']['field_date']['alter']['trim'] = 0;
        $handler->display->display_options['fields']['field_date']['alter']['html'] = 0;
        $handler->display->display_options['fields']['field_date']['element_label_colon'] = 1;
        $handler->display->display_options['fields']['field_date']['element_default_classes'] = 1;
        $handler->display->display_options['fields']['field_date']['hide_empty'] = 0;
        $handler->display->display_options['fields']['field_date']['empty_zero'] = 0;
        $handler->display->display_options['fields']['field_date']['hide_alter_empty'] = 1;
        $handler->display->display_options['fields']['field_date']['settings'] = array(
          'format_type' => 'long',
          'fromto' => 'both',
          'multiple_number' => '',
          'multiple_from' => '',
          'multiple_to' => '',
          'show_repeat_rule' => 'show',
        );
        $handler->display->display_options['fields']['field_date']['group_rows'] = 1;
        $handler->display->display_options['fields']['field_date']['delta_offset'] = '0';
        $handler->display->display_options['fields']['field_date']['delta_reversed'] = 0;
        $handler->display->display_options['fields']['field_date']['delta_first_last'] = 0;
        $handler->display->display_options['fields']['field_date']['field_api_classes'] = 0;
        /* Field: Content: Link */
        $handler->display->display_options['fields']['view_node']['id'] = 'view_node';
        $handler->display->display_options['fields']['view_node']['table'] = 'views_entity_node';
        $handler->display->display_options['fields']['view_node']['field'] = 'view_node';
        /* Field: Content: Title */
        $handler->display->display_options['fields']['title']['id'] = 'title';
        $handler->display->display_options['fields']['title']['table'] = 'node';
        $handler->display->display_options['fields']['title']['field'] = 'title';
        /* Sort criterion: File: Upload date */
        $handler->display->display_options['sorts']['timestamp']['id'] = 'timestamp';
        $handler->display->display_options['sorts']['timestamp']['table'] = 'file_managed';
        $handler->display->display_options['sorts']['timestamp']['field'] = 'timestamp';
        $handler->display->display_options['sorts']['timestamp']['order'] = 'DESC';
    
        /* Display: Page */
        $handler = $view->new_display('page', 'Page', 'page');
        $handler->display->display_options['path'] = 'test';
    
    ?>
    

    至于围绕整个 RSS 打印输出的正确标记,您可以操作视图模板。要修改每条记录,请使用 views-view-fields--test.tpl.php(例如)。对于整个视图的包装,使用views-view--test.tpl.php(例如)。可用的模板位于视图 UI 上第三栏(折叠的栏)底部的“主题”链接下。只需将视图模板文件拖放到主题文件夹中,然后全部抄送即可。

    【讨论】:

    • 谢谢你,这让我走上了正轨。周末我开始编写基于views_rss 实现“MRSS - Fields”的views_mrss 模块,这样我就不必使用任何视图模板了。一旦达到标准,我会发布它。
    • 虽然 File 视图在某些情况下是正确的,并且几乎可以解决我提出的问题,但它实际上在一个重要方面失败了:尽管您可以添加“文件的内容” ” 关系来获取与文件关联的内容,然后您不能使用“内容:音频”或(在我的实际情况下为“内容:视频”)字段,因为它返回 all 音频/Video 与内容关联的值。不幸的是,“文件:fid”元素过于笼统,无法导出视频的缩略图。但是带有 Fields 显示的 Content 视图提供了我可以利用的完整媒体元素。
    • 如果您想根据联接的内容类型进行过滤:如果视图过滤器“内容:类型”在视图 UI 中不可用,请查看 hook_views_query_alter() 并查看如果您可以更改 mysql 查询的连接部分。这在 mysql 语句中变得相当先进。有人插话吗? ——乔
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-04
    • 1970-01-01
    • 2023-03-20
    相关资源
    最近更新 更多