[Mediawiki-l] Page rendering on mediawiki 1.6.x

Hans Oesterholt semweb at elemental-programming.org
Sun Apr 30 23:28:31 UTC 2006


L.S.,

I'm using mediawiki 1.6.3 and I've hooked in an RSS feed on page level.
However, the feed icon (firefox) only shows when I do something with the
page: Edit it e.g.

Does anyone know how can I change this behaviour?

Thanks in advance for your answers,

Hans Oesterholt-Dijkema


Code follows:

*************************************************************

<?php
#########################################################
# Configure here
#########################################################
$wgBlog_MaxRSSEntries=10;
$wgBlog_RSS_Location="/feeds/rss";
$wgBlog_RSS_Prefix="http://sample.sa/rss/";
$wgBlog_RSS_Title_Prefix="Sample Intranet - ";
$wgBlog_RSS_Prefix="/rss";
$wgBlog_HTTP="http://";
#########################################################

$wgExtensionFunctions[] = "wfBlogExtension";

$blogEntries=0;
$blogRSSFile="NoFile";
$blogRSS_URL="";

function wfBlogExtension() {
        global $wgParser;
        global $wgHooks;
        $wgHooks['ArticleSave'][]='blogEntries';
        $wgParser->setHook("blog-entry",'blogPEntry');
        $wgHooks['ParserBeforeTidy'][]='blogRSSLink';
}

function blogPEntry($input,$argv,$parser) {
   global $blogEntries;
   $blogEntries+=1;
   return "<A NAME=\"$blogEntries\"></A>";
}

function blogRSSLink(&$parser,&$text) {
   global $wgOut;
   global $blogRSS_URL;
   global $wgBlog_HTTP;
   global $wgBlog_RSS_Prefix;
   global $wgBlog_RSS_Location;
   global $_SERVER;


   $mTitle=$parser->getTitle();
   $title=blogTidyTitle($mTitle->mTextform);
   $host=$_SERVER['SERVER_NAME'];
   $filename="$wgBlog_RSS_Location/$title.rss";
   if (file_exists($filename)) {
      $blogRSS_URL="$wgBlog_HTTP$host$wgBlog_RSS_Prefix/$title.rss";
      $wgOut->addLink(array('rel' => 'alternate','type' => 
'application/rss+xml', 'title' => "RSS 2.0",
 'href' => "$blogRSS_URL"));
   }
}

function blogTidyTitle($title) {
    return preg_replace("/[^a-zA-Z0-9]/","_",$title);
}

function 
blogEntries(&$article,&$user,&$_text,&$summary,&$minoredit,&$watchthis,&$sectionanchor) 
{
   global $wgBlog_RSS_Location;
   global $wgBlog_HTTP;
   global $_SERVER;

   $text=$_text;
   preg_match_all("|[{][{]blog[^}]+[}][}]|",$text,$blogs,PREG_SET_ORDER);

   $count=0;
   if (count($blogs)>0) {

     $mTitle=$article->getTitle();
     $title=$mTitle->mTextform;
     $title=blogTidyTitle($title);
     $urlTitle=$mTitle->mUrlform;
     $fh=initRSS($title);

     $request_uri=$_SERVER['REQUEST_URI']; //QUERY_STRING'];
     $vars=explode('?',$request_uri,2);
     $request=$vars[0];
     $host=$_SERVER['SERVER_NAME'];

     foreach($blogs as $blogentry) {
        $entry=$blogentry[0];
        $vars=explode("|",$entry);

        $header="";
        $dt="";
        $link="";
        $text="";

        foreach ($vars as $v) {
          $vv=explode("=",$v,2);

          if ($vv[0]=="h") { $header=trim($vv[1]); }
          else if ($vv[0]=="d") { $dt=trim($vv[1]); }
          else if ($vv[0]=="t") { $text=trim($vv[1]); }
          else if ($vv[0]=="l") { $link=trim($vv[1]); }
        }

        $count+=1;
        
blogEntry($fh,$header,$dt,"$wgBlog_HTTP$host$request/$urlTitle#$count");
     }

     endRSS($fh);

   }
   return true;
}

function blogEntry($fh,$header,$dt,$link) {
      $xml="      <item>\n".
           "         <title>$header</title>\n".
           "         <link>$link</link>\n".
           "         <pubDate>$dt</pubDate>\n".
           "      </item>\n";


      fwrite($fh,$xml);
}

function initRSS($mTitle) {
   global $wgBlog_RSS_Location;
   global $_SERVER;
   global $wgBlog_RSS_Title_Prefix;
   global $wgBlog_HTTP;
   global $wgBlog_RSS_Prefix;
   global $blogRSS_URL;

   $host=$_SERVER['SERVER_NAME'];
   $dt=date("r");

   $xml="<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n".
        "<rss version=\"2.0\">\n".
        "  <channel>\n".
        "     <title>$wgBlog_RSS_Title_Prefix$mTitle</title>\n".
        "     <link>http://$host</link>\n".
        "     <lastBuildDate>$dt</lastBuildDate>\n".
        "     <generator>MediaWiki Blog RSS Generator v0.1</generator>\n".
        "";

   $blogRSSFile=fopen("$wgBlog_RSS_Location/$mTitle.rss","wt");
   fwrite($blogRSSFile,$xml);

   $blogRSS_URL="$wgBlog_HTTP$host$wgBlog_RSS_Prefix/$mTitle.rss";

   return $blogRSSFile;
}

function endRSS($blogRSSFile) {
  $xml="  </channel>\n".
       "</rss>\n".
       "";

  fwrite($blogRSSFile,$xml);
  fclose($blogRSSFile);
}




More information about the MediaWiki-l mailing list