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

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

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

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

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

Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Symfony Station Communiqué - 17 февраля 2023 г
Symfony Station Communiqué - 17 февраля 2023 г
Это коммюнике первоначально появилось на Symfony Station , вашем источнике передовых новостей Symfony, PHP и кибербезопасности.
Разработка Drupal и AngularJS: Идеальное сочетание для вашей веб-стратегии
Разработка Drupal и AngularJS: Идеальное сочетание для вашей веб-стратегии
Один опытный веб-разработчик назвал комбинацию Drupal и AngularJS "сочетанием, созданным на небесах". Почему так? Потому что вместе они могут создать...
1
0
1 104
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Ответ принят как подходящий

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

http://drupal.org/node/326601

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

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

Khaled Al Hourani 22.12.2008 20:53

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

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

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

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

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

Коротко и просто. Взгляните на функцию 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.

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

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

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;
}

Надеюсь, это поможет.

но считаете ли вы, что передача html без фильтрации вообще представляет угрозу безопасности?

Khaled Al Hourani 10.09.2010 01:34

Это определенно так. Но вы можете выбрать, какие теги разрешить.

Daniel Canet 29.12.2010 14:58

Другие вопросы по теме