Ce este în neregulă cu codul fetch rss feed? (Drupal, 7, Feed-Uri)

enjoylife a intrebat.

The hook_block() este următorul.

   // …      
   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;
}

Am pus acest cod în modulul meu; poate obține datele, dar linkurile sunt toate la fel.(http://example.com). Cum pot să fac să funcționeze?

1 răspunsuri
Berdir
if (empty($link)!== 0) { 
  $link = $default_link;
}

Această condiție nu are sens. empty() nu returnează niciodată 0, el returnează TRUE sau FALSE. Folosiți doar if (empty($link)) {.

De asemenea, probabil că vrei să folosești modulul Aggregator, sau Feeds.

Comentarii

  • Sunt de acord; comparația strictă ar trebui evitată atunci când nu este necesară și când determină ca instrucțiunea de control să nu fie niciodată executată. De asemenea, aș folosi theme('image') pentru a afișa codul HTML pentru o imagine. –  > Por kiamlaluno.

Tags:,