Формат ввода Drupal Aggregator
Модуль ядра Drupal Aggregator полезен, но страдает многими проблемами. Многие говорят об улучшении этого в Drupal 7.
Прямо сейчас я использую модуль Aggregator, который поставляется с Drupal 6. Я создаю сайт агрегации, и есть одна большая проблема. Иногда каналы содержат атрибуты тегов HTML (например, style, dir, title), но фильтр входного формата Aggregator игнорирует НЕКОТОРЫЕ атрибуты (например, style и dir) и допускает другие (class и href). Без каких-либо атрибутов каналы выглядят очень запутанно. Агрегатор содержит свой собственный формат ввода, он не использует другие форматы ввода (и это усложняет задачу!).
Вопрос в том, как разрешить отображение атрибутов некоторых тегов HTML в каналах.
PS Последнее, что нужно сделать, это изменить основные файлы Aggregator.
4 ответа
Возможно, вы захотите перейти на одно из новых решений, построенных на основе FeedAPI.
Как вы можете видеть, начиная с этого момента, здесь происходит действие по агрегации.
Перейти к FeedAPI. Единственный недостаток - отсутствие непосредственных блоков для разных каналов. Однако их можно настроить с помощью нодблока и встраивания представления в узел канала элементов канала, что также позволяет использовать представления и преобразователь feedapi, чтобы определить, какая информация отображается в каждом канале.
Агрегатор - просто плохой модуль для любой тяжелой работы с кормами. Он не предлагает никакой гибкости и не очень хорошо работает с Views. Если вы серьезно относитесь к созданию всего сайта для агрегации, переключитесь на 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;
}
Надеюсь, это полезно.
Я давно отказался от Aggregator, но я бы посоветовал вам покопаться в источнике, чтобы увидеть, в чем проблема. Код большинства основных модулей довольно хорошо документирован, и это самый простой способ увидеть, как работает модуль на самом деле.
Я предполагаю, что он либо использует жестко запрограммированную строку тегов, либо разрешает использовать входной формат Filtered HTML.