Topics

User Functions

Events

There are no upcoming events

What's New

Stories

No new stories

Comments last 2 weeks

No new comments

Trackbacks last 2 weeks

No new trackback comments

Links last 2 weeks

No recent new links

NEW FILES last 14 days

No new files

Welcome to Geeklog Saturday, May 18 2013 @ 11:38 AM EDT


 Forum Index > Extensions > Cool Hacks New Topic Post Reply
 RDF/RSS Feed in static page.
   
wlparks
 10/13/03 06:01PM (Read 3779 times)  
++---
Junior

Status: offline


Registered: 02/21/03
Posts: 24
I made this little hack because I wanted to use geeklogs XML parser for a news feed in a static page. So heres a little workaround.

0. Backup your database
1. Make a portal block with all the correct information, and uncheck the enabled box.
2. From the blocks section of your admin options take note of the block id by looking at the link where you edit the page. It'll say something like http://www.webpage.com/admin/block.php?mode=edit&bid=22 .. bid is your block id.
3. Insert the following code into the bottom of your lib-custom.php file in your system folder.
PHP Formatted Code

// Custom RDF / RSS feed on static page
function static_rdf($blockid = false) {
        $error = array();
        if ($blockid != false && is_numeric($blockid) && $blockid != "") {
                global $_TABLES;
                if (DB_getItem( $_TABLES['blocks'], 'type', "bid = '{$blockid}'" ) == 'portal') {                      
                        $sql = "SELECT UNIX_TIMESTAMP(rdfupdated) as date, content, rdfurl FROM {$_TABLES['blocks']} WHERE bid = '" . $blockid . "'";
                        $result = DB_query( $sql );
                        $A = DB_fetchArray( $result );
                        if ( COM_rdfCheck($blockid, $A['rdfurl'], $A['date'] ))
                        {
                                $A['content'] = DB_getItem( $_TABLES['blocks'], 'content',
                                                        "bid = '{$blockid}'" );
                        }
                        $return = $A['content'];
                } else {
                        $error[] = 'Block is not of Portal Type';
                }
        } else {
                $error[] = 'Is not a valid BlockID';
        }
        if (count($error) > 0) {
                $return = "Something is wrong with the blockid that you entered.  Fix this.  Otherwise there could be issues";
                $return .= '<ul>';
                for ( $x = 0; count($error) > $x; $x++ ) {
                        $return .= '<li>' . $error[$x] . '</li>';
                }
                $return .= "</ul>";
        }
        return $return;
}
 


4. create a static page that has php enabled.
simply put the following code in the page
PHP Formatted Code
<br />$return = static_rdf('82');<br />return $return;<br />


replace 82 with the number of your block.

Just so you know I'm not going to take reponsibility if bad things happen with this, they shouldn't, I have done quite a bit of error handling. . . but if they do its not my fault

 
Profile Email
 Quote
wlparks
 10/13/03 06:30PM  
++---
Junior

Status: offline


Registered: 02/21/03
Posts: 24
Just wanted to let everybody how well Blaine keeps up with this forum plugin, there was an issue that I had with html in the code tag and he fixed it in less then a day.

Thanks Blaine!

Warren

 
Profile Email
 Quote
jackbox
 12/27/05 03:14PM  
+----
Newbie

Status: offline


Registered: 12/24/05
Posts: 5
Right now this function is only showinng the headline of the RSS feed stories. How can I make it display the introductory text also (the text is in the portal block) but the function is only returning the headers. Thanks.

 
Profile Email
 Quote
beewee
 12/27/05 04:15PM  
+++++
Full Member

Status: offline


Registered: 08/05/03
Posts: 969
I'm using this, if you put in multiple feed URL's it 'rotates' the feeds, but you can use it for a single feed as well. Sometimes you get a problem if a feed contains HTML tags. Just put it in a PHP-enabled static page, that's all.

PHP Formatted Code
$insideitem = false;
$tag = "";
$title = "";
$description = "";
$link = "";
$locations = array('feed1URL','feed2URL','feed3URL');
srand((float) microtime() * 10000000); // seed the random gen
$random_key = array_rand($locations);
function startElement($parser, $name, $attrs) {
 global $insideitem, $tag, $title, $description, $link;
 if ($insideitem) {
  $tag = $name;
 } elseif ($name == "ITEM") {
  $insideitem = true;
 }
}
function endElement($parser, $name) {
 global $insideitem, $tag, $title, $description, $link;
 if ($name == "ITEM") {
  printf("<a href='%s' target=new><b>%s</b></a>",
  trim($link),htmlspecialchars(trim($title)));
  printf("<dt>%s<br><br>",htmlspecialchars(trim($description)));
  $title = "";
  $description = "";
  $link = "";
  $insideitem = false;
 }
}
function characterData($parser, $data) {
 global $insideitem, $tag, $title, $description, $link;
 if ($insideitem) {
 switch ($tag) {
  case "TITLE":
  $title .= $data;
  break;
  case "DESCRIPTION":
  $description .= $data;
  break;
  case "LINK":
  $link .= $data;
  break;
 }
 }
}
$xml_parser = xml_parser_create();
xml_set_element_handler($xml_parser, "startElement", "endElement");
xml_set_character_data_handler($xml_parser, "characterData");
$fp = fopen($locations[$random_key], 'r')
 or die("Error reading RSS data.");
while ($data = fread($fp, 4096))
 xml_parse($xml_parser, $data, feof($fp))
  or die(sprintf("XML error: %s at line %d",
   xml_error_string(xml_get_error_code($xml_parser)),    
   xml_get_current_line_number($xml_parser)));
fclose($fp);
xml_parser_free($xml_parser);

 

Dutch Geeklog sites about camping/hiking: www.kampeerzaken.nl | www.campersite.nl | www.caravans.nl | www.caravans.net
 
Profile Email Website
 Quote
graffixjones
 01/21/06 03:41PM  
+----
Newbie

Status: offline


Registered: 01/12/06
Posts: 5
Heya beewee,
I really like your RSS implementation, but have run into a dilemma. You mention that your code has problems with html marked-up feeds, and I was wondering if there's a way around the problem. The reason I'm asking is that I'd like to add a Google news feed to my site, and of course they use html marked-up feeds, and it appears that the xml parser is subbing in ascii codes for all the markup, and displaying essentially the 'raw' html in the feed body.

I was hoping that I could use some sort of 'convert_to_html' function after parsing so that I can coerce all the markup back to it's original state, so that the feeds all display properly. Is this even possible? I assume that if it was, you would have incorporated it into your original code, but I thought I'd ask anyway.

Thanks.

 
Profile Email
 Quote
beewee
 01/21/06 06:14PM  
+++++
Full Member

Status: offline


Registered: 08/05/03
Posts: 969
Well, I'm no developer, and it's not my code either, and I got the same problem sometimes. Perhaps you could use a service like Feedburner to get rid of the HTML, or to convert it to HTML.

Dutch Geeklog sites about camping/hiking: www.kampeerzaken.nl | www.campersite.nl | www.caravans.nl | www.caravans.net
 
Profile Email Website
 Quote
Content generated in: 0.76 seconds
New Topic Post Reply

Normal Topic Normal Topic
Sticky Topic Sticky Topic
Locked Topic Locked Topic
New Post New Post
Sticky Topic W/ New Post Sticky Topic W/ New Post
Locked Topic W/ New Post Locked Topic W/ New Post
View Anonymous Posts 
Able to post 
Filtered HTML Allowed 
Censored Content