FAQ |
Kalender |
![]() |
#1 | |||
|
||||
Mycket flitig postare
|
Vi testar och ser om det finns någon här med lite PHP vana som kan knäcka mitt lilla problem, för här går jag bet
![]() Jag håller på att lägga in en samlad RSS feed genom magpie och allt fungerar fint, men nu vill jag ge varje item en egen klass så jag sedan kan styla varje item beroende på vilken feed den tillhör...där blir det lite svårare ![]() Så här ser koden ut: 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 $url ) { $rss = fetch_rss($url); if (!$rss) continue; $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']; $out[] = '<li><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; } ?> ![]() |
|||
![]() |
![]() |
![]() |
#2 | |||
|
||||
Flitig postare
|
Nu kan inte jag ett skit PHP, men kolla på följande del:
Kod:
foreach ($items as $item) { $href = $item['link']; $title = $item['title']; $out[] = '<li><a href="'.$href.'" title="'.$title.'">'.$title.'</a></li>'; } I foreach-satsen sätter du upp värdet på räknaren med 1 för varje varv. Ändra i $out[] = '[*]...'; till, typ, $out[] = '<li class='itemRÄKNARE'>...'; Sedan fixar du i CSS:en så den har item0, item1, item2 etcetera. |
|||
![]() |
![]() |
![]() |
#3 | ||
|
|||
Medlem
|
Det hela skulle kunna göras mycket enklare. Men lägg till klassen i $items, du kan ju ta nyckeln från $urls.
|
||
![]() |
![]() |
![]() |
#4 | |||
|
||||
Mycket flitig postare
|
Osiris: Om jag förstår dig rätt så sättter du in en räknare i output, vilket ger en lista med rakt nedstigande nummer? Det jag behöver är att om item 1, 5 och 11 kommer från feed 1 så ska det läggas till en class och om det kommer från feed 2 ska en annan klass ges osv. Om jag förstår ditt exempel rätt så skulle det se ut så här:
Kod:
<li class="item1"><a href="http://...">Titel</a></li> <li class="item2"><a href="http://...">Titel</a></li> <li class="item3"><a href="http://...">Titel</a></li> <li class="item4"><a href="http://...">Titel</a></li> <li class="item5"><a href="http://...">Titel</a></li> .... Kod:
<li class="nyheter"><a href="http://...">Titel</a></li> <li class="blog"><a href="http://...">Titel</a></li> <li class="blog"><a href="http://...">Titel</a></li> <li class="forum"><a href="http://...">Titel</a></li> <li class="itnyheter"><a href="http://...">Titel</a></li> .... Drew: Ge gärna ett exempel på hur det kan förenklas, jag inte någon expert på PHP och all hjälp mottages med tacksamhet ![]() Jag är lite osäker på hur du menar att jag ska lägga till det i items, skulle du kunna visa ett exempel? Om jag inte är helt ute och cyklar så måste en class läggas till före eller direkt i "blandaren" så att rätt feed får rätt klass? Kod:
$items = array(); // loop thru all urls & merge feeds into master array foreach ( $urls as $url ) { $rss = fetch_rss($url); if (!$rss) continue; $items = array_merge($items, $rss->items); } |
|||
![]() |
![]() |
![]() |
#5 | ||
|
|||
Medlem
|
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; $items = array_merge($items, array($class => $rss->items)); } // sort all items in array by date usort($items, 'date_cmp'); // generate ouput array $out = array(); foreach ($items as $class => $item) { $href = $item['link']; $title = $item['title']; $out[] = '<li><a href="'.$href.'" title="'.$title.'" class="'.$class.'">'.$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; } ?> |
||
![]() |
![]() |
![]() |
#6 | |||
|
||||
Mycket flitig postare
|
Fungerade inte....får inget output alls
![]() |
|||
![]() |
![]() |
![]() |
#7 | ||
|
|||
Medlem
|
Citat:
Kan innehålla syntax-fel dock... Skicka ett PM om du lyckas få fram ngn debug info så kan jag hjälpa dig. |
||
![]() |
![]() |
![]() |
#8 | |||
|
||||
Mycket flitig postare
|
Ah, förlåt, skulla ha bifogat den så klart....
![]() Här är den. Jag ska iväg på studentfirande, men jag återkommer så snart jag kan med debug. |
|||
![]() |
![]() |
![]() |
#9 | ||
|
|||
Medlem
|
Det är ändingar på 2 ställen i skriptet som behöver göras (eller 4 beroende på hur du räknar).
Ändra Kod:
// loop thru all urls & merge feeds into master array foreach ( $urls as $url ) { $rss = fetch_rss($url); if (!$rss) continue; $items = array_merge($items, $rss->items); } Kod:
// loop thru all urls & merge feeds into master array foreach ( $urls as $class => $url ) { $rss = fetch_rss($url); if (!$rss) continue; $rss->items = array_merge($rss->items, array('class' => $class)); $items = array_merge($items, $rss->items); } Kod:
foreach ($items as $item) { $href = $item['link']; $title = $item['title']; $out[] = '<li><a href="'.$href.'" title="'.$title.'">'.$title.'</a></li>'; } Kod:
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>'; } |
||
![]() |
![]() |
![]() |
#10 | |||
|
||||
Mycket flitig postare
|
Så här menar du Drew?
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; $rss->items = array_merge($rss->items, array('class' => $class)); $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; } ?> |
|||
![]() |
![]() |
Svara |
|
|