Summary: Insert random quotes or markup into a page
Version: 2007-02-15
Prerequisites: pmwiki-2.1.beta15
Status: Stable
Maintainer: Petko (original author: Pm)
Categories: Includes, PHP72

Questions addressed by this recipe

  • How can I implement a "quote of the day"?
  • How can I have a rotating image or markup?
  • How can I set up a "Did you know" feature similar to MediaWiki?
  • How can I create random banners?


The randomsection.phpΔ script makes it possible to insert a random quote from another page into the current one. It does this by defining a {$RandomSection} page variable, which combined with the (:include:) markup makes it possible to grab random sections from other wiki pages.

Note: A previous version of this page used a different approach, see RandomQuote-OldVersion for that recipe.

To use this feature, install the randomsection.phpΔ script into the cookbook/ directory, then add an include_once("$FarmD/cookbook/randomsection.php"); line to a local customization file.

Next, create a page containing quotations to be included. Each quotation should be preceded by a unique anchor -- i.e., using the [[#name]] markup. The Cookbook.Quotes page on this site shows an example set of quotations.

Then, to dynamically insert a random quote from a page, use (:include {PageName$RandomSection}:) in the markup. For example, to grab a quote at random from the Cookbook.Quotes page, one can do:

Quote of the day:

(:include {Quotes$RandomSection}:)

Quote of the day:

Freedom is not worth having if it does not include the freedom to make mistakes.

Mahatma Gandhi

Reload this page to see the quotes change.

Note that the quotations can contain arbitrary markup, such as wikistyles, links to other pages or sites, and the like.

The {$RandomSection} page variable also remembers the section names it has already used, so it can appear multiple times in a page without duplicating quotes.

Two more quotes:

(:include {Quotes$RandomSection}:)

(:include {Quotes$RandomSection}:)

Two more quotes:

Doubt is not a pleasant condition, but certainty is absurd.

Voltaire (1694-1778)

Edmund: Ah! Good day, cousin McAdder. I trust you are well.
McAdder: Aye, well enough.
Edmund: And Morag?
McAdder: She bides fine.
Edmund: And how stands that mighty army, the clan McAdder?
McAdder: They're both well.


Kinda pointing out the obvious but this plugin is also perfect for setting up a "did you know" function, similar to mediawiki's. I set it up for mine and it works like a charm, thanks :D - Com

You can use this feature to display random banners throughout a wiki. Create a banners page and instead of a quotes, put [[<URL> | <URL of the banner picture>]] . Each banner is seperated by [[#anchors]] . One can use group headers and/or footers for sitewide banners, or just specific pages with (:include {banners$RandomSection}:) . Drfredc

Because of some strange quirk in the include make sure the anchor [[#anchor]] is on a separate line to the quote or image.

See Also



I changed this script slightly to allow for including only between two specific anchors instead of using only one anchor to delineate. This lets you keep quotes and other content on a nicely formatted page and pull only your anchored contents out (rather than everything between the anchors).

On line 43, change
&& preg_match_all("/\\[\\[(#$npat)\\]\\]/", $page['text'], $alist)) {
&& preg_match_all("/\\[\\[(#$npat)end\\]\\]/", $page['text'], $alist)) {

That's it! Just add the word 'end' into the anchor format string. I'm not a coder but this solution seems to be working perfectly fine so far. After you've modified the script, simply wrap the sections you want to be pulled in [[#anchor]] ... [[#anchorend]] tags. --jibegod


How is this a 'quote of the day' script if there's no option to set the randomness interval? I want a banner to rotate on a daily basis, not on every reload... --jibegod

Quote of the day

Few things are harder to put up with than the annoyance of a good example.

Mark Twain (1835-1910)

User notes +3: If you use, used or reviewed this recipe, you can add your name. These statistics appear in the Cookbook listings and will help newcomers browsing through the wiki.