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)。どうすれば機能させることができますか?
_if (empty($link)!== 0) {
$link = $default_link;
}
_
その状態は意味がありません。 empty()が0を返すことはなく、TRUEまたはFALSEを返します。 if (empty($link)) {
を使用するだけです。
また、Aggregator、またはFeedsモジュールを使用することもできます。