Формат ввода Drupal Aggregator

Основной модуль Drupal Aggregator полезен, но имеет много проблем. Многие говорят об его улучшении в Drupal 7.

Прямо сейчас я использую модуль Aggregator, который поставляется с Drupal 6. Я создаю сайт-агрегатор, и есть одна БОЛЬШАЯ проблема. Иногда фиды содержат атрибуты тегов HTML (например, стиль, каталог, заголовок), но фильтр входного формата агрегатора игнорирует НЕКОТОРЫЕ атрибуты (например, стиль и каталог) и разрешает другие (класс и href). Ленты без некоторых атрибутов выглядят очень скучно. Агрегатор содержит свой формат ввода, он не использует другие форматы ввода (и это усложняет задачу!).

Вопрос в том, как разрешить отображение некоторых атрибутов HTML-тегов в фидах.

P.S. Последнее, что нужно сделать, это изменить основные файлы агрегатора.


person Khaled Al Hourani    schedule 22.12.2008    source источник


Ответы (4)


Возможно, вы захотите перейти на одно из новых решений, созданных на основе FeedAPI.

http://drupal.org/node/326601

Как вы можете видеть, начиная с этого момента, именно здесь и происходит действие с точки зрения агрегации.

person FGM    schedule 22.12.2008
comment
Это то, что я хочу сделать, если нет решения для моего вопроса - person Khaled Al Hourani; 22.12.2008

Перейдите на FeedAPI. Единственным недостатком этого является отсутствие немедленных блокировок для разных каналов. Однако их можно настроить с помощью nodeblock и встраивания представления в узел канала элементов канала, что также позволяет использовать представления и сопоставитель feedapi для определения того, какая информация отображается в каждом канале.

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

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

person msumme    schedule 02.08.2009

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

Я предполагаю, что он либо использует жестко закодированную строку тегов для разрешения, либо использует входной формат Filtered HTML.

person Eli    schedule 23.12.2008

Коротко и просто. Взгляните на функцию aggregator_filter_xss() по адресу http://api.drupal.org/api/function/aggregator_filter_xss.

<?php
function aggregator_filter_xss($value) {
  return filter_xss($value, preg_split('/\s+|<|>/', variable_get('aggregator_allowed_html_tags', '<a> <b> <br> <dd> <dl> <dt> <em> <i> <li> <ol> <p> <strong> <u> <ul>'), -1, PREG_SPLIT_NO_EMPTY));
}
?>

Как видите, есть переменная drupal с именем aggregator_allowed_html_tags.

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

Вот код, который вам понадобится для вашего пользовательского модуля:

function your_module_settings()
{
    $form = array();

    // Params para aggregator
    $form['aggregator_allowed_html_tags'] = array(
        '#type'          => 'textarea',
        '#title'         => t('Core Module Aggregator allowed tags'),
        '#default_value' => variable_get('aggregator_allowed_html_tags', '<a> <b> <br> <dd> <dl> <dt> <em> <i> <li> <ol> <p> <strong> <u> <ul>'),
        '#required'      => TRUE,
        '#description'   => t('Core Module Aggregator allowed tags'),
    );

    return system_settings_form($form);
}

function your_module_menu()
{
    $items = array();

    $items['admin/content/your-module'] = array(
        'title'            => 'My module settings',
        'description'      => 'desc',
        'page callback'    => 'drupal_get_form',
        'page arguments'   => array('your_module_ pasos'),
        'type'             => MENU_NORMAL_ITEM,
    );

    return $items;
}

Я надеюсь, что это полезно.

person Daniel Canet    schedule 06.09.2010
comment
но вы считаете, что передача html без фильтрации вообще представляет угрозу безопасности? - person Khaled Al Hourani; 10.09.2010
comment
Это определенно так. Но вы можете выбрать, какие теги разрешить. - person Daniel Canet; 29.12.2010