IncludeAble

Summary: How to include the current revision of a pmwiki page in another php page
Version:
Prerequisites: Last tested on PmWiki version: 2.0.6
Status:
Maintainer: Wesley Tanaka
Categories: Includes
Discussion: IncludeAble-Talk

Question

How do you include the current revision of a pmwiki page in another php page?

Answer

Let's say I want to include the current content of a pmwiki page in a php page called viewplace.php

1) Patch pmwiki.php in one place, namely:

changing the exit; on line 279 (version 2.0.6) to return;

See PITS.00548 fixed in pmwiki v 2.0.12!

2) Add this php code to viewplace.php:

<?php

$_REQUEST['pagename'] = 'pmwiki page';

$cwd = getcwd();

chdir('wiki');

include 'pmwiki.php';

chdir($cwd);

?>

3) To your config.php, add something like:

if (strpos($_SERVER['REQUEST_URI'], 'viewplace') !== FALSE

      || strpos($_SERVER['REQUEST_URI'], 'handleplacecomment') !== FALSE)

{

   // Switch skin.  This has to go first because stdconfig loads
   // scripts/skins which loads the skin.
   if (strpos($_SERVER['REQUEST_URI'], 'viewplace') !== FALSE)
      $Skin = 'embed';
   else if (strpos($_SERVER['REQUEST_URI'], 'handleplacecomment') !== FALSE)
      $Skin = 'blank';
   // process stdconfig.  This has to go before clearing the
   // HTTPHeaders because some headers are set from stdconfig itself.
   include_once("$FarmD/scripts/stdconfig.php");
   // Disable stdconfig so that it doesn't get processed again.
   $EnableStdConfig = FALSE;
   // stdconfig adds some stuff to that specified in the template file
   // (<div id='wikitext'> </div> and some blank lines), even though
   // our template is completely blank, so we try even harder to clear
   // out the template format.
   if (strpos($_SERVER['REQUEST_URI'], 'handleplacecomment') !== FALSE)
   {
      $TmplFmt=array();
   }
   // Disable headers, since some output may have already been created
   // before pmwiki was included.
   $HTTPHeaders = array();
   // Disable automated redirect for the same reason.
   $EnableFixedUrlRedirect = FALSE;
   // Disable links, because they link back to the wiki URIs, which
   // may be confusing.  This function could be rewritten to rewrite
   // the links to other pages instead, if that made sense.
   function Nothing($pagename,$imap,$path,$title,$txt,$fmt=NULL)
   {
      return $txt;
   }
   $LinkFunctions = array('<:page>' => 'Nothing');
   $InterMapFiles = array();
   // Don't display any text if the pmwiki page is blank or doesn't exist.
   // Again, the default text might be confusing.
   $DefaultPageTextFmt = '';

}

This code needs to be added after any other HTTPHeaders or Skin assignments in config.php.

4) Create an 'embed' skin with:

<!--PageText-->

in it.

Notes

Releases

See Also

Contributors

Wesley Tanaka

Comments

See discussion at IncludeAble-Talk