Проблема с /rss.xml

Главные вкладки

Аватар пользователя GogA GogA 8 сентября 2008 в 10:38

Возникла проблема, в определённый момент, друпал 6.2 стал выдавать неверный фид для моего блога: http://gogolev.net/rss.xml

Ломаю голову что могло случиться, так как я почти ничего не менял, ни в настройка друпала, ни в настройках хостинга.

Буду рад любым комментариям и идеям, которые помогут решить проблему.

Бонус: если кто-то поставит точный диагноз, скину 10 wmz на пиво/кефир/сок.

Сейчас всё бэкапю, хочу до 6.4 проапдейтиться.

Комментарии

Аватар пользователя direqtor direqtor 8 сентября 2008 в 13:29

Должно быть вот так:

Код составляет функция node_feed()

Строчки

  $output .= "<rss version=\"". $channel["version"]
    ."\" xml:base=\"". $base_url ."\" "
    . drupal_attributes($namespaces) .">\n";
  $output .= format_rss_channel($channel['title'], $channel['link'],
                                $channel['description'], $items,
                                $channel['language']);
  $output .= "</rss>\n";

Аттрибуты rss-канала получаются из переменной $namespaces

$namespaces = array('xmlns:dc' => 'http://purl.org/dc/elements/1.1/');

И далее:

    // Allow modules to add additional item fields and/or modify $item
    $extra = node_invoke_nodeapi($item, 'rss item');
    $extra = array_merge($extra,
      array(array('key' => 'pubDate', 'value' => gmdate('r', $item->created)),
      array('key' => 'dc:creator', 'value' => $item->name),
      array('key' => 'guid', 'value' => $item->nid .' at '. $base_url,
     'attributes' => array('isPermaLink' => 'false'))));
    foreach ($extra as $element) {
      if (isset($element['namespace'])) {
        $namespaces = array_merge($namespaces, $element['namespace']);
      }

Вот здесь к rss добавляются поля CCK. Какой-то модуль (CCK) у тебя сует неправильные аттрибуты. Ничего не ставил в последнее время?

Аватар пользователя GogA GogA 8 сентября 2008 в 14:05

Причина найдена. Пара модулей, которые я тестил, когда хотел прикрутить подкасты

  • Embedded Audio Field
  • Embedded Media Field

Проапдетился до 6.4, не помогло, удалили эти модули - всё заработало.

eagle спасибо за помощь, тоже голову ломал, просто на других сайтах дру6 такого тега не было, не мог понять от куда он берётся.

Аватар пользователя GogA GogA 8 сентября 2008 в 14:07

direqtor, да, вы абсолютно правы!

Жаль что только сейчас увидел Ваш комментарий. Для честности - скиньте WMZ кошелёк в личку Smile

Аватар пользователя direqtor direqtor 9 сентября 2008 в 5:42

Ну, если так:
Яндекс.Деньги: 41001152760065
Перевести можно через roboxchange.com

Чего-то я личных сообщений найти не могу на этом сайте?

Аватар пользователя direqtor direqtor 9 сентября 2008 в 6:00

У меня вроде хобби копаться в чужом коде. В друпале это приятнее всего (от джумлы у меня волосы дыбом стояли).

Посмотрел модуль emfield.
Файл emfield.rss.inc(строка 123):

  1.  $rss[] = array('namespace' => array('xmlns:media="http://search.yahoo.com/mrss/"'));

В результате получается:

array(
  namespace = Array (
    0 = xmlns:media="http://search.yahoo.com/mrss/"
  )
)

А функция drupal_attributes(), по всей видимости ожидает:

array(
  namespace = Array (
    xmlns:media = http://search.yahoo.com/mrss/
  )
)

Поменяй этот код на:

  1.  $rss[] = array('namespace' => array('xmlns:media' => 'http://search.yahoo.com/mrss/'));

И все будет работать.
Баг уже словили (http://drupal.org/node/273649) и пофиксили в dev версии.