WN

WN (https://www.wn.se/forum/index.php)
-   Serversidans teknologier (https://www.wn.se/forum/forumdisplay.php?f=4)
-   -   merge feeds med ID åt varje feed... (https://www.wn.se/forum/showthread.php?t=29884)

Drew 2008-06-13 20:34

Har för mig jag testade. Ska testa igen.

Drew 2008-06-13 21:48

Ojsan. Här är hela skriptet. Jag har bytt ut
Kod:

$rss->items = array_merge($rss->items, array('class' => $class));
till
Kod:

$class_arr = array('class' => $class);
 foreach($rss->items as $key => $value)
 {
        $rss->items[$key] = array_merge($rss->items[$key], $class_arr);
 }

$rss innehåller flera arrays och värdet måste sättas för varje. Det är inte snyggt, men det fungerar (den här gången har jag testat).

Kod:

<?php

define('MAX_ITEMS', 25);

require_once('rss_fetch.inc');

$urls = array(
  'nyheter' => 'http://www.mortfiles.se/kundcenter/announcements.xml',
'blog' => 'http://www.mortfiles.se/blog/feed',
'forum' => 'http://www.mortfiles.se/diskussion/index.php?act=rssout&id=5',
'lankar' => 'http://www.mortfiles.se/lankar/rss.php?c=3&s=P&p=1',
'itnyheter' => 'http://www.mortfiles.se/nyheter/rss'
);


$items = array();

// loop thru all urls & merge feeds into master array
foreach ( $urls as $class => $url ) {
 $rss = fetch_rss($url);
 if (!$rss) continue;
 $class_arr = array('class' => $class);
 foreach($rss->items as $key => $value)
 {
        $rss->items[$key] = array_merge($rss->items[$key], $class_arr);
 }
 $items = array_merge($items, $rss->items);
}

// sort all items in array by date
usort($items, 'date_cmp');

// generate ouput array
$out = array();

foreach ($items as $item) {
 $href  = $item['link'];
 $title  = $item['title'];
$class = $item['class'];
 $out[] = '<li class="' . $class . '"><a href="'.$href.'" title="'.$title.'">'.$title.'</a></li>';
}

if (count($out) > MAX_ITEMS)
 $out = array_slice($out,0,MAX_ITEMS);

echo ($out)
 ? "<ul>\n".join("\n",$out)."\n</ul>"
 : '';


// sorts feed array based on published date (used with usort)
// -------------------------------------------------------------
 function date_cmp($a, $b)
 {
  $atime = (empty($a['date_timestamp']))
    ? strtotime($a['dc']['date'])
    : $a['date_timestamp'];

  $btime = (empty($b['date_timestamp']))
    ? strtotime($b['dc']['date'])
    : $b['date_timestamp'];

  if ($atime == $btime)
    return 0;
 
  return ($atime > $btime) ? -1 : 1;
 }

?>


Mortekai 2008-06-13 22:13

Perfekt Drew, det fungerar precis som jag vill ha det :)

Nu till nästa del...hur får jag in pubDate i samma kod....

Drew 2008-06-13 23:37

Kod:

foreach ($items as $item) {
$href  = $item['link'];
$title  = $item['title'];
$class = $item['class'];
$pubdate = $item['pubdate'];
$out[] = '<li class="' . $class . '"><a href="'.$href.'" title="'.$title.'">'.$pubdate.' '.$title.'</a></li>';
}

Om du vill ha datumformatet Wed, 21 May 2008 09:16:14 +0000
Vill du ha 2008-05-21 09:16:14 så får du ändra
Kod:

$pubdate = $item['pubdate'];
till
Kod:

$pubdate = date('Y-m-d H:i:s', $item['date_timestamp']);
Men då bör du också sätta
Kod:

date_default_timezone_set('Europe/Stockholm');
i början av filen.

Mortekai 2008-06-13 23:53

2 bifogad(e) fil(er)
Perfekt :)
Nu ska jag bara styla till detta så det ser ut någonting sånt här....


Alla tider är GMT +2. Klockan är nu 04:22.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson