2013-03-13 57 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

相关问题