在smarty上呈现最新的wordpress帖子

时间:2013-10-30 16:55:52

标签: php wordpress simplexml smarty feed

我想在一个使用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

上出错的数组

0 个答案:

没有答案