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



Возможно, вы захотите подумать о переходе на одно из новых решений, основанных на FeedAPI.
Как вы можете видеть, начиная с этого момента, именно здесь происходит агрегация.
Я давно отказался от агрегатора, но я бы посоветовал вам покопаться в источнике, чтобы увидеть, в чем проблема. Код большинства основных модулей довольно хорошо документирован, и это самый простой способ увидеть, как модуль на самом деле работает.
Я предполагаю, что он либо использует жестко запрограммированную строку тегов, чтобы разрешить, либо совмещает входной формат 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 без фильтрации вообще представляет угрозу безопасности?
Это определенно так. Но вы можете выбрать, какие теги разрешить.
Это то, что я хочу сделать, если на мой вопрос нет решения