[Home]WikiPatches/EmbeddedBacklinks

UseModWiki | WikiPatches | RecentChanges | Preferences

Embedded Backlinks

Description

Insert backlinks directly into the page text. Use <back> to add backlinks to the current page, and <back PageName?> for backlinks to any other page.

This is very useful for category-type pages, which usually state "click on the page title for pages that fall into this category". Now you can make this automatic.

See also: /EmbeddedSubpageList

Patch

--- wiki.pl     2003-09-11 14:21:02.000000000 +0200
+++ BackLinks.pl        2006-12-25 09:36:31.359855960 +0100
@@ -65,7 +65,7 @@
   $ConfigError $UploadPattern );

 # == Configuration =====================================================
-$DataDir     = "/tmp/mywikidb"; # Main wiki directory
+$DataDir     = "/home/upi/olpan"; # Main wiki directory
 $UseConfig   = 1;       # 1 = use config file,    0 = do not look for config
 $ConfigFile  = "$DataDir/config";   # Configuration file

@@ -1572,6 +1572,8 @@
   }
   $pageText = &QuoteHtml($pageText);
   $pageText =~ s/\\ *\r?\n/ /g;          # Join lines with backslash at end
+  $pageText =~ s/&lt;back&gt;/&StoreRaw("<h2>" . Ts('Backlinks for: %s', $MainPage) . "<\/h2>\n" . &GetPageList(&SearchTitleAndBody($MainPage)))/ige;
+  $pageText =~ s/&lt;back\s+(.*?)&gt;/&StoreRaw("<h2>" . Ts('Backlinks for: %s', &QuoteHtml($1)) . "<\/h2>\n" . &GetPageList(&SearchTitleAndBody($MainPage)))/ige;
   if ($ParseParas) {
     # Note: The following 3 rules may span paragraphs, so they are
     #       copied from CommonMarkup
@@ -3736,14 +3738,23 @@
   print &GetCommonFooter();
 }

+sub GetPageList {
+  my ($pagename, $retval);
+  my (@list) = @_;
+
+  foreach $pagename (@list) {
+    $retval .= ".... " if ($pagename =~ m|/|);
+    $retval .= &GetPageLink($pagename) . "<br>\n";
+  }
+
+  return $retval;
+}
+
 sub PrintPageList {
   my $pagename;

   print "<h2>", Ts('%s pages found:', ($#_ + 1)), "</h2>\n";
-  foreach $pagename (@_) {
-    print ".... "  if ($pagename =~ m|/|);
-    print &GetPageLink($pagename), "<br>\n";
-  }
+  print GetPageList(@_);
 }

 sub DoLinks {
@@ -4101,8 +4112,9 @@

 sub SearchTitleAndBody {
   my ($string) = @_;
-  my ($name, $freeName, @found);
+  my ($name, $freeName, @found, $openPageName);

+  $openPageName = $OpenPageName;
   foreach $name (&AllPagesList()) {
     &OpenPage($name);
     &OpenDefaultText();
@@ -4116,6 +4128,10 @@
       }
     }
   }
+  if ($openPageName) {
+    &OpenPage($openPageName);
+    &OpenDefaultText();
+  }
   return @found;
 }


-- UngarPeter

Bugs

Previously we had some issues with /EmbeddedBacklinks colliding with the <toc> and the last edited info. This has been fixed now. Thanks for those who have reported it.


UseModWiki | WikiPatches | RecentChanges | Preferences
Edit text of this page | View other revisions | Search MetaWiki
Last edited December 25, 2006 8:48 am by UngarPeter (diff)
Search: