0

私はプログラマーではないと言うことから始めたほうがいいです。ショッピングカートを変更していますが、ペイグレードを超えた問題が発生しています。カートを使用すると、RSSフィードの出力をページ上のブロックに表示できます。問題は、フィードのコンテンツの多くがCDATAタグ内にあるため、正しく表示されないことです。フィードからCDATAタグを取り除く必要があります。

フィードを処理するコードは

    function fn_get_rss_feed($data)
    {
if (!empty($data['feed_url'])) {
    $data_key = 'rss_data_cache_' . (isset($data['block_data']['block_id']) ? $data['block_data']['block_id'] : 0);

    if (!empty($data['cache_time'])) {
        Registry::register_cache($data_key, $data['cache_time'], CACHE_LEVEL_TIME);
    }

    if (Registry::is_exist($data_key) == false) {
        $limit = !empty($data['max_item']) ? $data['max_item'] : 3;
        $rss_data = array();

        $rss = simplexml_load_string(fn_get_contents($data['feed_url']));

        if (!empty($rss)) {
            $it = 0;
            $items = array();
            foreach ($rss->channel->item as $item) {
                if ($it > $limit) {
                    break;
                }

                $items[] = array(
                    'title' => (string)$item->title,
        'description' => (string)$item->description,
                    'pubDate' => (string)$item->pubDate,
                    'link' => (string)$item->link
                );

                $it++;
            }

            $rss_data = array(array(
                $items,
                (string)$rss->channel->link,
                $data['feed_url']
            ));

            Registry::set($data_key, $rss_data);
        }

        return $rss_data;
    } else {
        return Registry::get($data_key);
    }
     }

        return array();
       }

CDATAタグが付いているのは「説明」です。ネットを検索すると、文字列からCDATAタグを削除するためのこのコードが見つかりました。

     function strip_cdata($string)
    {    preg_match_all('/<!\[cdata\[(.*?)\]\]>/is', $string, $matches);
    return str_replace($matches[0], $matches[1], $string);
    }

その関数を使用して、説明の周りからcdataタグを削除する方法があると思いますが、そうでない場合もあります。RSSフィードの出力は、.tplファイルを介して表示されます。

ありとあらゆるものがありがたいことに受け取ったのを助けます。

ブルース

4

1 に答える 1

1

行を変更するだけ

 $rss = simplexml_load_string(fn_get_contents($data['feed_url']));

 $rss = simplexml_load_string(fn_get_contents($data['feed_url']), 'SimpleXMLElement', LIBXML_NOCDATA);

動作するはずです。3番目のパラメーターは、simplexml関数が使用する基になるライブラリーにCDATAのコンテンツをテキストノードにマージするように指示します(http://php.net/manual/en/function.simplexml-load-string.phpおよびhttp:/を参照)。 /www.php.net/manual/en/libxml.constants.php)。

于 2012-04-12T08:22:07.103 に答える