Не работает RSS

Статус
В этой теме нельзя размещать новые ответы.

rokkis

Постоялец
Регистрация
13 Ноя 2006
Сообщения
85
Реакции
2
Не работает RSS на новости....
не записывает файл xml.. Записывает тока описание ленты, а сами заголовки не пишет падло...
все разрешения на запись файла стоят.
Что может быть?
 
Проблему решил. Полностью переписал код вывода rss :D
 

Функция вывода rss целиком бабахнуть в class.News.php

PHP:
// формировать ленту RSS
    function form_rss() {
        global $CONFIG, $db, $tpl, $baseurl, $server, $lang;
        $ND = new CNewsData_DB($this->table_prefix.'_news', 'id');
        if ('' == $order_by) $order_by = $CONFIG['news_order_by'];
        $rows        = (int)$rows;
        $start_row    = ($start - 1) * $rows;
        $category    = (int)$category;
        $ctg_str    = ($category) ? 'category_id = '.$category.' AND' : '';
        $temp        = $ND->ListBy("", "date DESC", 0, -1);

        $sql = "SELECT p.address FROM " . $this->table_prefix . "_pages_blocks pb INNER JOIN " . $this->table_prefix . "_pages p ON (p.id = pb.page_id) WHERE pb.action IN ('archive', 'alist', 'tlist', 'alist_archive', 'tlist_archive') AND pb.field_number = 0 LIMIT 1";
        $db->query($sql);
        if (!$db->nf()) {
            $istrans = 0;
        } else {
            $istrans = 1;
        }
        while ($db->next_record()) {
            $link = $db->f("address");
        }

        if (!file_exists(RP."rss") || !is_dir(RP."rss")) {
            mkdir(RP."rss");
        }
        $rss_filename = RP."rss/".$server.$lang.".xml";
        if ($f = fopen($rss_filename, "w")) {

            fwrite($f, '<?xml version="1.0" encoding="windows-1251"?>
');
            fwrite($f, '<!DOCTYPE rss [<!ENTITY % HTMLlat1 PUBLIC "-//W3C//ENTITIES Latin 1 for XHTML//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml-lat1.ent">]>
');
            fwrite($f, '<rss version="2.0" xml:base="'.$CONFIG["web_address"].'">
');
            fwrite($f, '<channel>
');
           
            fwrite($f, '<title>Новости сайта http://'.$CONFIG["sitename"].'</title>
');
            fwrite($f, '<link>'.$CONFIG["web_address"].'</link>
');
            fwrite($f, '<description />
');
            fwrite($f, '<language>'.$lang.'</language>
');

       // выводим поля таблицы pached by Rokkis

             $sql_items = "SELECT  * FROM " . $this->table_prefix . "_news WHERE active = 1 order by date DESC LIMIT 0,20";
             $result = mysql_query($sql_items)
                or die ("Can't execute query.");
             $num = mysql_numrows($result);
             if ($num != 0) {
                while ( $row = mysql_fetch_array($result) ) {
                $ttl = $row["title"]     ;
                $idd = $row["id"]    ;
                $desc = $row["announce"]    ;
                $news_date = $row["date"]    ;
                $status = $row["status"]    ;

               
                    // вывод списка
                    $news_link = "http://".$_SERVER["HTTP_HOST"]."/" . $link . "?action=show&amp;id=".$idd;
                    fwrite($f, '<item>
');
                    fwrite($f, '    <title>'.$ttl.'</title>
');
                    if($istrans == 1) {
                        fwrite($f, '    <link>'.$news_link.'</link>
');
                    }

                    fwrite($f, '    <description>'.nl2br($desc).'</description>
');
                    fwrite($f, '    <pubDate>'.$news_date.'</pubDate>
');
                    fwrite($f, '</item>
');
                     }
                 }

            fwrite($f, '</channel>
');
            fwrite($f, '</rss>
');
            fclose($f);
            return TRUE;
        }
        return FALSE;
    }


Добавлено через 3 минуты
код выводит 20 последних записей новостей.
если надо меньше или больше, например 10 - ставим LIMIT 0,10
или можно прикрутить чтоб ставилось из админки. Мне было влом, воткнул фиксированное значение
 
Функция вывода rss целиком бабахнуть в class.News.php

PHP:
// формировать ленту RSS
    function form_rss() {
        global $CONFIG, $db, $tpl, $baseurl, $server, $lang;
        $ND = new CNewsData_DB($this->table_prefix.'_news', 'id');
        if ('' == $order_by) $order_by = $CONFIG['news_order_by'];
        $rows        = (int)$rows;
        $start_row    = ($start - 1) * $rows;
        $category    = (int)$category;
        $ctg_str    = ($category) ? 'category_id = '.$category.' AND' : '';
        $temp        = $ND->ListBy("", "date DESC", 0, -1);

        $sql = "SELECT p.address FROM " . $this->table_prefix . "_pages_blocks pb INNER JOIN " . $this->table_prefix . "_pages p ON (p.id = pb.page_id) WHERE pb.action IN ('archive', 'alist', 'tlist', 'alist_archive', 'tlist_archive') AND pb.field_number = 0 LIMIT 1";
        $db->query($sql);
        if (!$db->nf()) {
            $istrans = 0;
        } else {
            $istrans = 1;
        }
        while ($db->next_record()) {
            $link = $db->f("address");
        }

        if (!file_exists(RP."rss") || !is_dir(RP."rss")) {
            mkdir(RP."rss");
        }
        $rss_filename = RP."rss/".$server.$lang.".xml";
        if ($f = fopen($rss_filename, "w")) {

            fwrite($f, '<?xml version="1.0" encoding="windows-1251"?>
');
            fwrite($f, '<!DOCTYPE rss [<!ENTITY % HTMLlat1 PUBLIC "-//W3C//ENTITIES Latin 1 for XHTML//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml-lat1.ent">]>
');
            fwrite($f, '<rss version="2.0" xml:base="'.$CONFIG["web_address"].'">
');
            fwrite($f, '<channel>
');
           
            fwrite($f, '<title>Новости сайта http://'.$CONFIG["sitename"].'</title>
');
            fwrite($f, '<link>'.$CONFIG["web_address"].'</link>
');
            fwrite($f, '<description />
');
            fwrite($f, '<language>'.$lang.'</language>
');

       // выводим поля таблицы pached by Rokkis

             $sql_items = "SELECT  * FROM " . $this->table_prefix . "_news WHERE active = 1 order by date DESC LIMIT 0,20";
             $result = mysql_query($sql_items)
                or die ("Can't execute query.");
             $num = mysql_numrows($result);
             if ($num != 0) {
                while ( $row = mysql_fetch_array($result) ) {
                $ttl = $row["title"]     ;
                $idd = $row["id"]    ;
                $desc = $row["announce"]    ;
                $news_date = $row["date"]    ;
                $status = $row["status"]    ;

               
                    // вывод списка
                    $news_link = "http://".$_SERVER["HTTP_HOST"]."/" . $link . "?action=show&amp;id=".$idd;
                    fwrite($f, '<item>
');
                    fwrite($f, '    <title>'.$ttl.'</title>
');
                    if($istrans == 1) {
                        fwrite($f, '    <link>'.$news_link.'</link>
');
                    }

                    fwrite($f, '    <description>'.nl2br($desc).'</description>
');
                    fwrite($f, '    <pubDate>'.$news_date.'</pubDate>
');
                    fwrite($f, '</item>
');
                     }
                 }

            fwrite($f, '</channel>
');
            fwrite($f, '</rss>
');
            fclose($f);
            return TRUE;
        }
        return FALSE;
    }


Добавлено через 3 минуты
код выводит 20 последних записей новостей.
если надо меньше или больше, например 10 - ставим LIMIT 0,10
или можно прикрутить чтоб ставилось из админки. Мне было влом, воткнул фиксированное значение

Мда... Странно... Эффект то остался прежним:
При добавлении новости:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '-1' at line 6
Warning: Cannot modify header information - headers already sent by (output started at z:\home\site.ru\www\inc\db_connect.php:221) in z:\home\site.ru\www\mod\news\AdminNews.php on line 92

Вот, что мы имеем в AdminNews.php:
PHP:
89		if ($CONFIG["news_form_rss"] == "on") {
90				$news->form_rss();
91		}
91              header('Location:      '.$baseurl.'&action=shownews&category='.$request_category);
93              } else {

Вот, что мы имеем в db_connect.php c 219 cтроки:
PHP:
function db_loadList( $sql, $maxrows=NULL ) {
 if (!($cur = db_exec( $sql ))) {;
  echo db_error();
  return false;
 }
 $list = array();
 $cnt = 0;
 while ($hash = db_fetch_assoc( $cur )) {
  $list[] = $hash;
  if( $maxrows && $maxrows == $cnt++ ) {
   break;
  }
 }
 db_free_result( $cur );
 return $list;
}


RSS добавляться, новости добавляться - но выскакивает ошибка при добавление, изменение, изменение статуса новости.

И еще не работает календарь, в других браузерах кроме IE;) Ваще 4ка какая то бажная.
 
MS XML не стоял... все решилось поле установки оного.
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху