2013-03-13 59 views
-1

我目前正在設計一個頁面,有20個框,其中每個框代表一個RSS源,使用simplepie作爲我的分析器。(PHP)預定義的字符串運行通過一個功能

當前腳本調用每個提要的第一個圖像,丟棄其餘的並將該圖像設置爲該框的背景圖像。

對於20個提要,我希望儘可能保持代碼的小巧和高效。雖然我理解$ feed01的單獨設置,但$ feed02是一個必要的凌亂的惡魔,這是simplepie工作所必需的。

我不明白的是爲什麼imageurl()返回一個空值。

任何人都可以教我爲什麼這可能是?

非常感謝

<?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> 

回答

1

$success沒有內部imageurl()定義,所以它永遠是空/假

你可能想:

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

但不要用像這樣的全局變量。將$ success作爲參數傳入。它會更清潔。

+0

啊,雖然這將是一個相當簡單的決議。感謝你對此的新看法。 – BarclayMontana 2013-03-13 19:09:30

0

這是評論和答案之間的一部分,但我希望空間顯示代碼。你的函數使用PHP語法的一個非常尷尬的組合和一些完全是誤導性的符號:

  • if(): ... endif;foreach(): ... endforeach;語法是非常老式的,並且在中間使用PHP時,作爲模板語言(即通常只使用HTML)而不是像這樣的獨立函數
  • {,},並且縮進既不涉及if也不涉及foreach; 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

+0

超級有用,非常感謝你解釋,我通常可以理解其他語言的半理解,但我只是PHP一個不合邏輯的混亂。再次,非常感謝! – BarclayMontana 2013-03-13 23:10:59

相關問題