Друпал выдает инвалидный фид [РЕШЕНО]

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

Комментарии

Аватар пользователя Zonder Zonder 8 октября 2008 в 12:46

penexe wrote:
"Coxus" wrote:
Кто-нибудь знает как побороть сие недоразумения?

оно вам надо?

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

Аватар пользователя Zonder Zonder 8 октября 2008 в 13:00

На всякий случай дублирую код ошибки, а то валидатор иногда лежит.

line 15, column 1: Undefined item element: group (26 occurrences) [help]
 <group domain="http://www.mysenses.ru/philosofy">Философия</group>
  ^

Этот item вставляется из модуля Organic Groups. Как его вырубить нахрен, чтобы не мешался? Или исправить чтобы валидный код давал?

Аватар пользователя Zonder Zonder 8 октября 2008 в 14:19

Я не очень дружу с php, но интуиция мне подсказывает, что некорректный key можно заменить или вырезать нафиг, используя следующй код:

<?php
function format_xml_elements($array) {
  foreach ($array as $key => $value) {
    if (is_numeric($key)) {
      if ($value['key']) {
        $output .= ' <'. $value['key'];
        if (isset($value['attributes']) && is_array($value['attributes'])) {
          $output .= drupal_attributes($value['attributes']);
        }

        if ($value['value'] != '') {
          $output .= '>'. (is_array($value['value']) ? format_xml_elements($value['value']) : check_plain($value['value'])) .'</'. $value['key'] .">\n";
        }
        else {
          $output .= " />\n";
        }
      }
    }
    else {
      $output .= ' <'. $key .'>'. (is_array($value) ? format_xml_elements($value) : check_plain($value)) ."</$key>\n";
    }
  }
  return $output;
}
?>

Подмажите пратцы, как это сделать?

Аватар пользователя Zonder Zonder 9 октября 2008 в 15:19

Проблема устраняется двумя способами:

1. Меняем в файле og.module строчку 1460 на следующую

    case 'rss item':
      if ($node->og_groups) {
        foreach ($node->og_groups_both as $gid => $title) {
          $append['og_links'] = array('title' => $title, 'href' => "node/$gid");
          $ret[] = array(
            'key'   => 'group',
            'value' => check_plain($title),
            'attributes' => array(
              'domain' => url("node/$gid", NULL, NULL, TRUE),
              'xmlns' => 'http://drupal.org/project/og',
            )
          );
        }

Этот вариант валидный, однако указанный неймспейс большинству ридеров не известен, и валидатор все равно дает рекомендации на этот счет. Посему можно сделать проще:

2. Меняем в файле og.module строчку 1460 на следующую (обратите внимание на значение 'key')

    case 'rss item':
      if ($node->og_groups) {
        foreach ($node->og_groups_both as $gid => $title) {
          // TODO: should be absolute link. core bug.
          $append['og_links'] = array('title' => $title, 'href' => "node/$gid");
          $ret[] = array(
            'key'   => 'category',
            'value' => check_plain($title),
            'attributes' => array(
              'domain' => url("node/$gid", NULL, NULL, TRUE),
            )
          );
        }

Код во втором случае полностью валидный для rss-ридеров.