RandomQuote

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?

Description

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:

He's a guy who gets up at six o'clock in the morning regardless of what time it is.

Colin Cooper on Paul Tito

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:

There are two essential rules to management. One, the customer is always right; and two, they must be punished for their arrogance.

Dilbert

To be a nemesis, you have to actively try to destroy something, don't you? Really, I'm not out to destroy Microsoft. That will just be a completely unintentional side effect.

Linus Torvalds

Comments

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

Contributors

Sandbox


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)) {
to
&& 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

Questions

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

I think there is a world market for maybe five computers.

IBM Chairman Thomas Watson, 1943

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.