Kom ihåg mig?
Home Menu

Menu


merge feeds med ID åt varje feed...

 
Ämnesverktyg Visningsalternativ
Oläst 2008-06-12, 22:31 #1
Mortekais avatar
Mortekai Mortekai är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Jan 2004
Inlägg: 587
Mortekai Mortekai är inte uppkopplad
Mycket flitig postare
Mortekais avatar
 
Reg.datum: Jan 2004
Inlägg: 587
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;
  }

?>
så på något sätt vill jag kunna lägga in en class i output <li class="$class"> till exempel, men jag är inte tillräckligt bra på PHP för att klura ut hur jag får in det i koden....hjälp mottages med tacksamhet
Mortekai är inte uppkopplad   Svara med citatSvara med citat
Oläst 2008-06-12, 23:39 #2
Osiriss avatar
Osiris Osiris är inte uppkopplad
Flitig postare
 
Reg.datum: Apr 2006
Inlägg: 391
Osiris Osiris är inte uppkopplad
Flitig postare
Osiriss avatar
 
Reg.datum: Apr 2006
Inlägg: 391
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>';
}
Innan ska du ha en räknare som börjar på exempelvis 0.
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.
Osiris är inte uppkopplad   Svara med citatSvara med citat
Oläst 2008-06-12, 23:42 #3
Drew Drew är inte uppkopplad
Medlem
 
Reg.datum: May 2007
Inlägg: 132
Drew Drew är inte uppkopplad
Medlem
 
Reg.datum: May 2007
Inlägg: 132
Det hela skulle kunna göras mycket enklare. Men lägg till klassen i $items, du kan ju ta nyckeln från $urls.
Drew är inte uppkopplad   Svara med citatSvara med citat
Oläst 2008-06-13, 08:29 #4
Mortekais avatar
Mortekai Mortekai är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Jan 2004
Inlägg: 587
Mortekai Mortekai är inte uppkopplad
Mycket flitig postare
Mortekais avatar
 
Reg.datum: Jan 2004
Inlägg: 587
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>
....
och det jag vill få till är tex (beroende på vilka feed items kommer ifrån):

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);
}
Mortekai är inte uppkopplad   Svara med citatSvara med citat
Oläst 2008-06-13, 09:52 #5
Jonathan P Jonathan P är inte uppkopplad
Medlem
 
Reg.datum: Feb 2008
Inlägg: 141
Jonathan P Jonathan P är inte uppkopplad
Medlem
 
Reg.datum: Feb 2008
Inlägg: 141
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;
  }

?>
Jonathan P är inte uppkopplad   Svara med citatSvara med citat
Oläst 2008-06-13, 10:16 #6
Mortekais avatar
Mortekai Mortekai är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Jan 2004
Inlägg: 587
Mortekai Mortekai är inte uppkopplad
Mycket flitig postare
Mortekais avatar
 
Reg.datum: Jan 2004
Inlägg: 587
Fungerade inte....får inget output alls
Mortekai är inte uppkopplad   Svara med citatSvara med citat
Oläst 2008-06-13, 10:50 #7
Jonathan P Jonathan P är inte uppkopplad
Medlem
 
Reg.datum: Feb 2008
Inlägg: 141
Jonathan P Jonathan P är inte uppkopplad
Medlem
 
Reg.datum: Feb 2008
Inlägg: 141
Citat:
Originally posted by Mortekai@Jun 13 2008, 10:16
Fungerade inte....får inget output alls
Jag hade inte möjlighet att testa koden då jag inte har tillgång till den inkluderade filen rss_fetch.inc, men teoretiskt sätt ska korrigeringarna jag gjorde lösa ditt problem.
Kan innehålla syntax-fel dock... Skicka ett PM om du lyckas få fram ngn debug info så kan jag hjälpa dig.
Jonathan P är inte uppkopplad   Svara med citatSvara med citat
Oläst 2008-06-13, 11:05 #8
Mortekais avatar
Mortekai Mortekai är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Jan 2004
Inlägg: 587
Mortekai Mortekai är inte uppkopplad
Mycket flitig postare
Mortekais avatar
 
Reg.datum: Jan 2004
Inlägg: 587
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.
Bifogade filer
Filtyp: ibf post-4-1213347909.ibf (15.1 KB, 36 visningar)
Mortekai är inte uppkopplad   Svara med citatSvara med citat
Oläst 2008-06-13, 18:21 #9
Drew Drew är inte uppkopplad
Medlem
 
Reg.datum: May 2007
Inlägg: 132
Drew Drew är inte uppkopplad
Medlem
 
Reg.datum: May 2007
Inlägg: 132
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);
}
till
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);
}
Och
Kod:
foreach ($items as $item) {
  $href  = $item['link'];
  $title  = $item['title'];
  $out[] = '<li><a href="'.$href.'" title="'.$title.'">'.$title.'</a></li>';
}
till
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>';
}
Då hamnar nyheter, blog, forum osv i <li class="' . $class . '">.
Drew är inte uppkopplad   Svara med citatSvara med citat
Oläst 2008-06-13, 19:57 #10
Mortekais avatar
Mortekai Mortekai är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Jan 2004
Inlägg: 587
Mortekai Mortekai är inte uppkopplad
Mycket flitig postare
Mortekais avatar
 
Reg.datum: Jan 2004
Inlägg: 587
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;
  }

?>
Det fungerar tyvärr inte utand det blir <li class=""> utan något värde i $class...
Mortekai är inte uppkopplad   Svara med citatSvara med citat
Svara


Aktiva användare som för närvarande tittar på det här ämnet: 1 (0 medlemmar och 1 gäster)
 

Regler för att posta
Du får inte posta nya ämnen
Du får inte posta svar
Du får inte posta bifogade filer
Du får inte redigera dina inlägg

BB-kod är
Smilies är
[IMG]-kod är
HTML-kod är av

Forumhopp


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

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