Page 1 of 1

displaying rss

Posted: Wed Nov 10, 2010 10:09 am
by lawler_09
hey guys

i hope you can help.

I've created 5 separate divs, and want to display data from an xml file in them.

In the first div i want to display just the data from the first item in the xml file.

then in the second div i want to display the second item from the xml file and so forth.

any ideas?

thanks

Re: displaying rss

Posted: Wed Nov 10, 2010 10:13 am
by Celauran
Are all the divs the same? Sounds like a simple loop would work fine. Do you have some sample code we can look at?

Re: displaying rss

Posted: Wed Nov 10, 2010 10:20 am
by lawler_09
im new to all this really so bare with me haha

i basically have 5 divs like so, and want to display 1 of the 5 items in my xml file, in each div so

<div id="feed1">
<!--DISPLAY ITEM 1 HERE-->
</div>

<div id="feed2">
<!--DISPLAY ITEM 2 HERE-->
</div>

<div id="feed3">
<!--DISPLAY ITEM 3 HERE-->
</div>

<div id="feed4">
<!--DISPLAY ITEM 4 HERE-->
</div>

<div id="feed5">
<!--DISPLAY ITEM 5 HERE-->
</div>

the only code i managed to find was this.

which works but displays all 5 items in every div, whereas i want 1 in each in order

<?php

$xml = "rss.xml";
$xmlDoc = new DOMDocument();
$xmlDoc->load($xml);

// get the item tag
$items = $xmlDoc->getElementsByTagName("item");

// get the items count
$itemsCount = $items->length;

// start to iterate through the item node
for ($i=0; $i<$itemsCount; $i++) {
$itemTitle = $items->item($i)->getElementsByTagName("title")->item(0)->childNodes->item(0)->nodeValue;
$itemURL = $items->item($i)->getElementsByTagName("link")->item(0)->childNodes->item(0)->nodeValue;
$item_desc = $items->item($i)->getElementsByTagName("description")->item(0)->childNodes->item(0)->nodeValue;

echo $itemTitle;
}
?>

Re: displaying rss

Posted: Wed Nov 10, 2010 10:26 am
by Celauran
What if you moved the divs into the loop as well?

Code: Select all

 
// start to iterate through the item node
for ($i=0; $i<$itemsCount; $i++) {
  echo '<div id="feed' . $i . '">;
  $itemTitle = $items->item($i)->getElementsByTagName("title")->item(0)->childNodes->item(0)->nodeValue;
  $itemURL = $items->item($i)->getElementsByTagName("link")->item(0)->childNodes->item(0)->nodeValue;
  $item_desc = $items->item($i)->getElementsByTagName("description")->item(0)->childNodes->item(0)->nodeValue;

  echo $itemTitle;
  echo '</div>';
}

Re: displaying rss

Posted: Wed Nov 10, 2010 11:25 am
by lawler_09
i thought about that but i think it might mess up the way it looks.

http://www.zombiedesigns.co.uk/my_anthems_v2/index.php

if you look at my site, you will see each of the 5 boxes i wish to display data in.

I'm guessing there's no easy as to say "pick first item from file, and echo headline" in one div, then a separate bit of code in the next div to pick the 2 item?

Re: displaying rss

Posted: Wed Nov 10, 2010 11:28 am
by lawler_09
actually thinking about it what u suggested may work.

i will try it and let you know!

Re: displaying rss

Posted: Wed Nov 10, 2010 11:38 am
by lawler_09
i tried it but i couldn't get it to work

did you mean:

for ($i=0; $i<$itemsCount; $i++) {
$itemTitle = $items->item($i)->getElementsByTagName("title")->item(0)->childNodes->item(0)->nodeValue;
$itemURL = $items->item($i)->getElementsByTagName("link")->item(0)->childNodes->item(0)->nodeValue;
$item_desc = $items->item($i)->getElementsByTagName("description")->item(0)->childNodes->item(0)->nodeValue;

echo "<div id=\"t1\">".$itemTitle."</div>";
echo "<div id=\"t2\">".$itemTitle."</div>";
echo "<div id=\"t3\">".$itemTitle."</div>";
echo "<div id=\"t4\">".$itemTitle."</div>";
echo "<div id=\"t5\">".$itemTitle."</div>"; }
?>

Re: displaying rss

Posted: Wed Nov 10, 2010 11:43 am
by Celauran
lawler_09 wrote:i tried it but i couldn't get it to work

did you mean:

Code: Select all

  for ($i=0; $i<$itemsCount; $i++) {
    $itemTitle = $items->item($i)->getElementsByTagName("title")->item(0)->childNodes->item(0)->nodeValue;
    $itemURL = $items->item($i)->getElementsByTagName("link")->item(0)->childNodes->item(0)->nodeValue;
    $item_desc = $items->item($i)->getElementsByTagName("description")->item(0)->childNodes->item(0)->nodeValue;
 
    echo "<div id=\"t1\">".$itemTitle."</div>";
	echo "<div id=\"t2\">".$itemTitle."</div>";
	echo "<div id=\"t3\">".$itemTitle."</div>";
	echo "<div id=\"t4\">".$itemTitle."</div>";
	echo "<div id=\"t5\">".$itemTitle."</div>"; }
?>
No, that's not what I meant.

You just need one instance of <div> inside the loop. Since the loop is going to run $itemsCount times, $itemsCount divs will be created.

Code: Select all

  for ($i=1; $i<=$itemsCount; $i++) {
  $itemTitle = $items->item($i)->getElementsByTagName("title")->item(0)->childNodes->item(0)->nodeValue;
  $itemURL = $items->item($i)->getElementsByTagName("link")->item(0)->childNodes->item(0)->nodeValue;
  $item_desc = $items->item($i)->getElementsByTagName("description")->item(0)->childNodes->item(0)->nodeValue;

  echo "<div id=\"t" . $i . "\">".$itemTitle."</div>";
}

Re: displaying rss

Posted: Wed Nov 10, 2010 12:36 pm
by lawler_09
ahhh i see!!

i'm nearly there!! i get the error:

fatal error: call to a member fucntion getelementsbytagname() on a non-object

BUT it kinda works. it shows 2 where 1 should be, 3 where 2 should be etc etc but misses out the 1st one

Re: displaying rss

Posted: Wed Nov 10, 2010 1:30 pm
by McInfo

Code: Select all

for ($i = 1; $i <= $itemsCount; $i++); // Starts at 1, Goes to $itemsCount
for ($i = 0; $i <  $itemsCount; $i++); // Starts at 0, Goes to $itemsCount - 1

Re: displaying rss

Posted: Wed Nov 10, 2010 3:14 pm
by Celauran
lawler_09 wrote:BUT it kinda works. it shows 2 where 1 should be, 3 where 2 should be etc etc but misses out the 1st one
Ah, yes. Boneheaded mistake on my part.

Code: Select all

  for ($i=0; $i<$itemsCount; $i++) {
  $itemTitle = $items->item($i)->getElementsByTagName("title")->item(0)->childNodes->item(0)->nodeValue;
  $itemURL = $items->item($i)->getElementsByTagName("link")->item(0)->childNodes->item(0)->nodeValue;
  $item_desc = $items->item($i)->getElementsByTagName("description")->item(0)->childNodes->item(0)->nodeValue;

  echo "<div id=\"t" . ($i + 1) . "\">".$itemTitle."</div>";
}

Re: displaying rss

Posted: Wed Nov 10, 2010 3:19 pm
by lawler_09
absolute legend!!

thank you so much!!

I'll be sure to thank you in my final project report!! :D

much appreciate!!

P.S Thanks to McInfo as well :D