RandomQuote-OldVersion
Goal
Insert a random quote into a wiki page.
Solution
- randomquote.zip unpacks into cookbook/quote.php.
add the following line to config.php
include_once("$farmD/cookbook/quote.php");
If your site doesn't use wikifarms, the correct include statement is
include_once('cookbook/quote.php');
(Note: I had trouble getting this script to work until I deleted the Main.Quotes file that was included in the zip. I then created Main.Quotes using the normal procedure for creating a new wikipage.)
Discussion
Randomquote adds the markup (:randquote:) which will be replaced by a randomly chosen line from quotes.txt.
The format for quotes.txt is one quote per line with pipes ( | ) used to denote line breaks within the quote. Each pipe will be replaced with <br> before the quote is inserted.
You can see it in action at: http://www.hostgrabber.de
Contributor
- Dave Noonan ~ original Author ( http://wiki.thunderbunny.org/GeekStuff/RandomQuote )
- Jens Rosenfeld ~ Update to PmWiki 2.x
- Tiago Luis Bonamigo ~ updated to use a pmwiki page as the source for quotes
- Carlos Alberto Bonamigo ~ Minor change, the first asterisk gives you an empty quote on the array. Fixed now.
- Daniel Scheibler ~ updated the pmwiki page version to be configurable
See also
If you want to avoid wikiword processing you may use the keep() function:
// the original code
// return "<div id=\"randquote\">$RandomQuote2</div>";
// adding the keep() function
return keep("<div id=\"randquote\">$RandomQuote2</div>");
-- Guillaume (2005-02-07)
I liked this plugin so much, that i decided to migrate it to PmWiki 2.x -- Jens Rosenfeld (2005-01-08)
Tiago Luis Bonamigo - Here is my update
// Script: Copyright 2004 Dave Noonan, DaveNoonan@ThunderBunny.org
// 2004-02-15
// Update for PmWiki 2.x needs
//
// 2005-01-08 by Jens Rosenfeld, webmaster[at]hostgrabber.de
// Tested with PmWiki 2.0 Beta 14
//
//Changes made by Tiago Luis Bonamigo
//2005-01-08
//Tested with pmwiki-2.0.beta14
//
//=======================
// To make this script work, extract it in your pmwiki/cookbook directory.
// Then add the following line to config.php:
//
// include("cookbook/quote.php");
//
// Insert (:randquote:) as a markup to your wikipage.
// The markup will be replaced with the quote
//
//=======================
// Configuration:
//
// Fill a pmwiki page with quotes and start every quote with an asterisk.
// Put (:randquote:) inside every other page in pmwiki and get it replaced with a random quote.
//
//Changelog:
//
// Now you can choose a pmwiki page, full of quotes separated by an asterisk.
// We assume the new line will always be "2" exponencial, if you know what I mean.
// Changed the markup to be (:randquote:).
// That's all folks!!!
// Function to get a random line out of text file and sub <br> for | with a
// div named randquote around it.
function f_RandomQuote() {
$QuoteFile = "wiki.d/Main.Quotes";
$Quotes = fopen($QuoteFile, "r");
$conteudo = fread($Quotes, filesize ($QuoteFile));
fclose ($Quotes);
$arrConteudo = explode("\n",$conteudo);
foreach($arrConteudo as $linha)
if(substr($linha,0,6) == "text=*") {
$arrQuotes = substr($linha,6);
$arrQuotes = str_replace("2","<BR>",$arrQuotes);// have to change the first
// position on str_replace,
// to be "2" exponential.
$arrQuotes = explode("*",$arrQuotes);
}
srand( (double)microtime() * 1000000 );
shuffle($arrQuotes);
return "<div id=\"randquote\">$arrQuotes[0]</div>";
}
// Pointer to the function
$randQuote =& f_RandomQuote();
// Add (:randquote:) markup that will be replaced with the quote
Markup("randquote","directives","/\\(:randquote:\\)/",$randQuote);
I wrote it slightly differently, as I like the idea to separate the quotes by "*", the reason being that the quote page then displays nicely as a bulleted list with one quote per bullet. To do this, I used a "**" to introduce a line break inside a quote. The code goes like this: Philippe - 11/01/2005
foreach($arrConteudo as $linha)
if(substr($linha,0,6) == "text=*") {
$arrQuotes = substr($linha,6);
$arrQuotes = str_replace("**","<BR>",$arrQuotes);
$arrQuotes = explode("2*",$arrQuotes);
}
Replacing the 2 as an exponential 2, of course. This way, the quotes list can be like this:
- quote 1**author 1
- quote 2 - Line 1**Line 2**author 2
- quote 3**author 3
What do you think ?
I like it a lot as well (the version above), but I have a problem in that it still interprets wiki words, but does not interpret wiki markups (in particular those used to prevent interpretation :) ). Does anyone have a solution for this ? Philippe - 11/01/2005
The answer to your problem is that the quotes are extracted from a pmwiki page without passing through pmwiki markup processing, just the "find & link" one. Obvious?! I know... CarlosAB
OK, thanks for the explanation, any way around this ? Philippe - 13/01/2005
Great Idea, Tiago. That makes things much more easier! -- Jens Rosenfeld (2005-01-08)
Daniel Scheibler (2005-01-15):
- change "2*" into "$Newline" to use wiki-specific newline character
- change "<BR>" into "<br />" for HTML 4 Compatibility
- meaning of config variable $QuoteFile changed; could now be changed in local.php
- insetion of a config variable $QuoteLineDelimiter, which will be changed in <br />
important: variable configuration has to be done before include_once("cookbook/quote.php");
updated source:
<?php
// Script: Copyright 2004 Dave Noonan, DaveNoonan@ThunderBunny.org
// 2004-02-15
//
// Update for PmWiki 2.x needs
// 2005-01-08 by Jens Rosenfeld, webmaster[at]hostgrabber.de
// Tested with PmWiki 2.0 Beta 14
//
//=======================
// To make this script work, extract it in your pmwiki/cookbook directory.
// Then add the following line to config.php:
//
// include("cookbook/quote.php");
//
// Insert (:randquote:) as a markup to your wikipage.
// The markup will be replaced with the quote
//
//=======================
// Configuration:
//
// Fill a pmwiki page with quotes and start every quote with an asterisk.
// Put (:randquote:) inside every other page in pmwiki and get it replaced with a random quote.
//
//Changelog:
//
// Now you can choose a pmwiki page, full of quotes separated by an asterisk.
// We assume the new line will always be "".
// Changed the markup to be (:randquote:).
// That's all folks!!!
// ============== Changes by Daniel Scheibler <pmwiki@scheiby.de> <[(approve links)
edit
diff]
// * change "2*" into "$Newline" to use wiki-specific newline character
// * insertion of a config variable $QuoteRemoveItemize to change between $Newline
// and $Newline followed by an *
// * change "<BR>" into "<br />" for HTML 4 Compatibility
// * meaning of config variable $QuoteFile changed; could now be changed in local.php
// * insetion of a config variable $QuoteLineDelimiter, which will be changed in <br />
// Function to get a random line out of text file and sub <br> for | with a
// div named randquote around it.
SDV($QuoteFile, "Main.Quotes");
SDV($QuoteLineDelimiter, "**");
SDV($QuoteRemoveItemize, false);
function f_RandomQuote()
{
global $Newline;
global $QuoteFile;
global $WorkDir;
global $QuoteLineDelimiter;
global $QuoteRemoveItemize;
$Quotes = fopen($WorkDir . "/" . $QuoteFile, "r");
$conteudo = fread($Quotes, filesize ($WorkDir . "/" . $QuoteFile));
fclose ($Quotes);
$arrConteudo = explode("\n", $conteudo);
foreach($arrConteudo as $linha) {
if(substr($linha,0,5) == "text=") {
$arrQuotes = substr($linha, 5);
$arrQuotes = str_replace($QuoteLineDelimiter, "<br />", $arrQuotes);
if ($QuoteRemoveItemize) {
$arrQuotes = explode($Newline . "*", $arrQuotes);
} else {
$arrQuotes = explode($Newline, $arrQuotes);
}
}
}
srand( (double)microtime() * 1000000 );
shuffle($arrQuotes);
return "<div id=\"randquote\">$arrQuotes[0]</div>";
}
// Pointer to the function
$randQuote =& f_RandomQuote();
// Add [:randquote:] markup that will be replaced with the quote
Markup("randquote", "directives", "/\\ as a markup to your wikipage.
// The markup will be replaced with the quote
//
//=======================
// Configuration:
//
// Fill a pmwiki page with quotes and start every quote with an asterisk.
// Put (:randquote:) inside every other page in pmwiki and get it replaced with a random quote.
//
//Changelog:
//
// Now you can choose a pmwiki page, full of quotes separated by an asterisk.
// We assume the new line will always be "".
//
// Changed the markup to be (:randquote:).
// That's all folks!!!
//
// ============== Changes by Daniel Scheibler <pmwiki@scheiby.de> <[(approve links)
edit
diff]
// * change "2*" into "$Newline" to use wiki-specific newline character
// * insertion of a config variable $QuoteRemoveItemize to change between $Newline
// and $Newline followed by an *
// * change "<BR>" into "<br />" for HTML 4 Compatibility
// * meaning of config variable $QuoteFile changed; could now be changed in local.php
// * insetion of a config variable $QuoteLineDelimiter, which will be changed in <br />
//
// ============== Changes by Daniel Scheibler <pmwiki@scheiby.de> <[(approve links)
edit
diff]
// * because of errors in cooperation with file storage in GZ format changing reading from $QuoteFile
// into standard PmWiki ReadPage function
//
// Function to get a random line out of text file and sub <br> for | with a
// div named randquote around it.
SDV($QuoteFile, "Main.Quotes");
SDV($QuoteLineDelimiter, "**");
SDV($QuoteRemoveItemize, false);
function f_RandomQuote()
{
global $QuoteFile;
global $QuoteLineDelimiter;
global $QuoteRemoveItemize;
$conteudo = ReadPage($QuoteFile);
$arrQuotes = $conteudo[text];
$arrQuotes = str_replace($QuoteLineDelimiter, "<br />", $arrQuotes);
if ($QuoteRemoveItemize) {
$arrQuotes = explode("\n*", $arrQuotes);
$arrQuotes[0] = substr($arrQuotes[0], 1);
} else {
$arrQuotes = explode("\n", $arrQuotes);
}
srand( (double)microtime() * 1000000 );
if (isset($arrQuotes)) {
shuffle($arrQuotes);
return "<div id=\"randquote\">$arrQuotes[0]</div>";
} else {
return "<div id=\"randquote\"></div>";
}
}
// Pointer to the function
$randQuote =& f_RandomQuote();
// Add [:randquote:] markup that will be replaced with the quote
Markup("randquote", "directives", "/
<?php if (!defined('PmWiki')) exit();
// Script: Copyright 2004 Dave Noonan, DaveNoonan@ThunderBunny.org
// 2004-02-15
//
// Update for PmWiki 2.x needs
// 2005-01-08 by Jens Rosenfeld, webmaster[at]hostgrabber.de
// Tested with PmWiki 2.0 Beta 14
//
// Tested with PmWiki 2.0 Beta 32 - 2005-04-21 by Daniel Scheibler <pmwiki@scheiby.de>
//
//=======================
// To make this script work, extract it in your pmwiki/cookbook directory.
// Then add the following line to config.php:
//
// include("$farmD/cookbook/quote.php");
//
// Insert (:randquote:) as a markup to your wikipage.
// The markup will be replaced with the quote
//
//=======================
// Configuration:
//
// Fill a pmwiki page with quotes and start every quote with an asterisk.
// Put (:randquote:) inside every other page in pmwiki and get it replaced with a random quote.
//
//Changelog:
//
// Now you can choose a pmwiki page, full of quotes separated by an asterisk.
// We assume the new line will always be "".
// Changed the markup to be (:randquote:).
// That's all folks!!!
// ============== Changes by Daniel Scheibler <pmwiki@scheiby.de> <http://www.scheiby.org>
// * change "2*" into "$Newline" to use wiki-specific newline character
// * insertion of a config variable $QuoteRemoveItemize to change between $Newline
// and $Newline followed by an *
// * change "<BR>" into "<br />" for HTML 4 Compatibility
// * meaning of config variable $QuoteFile changed; could now be changed in local.php
// * insetion of a config variable $QuoteLineDelimiter, which will be changed in <br />
// ============== Changes by Daniel Scheibler <pmwiki@scheiby.de> <http://www.scheiby.org>
// * because of errors in cooperation with file storage in GZ format changing reading from $QuoteFile
// into standard PmWiki ReadPage function
// Function to get a random line out of text file and sub <br> for | with a
// div named randquote around it.
//=======================
//Changes by Feral at Tue, 27 Dec 2005 22:10:19 PST
// I have added the ability to specify a page via page=group.pagename, i.e. (:randquote page=Quotes.Einstein:)
SDV($QuoteFile, "Main.Quotes");
SDV($QuoteLineDelimiter, "**");
SDV($QuoteRemoveItemize, false);
function f_RandomQuote($opts)
{
global $QuoteFile;
global $QuoteLineDelimiter;
global $QuoteRemoveItemize;
$defaults = array(
'page'=>''
);
$args = array_merge($defaults, ParseArgs($opts));
$page = $args['page'];
if ($page == '') {
$page = $QuoteFile;
}
$conteudo = ReadPage($page);
$arrQuotes = $conteudo[text];
$arrQuotes = str_replace($QuoteLineDelimiter, "<br />", $arrQuotes);
if ($QuoteRemoveItemize) {
$arrQuotes = explode("\n*", $arrQuotes);
$arrQuotes[0] = substr($arrQuotes[0], 1);
} else {
$arrQuotes = explode("\n", $arrQuotes);
}
srand( (double)microtime() * 1000000 );
if (isset($arrQuotes)) {
shuffle($arrQuotes);
return "<div id=\"randquote\">$arrQuotes[0]</div>";
} else {
return "<div id=\"randquote\">This space for rent.</div>";
}
}
// Pointer to the function
// [Feral:361/05@22:07] Feral sees no reason to do this, so she isn't (=
//$randQuote =& f_RandomQuote();
// Add (:randquote:) markup that will be replaced with the quote
// [Feral:361/05@22:07] Added ability to specify page via page=group.pagename, i.e. (:randquote page=Quotes.Einstein:)
Markup("randquote", "directives", "/\\(:randquote\\s*(.*?):\\)/e", "f_RandomQuote(PSS('$1'))");
?>
I have been using this with pmwiki-2.1.beta17 for a while with no unexpected results. ... I think we all know how that works though! (=
Just a side note, but when you have this set as:
$QuoteLineDelimiter = "[[<<]]"; $QuoteRemoveItemize = true;
You can have entries like so:
*"Do, or do not. There is no 'try'"[[<<]]~ Yoda *"The impossible is only a little bit harder."[[<<]]~ My Grandmother. *"When you're going through hell, keep going."[[<<]]~ Winston Churchill *"It is better to be hated for what you are than to be loved for what you are not."[[<<]]~ Andre Gide
Which makes directly viewing the quote page(s) considerably easier. (=