web-dev-qa-db-ja.com

RSSフィードの取得コードの何が問題になっていますか?

hook_block()コードは次のとおりです。

   // …      
   case 'view':
      $url = 'http://example.com/feed'; //the site's rss url
      $blocks['subject'] = t('on the bookshelf');
      $blocks['content'] = _mymodule_fetch_feed($url);
      return $blocks;
   // …

function _mymodule_fetch_feed($url,$num_itmes=3){
  $http_result = drupal_http_request($url);

  if ($http_result->code == 200) {
      $doc = simplexml_load_string($http_result->data);
      if ($doc === FALSE) {
        $msg = "error parsing booksheld xml for %url: %msg.";
        $vars = array('%url'=>$url,'%msg'=>$e->getMessage());
        watchdog('goodreads', $msg, $vars, WATCHDOG_WARNING);
        return t("Getting the bookshelf resulted in an error.");
      }

      return _mymodule_block_content($doc, $num_items);
    }
    else {
      $msg = 'No content from %url.';
      $vars = array('%url' => $url);
      watchdog('goodreads', $msg, $vars, WATCHDOG_WARNING);

      return t("The bookshelf is not accessible.");           
    }
  }
}

function _mymodule_block_content($doc, $num_items = 3) {
  $items = $doc->channel->item;
  $count_items = count($items);
  $len = ($count_items < $num_items) ? $count_items : $num_items;
  $template = '<div class="goodreads-item">'.'<img src="%s"/><br/>%s<br/>by%s</div>'; // Default image: 'no cover'.
  $default_img = 'http://www.example.com/images/nocover-60x80.jpg';
  $default_link = 'http://example.com/feed';
  $out = '';
  foreach ($items as $item) {  
    $author = check_plain($item->author_name);
    $title = strip_tags($item->title);
    $link = check_url(trim($item->link));
    $img = check_url(trim($item->book_image_url));

    if (empty($author)) {
      $author = '';
    }

    if (empty($title)) {
      $title = '';
    }
    if (empty($link)!== 0) { 
      $link = $default_link;
    }
    if (empty($img)) {
      $img = $default_img;
    }

    $book_link = l($title, $link);
    $out .= sprintf($template, $img, $book_link, $author);
  }

  $out .= '<br/><div class="goodreads-more">'. l('Goodreads.com', http://example.com').'</div>';
  return $out;
}

このコードをモジュールに挿入しました。データを取得できますが、リンクはすべて同じです(http://example.com)。どうすれば機能させることができますか?

2
enjoylife
_if (empty($link)!== 0) { 
  $link = $default_link;
}
_

その状態は意味がありません。 empty()が0を返すことはなく、TRUEまたはFALSEを返します。 if (empty($link)) {を使用するだけです。

また、Aggregator、またはFeedsモジュールを使用することもできます。

1
Berdir