-1

私は現在、simplepie をパーサーとして使用して、各ボックスが RSS フィードを表す 20 個のボックスを持つページを設計しています。

現在、スクリプトは各フィードから最初の画像を呼び出し、残りを破棄して、その画像をボックスの背景画像として設定します。

20 個のフィードがあるので、コードをできるだけ小さく効率的に保ちたいと考えています。$feed01 の別の設定は理解していますが、$feed02 は必要な厄介な悪であり、simplepie が機能するために必要です。

理解できないのは、imageurl() が null 値を返す理由です。

なぜこれができるのか、誰でも教えてもらえますか?

どうもありがとう

<?php
require_once('isnotabear/php/autoloader.php');

$feed01 = new SimplePie();
$feed01 -> set_feed_url ('http://link/to/rss01');
$success = $feed01 -> init();
$feed01 -> handle_content_type();
$max = $feed01 -> get_item_quantity(); // Where do we end?

$feed02 = new SimplePie();
$feed02 -> set_feed_url ('http://link/to/rss02');
$success = $feed02 -> init();
$feed02 -> handle_content_type();
$max = $feed02 -> get_item_quantity(); // Where do we end?

$start = (isset($_GET['start']) && !empty($_GET['start'])) ? $_GET['start'] : 0; // Where do we start?
$length = (isset($_GET['length']) && !empty($_GET['length'])) ? $_GET['length'] : 1; // How many per page?


function imageurl()
{
    if ($success): foreach($feedin->get_items($start, $length) as $item): $feedin =     $item-> get_feed();
    {
        $replace = preg_match( '@src="([^"]+)"@' , $item->get_content(), $match );
        $match = preg_replace ('"src="', '', $match);
        $match = str_replace('"', "'", $match);
        echo $match[0];
    }
    endforeach;
    endif;
};

?>
<!DOCTYPE HTML>
... YADA YADA YADA ...

<a href="#" style="background-image:url(<?php $feedin = $feed01; imageurl(); ?>)"><div> <span>FEED NAME</span></div></a>
4

2 に答える 2

1

$successimageurl()で定義されていないため、常に null/false になります

あなたはおそらく欲しい:

function imageurl() {
   global $success;
   if ($success) { .... }
}

しかし、そのようなグローバルを使用しないでください。パラメータとして $success を渡します。ずっときれいになります。

于 2013-03-13T18:38:45.333 に答える
0

これはコメントと回答の中間ですが、スペースにコードを表示したかったのです。あなたの関数は、PHP 構文と完全に誤解を招く句読点の非常にぎこちない組み合わせを使用しています。

  • if(): ... endif;and構文は非常にforeach(): ... endforeach;古風で、通常、このようなスタンドアロン関数ではなく、PHP をテンプレート言語 (つまり、HTML の途中) として使用する場合にのみ使用されます。
  • {}およびインデントは、 にも関係しませifforeach。PHP はそれらを無視しますが、コードを読む人を混乱させるでしょう。
  • 最後の;も無視されます-関数はそので終了します}

したがって、コードは実際には次のようになります (関数に渡す必要があるパラメーターとして$successおよびも追加したことに注意してください)。$feedin

function imageurl($success, $feedin)
{
    if ($success)
    {
        foreach($feedin->get_items($start, $length) as $item)
        {
            $feedin = $item->get_feed();
            $replace = preg_match( '@src="([^"]+)"@' , $item->get_content(), $match );
            $match = preg_replace ('"src="', '', $match);
            $match = str_replace('"', "'", $match);
            echo $match[0];
        }
    }
}

ああ、あなたはおそらくそれreturn $match[0]よりもむしろしたいでしょうecho。それ以外の場合は、null渡したものは何でも返されます。

于 2013-03-13T19:15:03.577 に答える