我想在一个使用smarty的网页上显示一些最新帖子。我发现了一些脚本并将其更改为某些地方,但我没有将其工作。
在模板文件中,我插入了下一个代码:
{sr_wpfeed var="someposts" wpsite="http://www.digins.nl/blog" num=3}
{foreach from=$someposts item=somepost}
<h2><a href="{$somepost.link}">
{$somepost.title}
</a>
</h2>
{$somepost.description}
<br>
{/foreach}
所以我在我的php文件中调用函数sr_wpfeed:
function smarty_function_sr_wpfeed($params, &$smarty) {
$required_params = array('var','wpsite', 'num');
foreach($required_params as $_key => $reqd_param) {
if (!isset($params[$reqd_param]))
$smarty->trigger_error("sr_wpfeed: required attribute '$reqd_param' not passed", E_USER_ERROR);
}
$var = '';
$wpsite = '';
$num = 0;
foreach($params as $_key => $_val) {
switch($_key) {
case 'wpsite':
case 'var':
if (!is_array($_val)) {
$$_key = $_val;
} else
$smarty->trigger_error("sr_wpfeed: '$_key' cannot be an array", E_USER_ERROR);
break;
case 'num':
if (!is_array($_val)) {
$$_key = (int)$_val;
if ($$_key < 0 || $$_key >25)
$smarty->trigger_error("sr_wpfeed: '$_key' not between 1 and 25", E_USER_ERROR);
} else
$smarty->trigger_error("sr_wpfeed: '$_key' cannot be an array", E_USER_ERROR);
break;
default:
$smarty->trigger_error("sr_wpfeed: attribute '$_key' not recognized", E_USER_NOTICE);
break;
}
}
//if(!$xml=simplexml_load_file($wpsite.'/feed') ){
// $smarty->trigger_error('Error reading XML file',E_USER_ERROR);}
$xml=simplexml_load_file($wpsite.'/feed');
$posts = array();
foreach($xml as $item){
for($i=0; $i<count($item->item); $i++){
if($i<$num){
$posts[] = array('link' => (string)$item->item[$i]->link
, 'title' => htmlentities($item->item[$i]->title,ENT_COMPAT, 'UTF-8')
, 'description' => $item->item[$i]->description
);
}
}
}
$smarty->assign($var, $posts);
}
我认为xml文件出了问题。它似乎工作正常,直到simplexml_load_file函数。有什么想法吗?
第二个问题是trigger_error;它挂起了我的网站。
更新: 下面的错误日志:
警告:simplexml_load_file()[function.simplexml-load-file]:在/home/vhosts/digins.nl/httpdocs/assets/includes/footer中,allow_url_fopen = 0在服务器配置中禁用了http://包装器第44行的.inc.php
警告:simplexml_load_file(http://www.digins.nl/blog/feed)[function.simplexml-load-file]:无法打开流:在/home/vhosts/digins.nl/httpdocs/assets/includes/中找不到合适的包装器第44行的footer.inc.php
警告:simplexml_load_file()[function.simplexml-load-file]:I / O警告:无法在/home/vhosts/digins.nl/httpdocs/assets/includes中加载外部实体“http://www.digins.nl/blog/feed”第44行的/footer.inc.php
警告:第47行的/home/vhosts/digins.nl/httpdocs/assets/includes/footer.inc.php中为foreach()提供的参数无效
彼得
UPDATE2
我将simplexml_load_file更改为使用curl:
$wpsite = $wpsite.'/feed';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $wpsite);
curl_setopt($ch, CURLOPT_FAILONERROR, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 15);
$returned = curl_exec($ch);
curl_close($ch);
// $xml === False on failure
$xml = simplexml_load_string($returned);
在第一次看起来不行,因为我的测试wordpress只有一个帖子。在这种情况下,$ xml不是一个在foreach
上出错的数组