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