Page 1 of 1

Wrap Header, Footer, and Sidebars

Posted: Mon Jan 21, 2008 5:49 pm
by TKS
Heya all,

I'm attempting to install a wiki onto my blog to develop some userguides and give users the opportunity to edit them as well.

To do this, I'm using wikka (a lightweight wiki) and I'd like to make it look like my blog. This means that I need to call most of the template stuffs from my blog.

The problem is, I don't know how to do it. I'm generally a fast learner on this stuff and have been using s9y for quite some time now so I feel I can learn it quite easily. I just need to be pointed in the right direction.

So, clarifying what I'd like to do. I've got my blog. I've got a wiki in the wiki/ folder on my webserver. I'd like to use the template from my s9y blog to wrap it around the wiki but don't know how to begin to call the templating functions (header, footer, sidebar) inside the wiki's php page.

Re: Wrap Header, Footer, and Sidebars

Posted: Mon Jan 21, 2008 7:18 pm
by garvinhicking
Hi!

Did you ask the wikka-people? Maybe there's a way to make that read Smarty templates?

Else, the only way I see is to use the HTML output of your blog as a starting point for your own wikka-template...

If you can use Raw PHP, what you'd need to do is to include the serendipity framework, something like this:

Code: Select all

<?php
ob_start();
// ... here comes the wikka specific stuff ...

// now comes s9y
chdir('/path/to/serendipity');
include('serendipity_config.inc.php');

// get the wikka output before it's sent
$wikka = ob_get_contents();
ob_end_clean();

// put the wikka output into a s9y template
serendipity_smarty_init();
$serendipity['smarty']->assign('CONTENT', $wikka);
$serendipity['smarty']->display(serendipity_getTemplateFile('index.tpl', 'serendipityPath'));
Be warned that this method actually requires a lot of PHP/Smarty knowledge, so I'm not sure if this is all a bit above scope. I'd actually recommend to go with your own distinct HTML template for foreign applications, despite the higher maintenance overhead when changing your template, it is much easier to develop and implement.


Regards,
Garvin

Posted: Mon Jan 21, 2008 9:50 pm
by TKS
I've implemented this code and so far it's so good. Now I'm on the horn with the wikka people to see how I can push forward. You got me started Garvin so thanks!

I'll post an update to this and if the wiki is finished, I'll post a 'how-to' there and link to it in this forum thread.

Posted: Mon Jan 21, 2008 10:09 pm
by TKS
They're saying they don't understand enough about smarty to help :( Sooo...let me post the page I'm trying to alter and see if you can point me to the right way again.

Code: Select all

<?php

/**

 * The Wikka mainscript.

 * 

 * This file is called each time a request is made from the browser.

 * Most of the core methods used by the engine are located in the Wakka class.

 * @see Wakka

 * This file was originally written by Hendrik Mans for WakkaWiki

 * and released under the terms of the modified BSD license

 * @see /docs/WakkaWiki.LICENSE

 *

 * @package Wikka

 * @subpackage Core

 * @version $Id$

 * @license http://www.gnu.org/copyleft/gpl.html GNU General Public License

 * @see /docs/Wikka.LICENSE

 * @filesource

 * 

 * @author Hendrik Mans <hendrik@mans.de>

 * @author Jason Tourtelotte <wikka-admin@jsnx.com>

 * @author {@link http://wikkawiki.org/JavaWoman Marjolein Katsma}

 * @author {@link http://wikkawiki.org/NilsLindenberg Nils Lindenberg}

 * @author {@link http://wikkawiki.org/DotMG Mahefa Randimbisoa}

 * @author {@link http://wikkawiki.org/DarTar Dario Taraborelli}

 * 

 * @copyright Copyright 2002-2003, Hendrik Mans <hendrik@mans.de>

 * @copyright Copyright 2004-2005, Jason Tourtelotte <wikka-admin@jsnx.com>

 * @copyright Copyright 2006, {@link http://wikkawiki.org/CreditsPage Wikka Development Team}

 * 

 * @todo use templating class for page generation;

 * @todo add phpdoc documentation for configuration array elements;

 * @todo	replace $_REQUEST with either $_GET or $_POST (or both if really

 * 			necessary) - #312  

 */



// If you need to use this installation with a configuration file outside the 

// installation directory uncomment the following line and adapt it to reflect 

// the (filesystem) path to where your configuration file is located.

// This would make it possible to store the configuration file outside of the

// webroot, or to share one configuration file between several Wikka Wiki

// installations.

// This replaces the use of the environment variable WAKKA_CONFIG for security

// reasons. [SEC]      

#if (!defined('WAKKA_CONFIG')) define('WAKKA_CONFIG','path/to/your/wikka.config.php');



if(!defined('ERROR_WAKKA_LIBRARY_MISSING')) define ('ERROR_WAKKA_LIBRARY_MISSING','The necessary file "libs/Wakka.class.php" could not be found. To run Wikka, please make sure the file exists and is placed in the right directory!');

if(!defined('ERROR_WRONG_PHP_VERSION')) define ('ERROR_WRONG_PHP_VERSION', '$_REQUEST[] not found. Wakka requires PHP 4.1.0 or higher!');

if(!defined('ERROR_SETUP_FILE_MISSING')) define ('ERROR_SETUP_FILE_MISSING', 'A file of the installer/ upgrader was not found. Please install Wikka again!');

if(!defined('ERROR_SETUP_HEADER_MISSING')) define ('ERROR_SETUP_HEADER_MISSING', 'The file "setup/header.php" was not found. Please install Wikka again!');

if(!defined('ERROR_SETUP_FOOTER_MISSING')) define ('ERROR_SETUP_FOOTER_MISSING', 'The file "setup/footer.php" was not found. Please install Wikka again!');

if(!defined('ERROR_NO_DB_ACCESS')) define ('ERROR_NO_DB_ACCESS', 'The wiki is currently unavailable. <br /><br />Error: Unable to connect to the MySQL database.');

if(!defined('PAGE_GENERATION_TIME')) define ('PAGE_GENERATION_TIME', 'Page was generated in %.4f seconds'); // %.4f - generation time in seconds with 4 digits after the dot   

if(!defined('WIKI_UPGRADE_NOTICE')) define ('WIKI_UPGRADE_NOTICE', 'This site is currently being upgraded. Please try again later.');



ob_start();



//error_reporting(E_ALL);

error_reporting (E_ALL ^ E_NOTICE);



/**

 * Defines the current Wikka version. Do not change the version number or you will have problems upgrading.

 */

if (!defined('WAKKA_VERSION')) define('WAKKA_VERSION', '1.1.6.3');

/**

 * Defines the default cookie name.

 */

if(!defined('BASIC_COOKIE_NAME')) define('BASIC_COOKIE_NAME', 'Wikkawiki');



/**

 * Calculate page generation time.

 */

function getmicrotime() {

	list($usec, $sec) = explode(" ", microtime());

	return ((float)$usec + (float)$sec);

}



// ... here comes the wikka specific stuff ...



// now comes s9y

chdir('/home/linuxblo/public_html/');

include('serendipity_config.inc.php');



// get the wikka output before it's sent

$wikka = ob_get_contents();

ob_end_clean();



// put the wikka output into a s9y template

chdir('/home/linuxblo/public_html/');

serendipity_smarty_init();

$serendipity['smarty']->assign('CONTENT', $wikka);

$serendipity['smarty']->display(serendipity_getTemplateFile('index.tpl', 'serendipityPath'));



$tstart = getmicrotime();



if ( ! function_exists("mysql_real_escape_string") )

{

/**

 * Escape special characters in a string for use in a SQL statement.

 * 

 * This function is added for back-compatibility with MySQL 3.23.

 * @param string $string the string to be escaped

 * @return string a string with special characters escaped

 */

	function mysql_real_escape_string($string)

	{

		return mysql_escape_string($string);

	}

}



/**

 * Include main library if it exists.

 * @see /libs/Wakka.class.php

 */

if (file_exists('libs/Wakka.class.php')) require_once('libs/Wakka.class.php');

else die(ERROR_WAKKA_LIBRARY_MISSING);



// stupid version check

if (!isset($_REQUEST)) die(ERROR_WRONG_PHP_VERSION); // TODO replace with php version_compare



/** 

 * Workaround for the amazingly annoying magic quotes.

 */

function magicQuotesWorkaround(&$a)

{

	if (is_array($a))

	{

		foreach ($a as $k => $v)

		{

			if (is_array($v))

				magicQuotesWorkaround($a[$k]);

			else

				$a[$k] = stripslashes($v);

		}

	}

}

set_magic_quotes_runtime(0);

if (get_magic_quotes_gpc())

{

	magicQuotesWorkaround($_POST);

	magicQuotesWorkaround($_GET);

	magicQuotesWorkaround($_COOKIE);

}



/**

 * Default configuration.

 */

// attempt to derive base URL fragments and whether rewrite mode is enabled (#438)

$t_domain	= $_SERVER['SERVER_NAME'];

$t_port		= $_SERVER['SERVER_PORT'] != 80 ? ':'.$_SERVER['SERVER_PORT'] : '';

$t_request = $_SERVER['REQUEST_URI'];

if (preg_match('@\.php$@', $t_request) && !preg_match('@wikka\.php$@', $t_request))

{

	$t_request = preg_replace('@/[^.]+\.php@', '/wikka.php', $t_request);	// handle "overridden" redirect from index.php (or plain wrong file name!)

}

if ( !preg_match('@wakka=@',$_SERVER['REQUEST_URI']) && isset($_SERVER['QUERY_STRING']) && preg_match('@wakka=@',$_SERVER['QUERY_STRING']))

{

	// looks like we got a rewritten request via .htaccess 

	$t_query = '';

	$t_request = preg_replace('@'.preg_quote('wikka.php').'@', '', $t_request);

	$t_rewrite_mode = 1;

}

else

{

	// no rewritten request apparent

	$t_query = '?wakka=';

	$t_rewrite_mode = 0;

}

$wakkaDefaultConfig = array(

	'mysql_host'				=> 'localhost',

	'mysql_database'			=> 'wikka',

	'mysql_user'				=> 'wikka',

	'table_prefix'			=> 'wikka_',



	'root_page'				=> 'HomePage',

	'wakka_name'				=> 'MyWikkaSite',

#	'base_url'				=> 'http://'.$_SERVER['SERVER_NAME'].($_SERVER['SERVER_PORT'] != 80 ? ':'.$_SERVER['SERVER_PORT'] : '').$_SERVER['REQUEST_URI'].(preg_match('/'.preg_quote('wikka.php').'$/', $_SERVER['REQUEST_URI']) ? '?wakka=' : ''),

#	'rewrite_mode'			=> (preg_match('/'.preg_quote('wikka.php').'$/', $_SERVER['REQUEST_URI']) ? '0' : '1'),

	'base_url'				=> 'http://'.$t_domain.$t_port.$t_request.$t_query,

	'rewrite_mode'			=> $t_rewrite_mode,

	'wiki_suffix'			=> '@wikka',



	'action_path'			=> 'actions',

	'handler_path'			=> 'handlers',

	'gui_editor'				=> '1',

	'stylesheet'				=> 'wikka.css',



	// formatter and code highlighting paths

	'wikka_formatter_path' 	=> 'formatters',		# (location of Wikka formatter - REQUIRED)

	'wikka_highlighters_path'	=> 'formatters',		# (location of Wikka code highlighters - REQUIRED)

	'geshi_path' 			=> '3rdparty/plugins/geshi',				# (location of GeSHi package)

	'geshi_languages_path' 	=> '3rdparty/plugins/geshi/geshi',		# (location of GeSHi language highlighting files)



	'header_action'			=> 'header',

	'footer_action'			=> 'footer',



	'navigation_links'		=> '[[CategoryCategory Categories]] :: PageIndex ::  RecentChanges :: RecentlyCommented :: [[UserSettings Login/Register]]',

	'logged_in_navigation_links' => '[[CategoryCategory Categories]] :: PageIndex :: RecentChanges :: RecentlyCommented :: [[UserSettings Change settings/Logout]]',



	'referrers_purge_time'	=> '30',

	'pages_purge_time'		=> '0',

	'xml_recent_changes'		=> '10',

	'hide_comments'			=> '0',

	'require_edit_note'		=> '0',		# edit note optional (0, default), edit note required (1) edit note disabled (2)

	'anony_delete_own_comments'	=> '1',

	'public_sysinfo'			=> '0',		# enable or disable public display of system information in SysInfo

	'double_doublequote_html'	=> 'safe',

	'external_link_tail' 		=> '<span class="exttail">∞</span>',

	'sql_debugging'			=> '0',

	'admin_users' 			=> '',

	'admin_email' 			=> '',

	'upload_path' 			=> 'uploads',

	'mime_types' 			=> 'mime_types.txt',



	// code hilighting with GeSHi

	'geshi_header'			=> 'div',				# 'div' (default) or 'pre' to surround code block

	'geshi_line_numbers'		=> '1',			# disable line numbers (0), or enable normal (1) or fancy line numbers (2)

	'geshi_tab_width'		=> '4',				# set tab width

	'grabcode_button'		=> '1',				# allow code block downloading



	'wikiping_server' 		=> '',



	'default_write_acl'		=> '+',

	'default_read_acl'		=> '*',

	'default_comment_acl'		=> '*');



// load config

$wakkaConfig = array();

if (file_exists("wakka.config.php")) rename("wakka.config.php", "wikka.config.php");

#if (!$configfile = GetEnv("WAKKA_CONFIG")) $configfile = "wikka.config.php";

if (defined('WAKKA_CONFIG'))	// use a define instead of GetEnv [SEC] 

{

	$configfile = WAKKA_CONFIG;

}

else

{

	$configfile = 'wikka.config.php';

}

if (file_exists($configfile)) include($configfile);



$wakkaConfigLocation = $configfile;

$wakkaConfig = array_merge($wakkaDefaultConfig, $wakkaConfig);



/**

 * Check for locking.

 */

if (file_exists('locked'))

{

	// read password from lockfile

	$lines = file("locked");

	$lockpw = trim($lines[0]);



	// is authentification given?

	if (isset($_SERVER["PHP_AUTH_USER"])) {

		if (!(($_SERVER["PHP_AUTH_USER"] == "admin") && ($_SERVER["PHP_AUTH_PW"] == $lockpw))) {

			$ask = 1;

		}

	} else {

		$ask = 1;

	}



	if ($ask) {

		header("WWW-Authenticate: Basic realm=\"".$wakkaConfig["wakka_name"]." Install/Upgrade Interface\"");

		header("HTTP/1.0 401 Unauthorized");

		print WIKI_UPGRADE_NOTICE;

		exit;

    }

}



/**

 * Compare versions, start installer if necessary.

 */

if (!isset($wakkaConfig["wakka_version"])) $wakkaConfig["wakka_version"] = 0;

if ($wakkaConfig["wakka_version"] !== WAKKA_VERSION)

{

	/**

	 * Start installer.

	 * 

	 * Data entered by the user is submitted in $_POST, next action for the

	 * installer (which will receive this data) is passed as a $_GET parameter!

	 */

	$installAction = 'default';

	#if (isset($_REQUEST['installAction'])) $installAction = trim($_REQUEST['installAction']);

	if (isset($_GET['installAction'])) $installAction = trim($_GET['installAction']);	#312

	if (file_exists('setup'.DIRECTORY_SEPARATOR.'header.php')) include('setup'.DIRECTORY_SEPARATOR.'header.php'); else print '<em>'.ERROR_SETUP_HEADER_MISSING.'</em>'; #89

	if (file_exists('setup'.DIRECTORY_SEPARATOR.$installAction.'.php')) include('setup'.DIRECTORY_SEPARATOR.$installAction.'.php'); else print '<em>'.ERROR_SETUP_FILE_MISSING.'</em>'; #89

	if (file_exists('setup'.DIRECTORY_SEPARATOR.'footer.php')) include('setup'.DIRECTORY_SEPARATOR.'footer.php'); else print '<em>'.ERROR_SETUP_FOOTER_MISSING.'</em>'; #89

	exit;

}



/**

 * Start session.

 */

session_name(md5(BASIC_COOKIE_NAME.$wakkaConfig['wiki_suffix']));

session_start();



// fetch wakka location

/**

 * Fetch wakka location (requested page + parameters)

 * 

 * @todo files action uses POST, everything else uses GET #312

 */

#$wakka = $_REQUEST["wakka"];

$wakka = $_GET['wakka']; #312



/**

 * Remove leading slash.

 */

$wakka = preg_replace("/^\//", "", $wakka);



/**

 * Split into page/method.

 * 

 * Note this splits at the FIRST / so $method may contain one or more slashes;

 * this is not allowed, and ultimately handled in the Method() method. [SEC]

 */

if (preg_match("#^(.+?)/(.*)$#", $wakka, $matches)) list(, $page, $method) = $matches;

else if (preg_match("#^(.*)$#", $wakka, $matches)) list(, $page) = $matches;

//Fix lowercase mod_rewrite bug: URL rewriting makes pagename lowercase. #135

if ((strtolower($page) == $page) && (isset($_SERVER['REQUEST_URI']))) #38

{

 $pattern = preg_quote($page, '/');

 if (preg_match("/($pattern)/i", urldecode($_SERVER['REQUEST_URI']), $match_url))

 {

  $page = $match_url[1];

 }

}



/**

 * Create Wakka object

 */

$wakka =& new Wakka($wakkaConfig);



/** 

 * Check for database access.

 */

if (!$wakka->dblink)

{

	echo '<em class="error">'.ERROR_NO_DB_ACCESS.'</em>';

      exit;

}





/** 

 * Run the engine.

 */

if (!isset($method)) $method='';

$wakka->Run($page, $method);

if (!preg_match("/(xml|raw|mm|grabcode)$/", $method))

{

	$tend = getmicrotime();

	//calculate the difference

	$totaltime = ($tend - $tstart);

	//output result

	print '<div class="smallprint">'.sprintf(PAGE_GENERATION_TIME, $totaltime)."</div>\n</body>\n</html>";

}



$content =  ob_get_contents();

/** 

 * Use gzip compression if possible.

 */

if ( isset($_SERVER['HTTP_ACCEPT_ENCODING']) && strstr ($_SERVER['HTTP_ACCEPT_ENCODING'], 'gzip') && function_exists('gzencode') ) #38

{

	// Tell the browser the content is compressed with gzip

	header ("Content-Encoding: gzip");

	$page_output = gzencode($content);

	$page_length = strlen($page_output);

} else {

	$page_output = $content;

	$page_length = strlen($page_output);

}



// header("Cache-Control: pre-check=0");

header("Cache-Control: no-cache");

// header("Pragma: ");

// header("Expires: ");



$etag =  md5($content);

header('ETag: '.$etag);



header('Content-Length: '.$page_length);

ob_end_clean();



/** 

 * Output the page.

 */

echo $page_output;

?>
So, thus far, after putting in your code to this file Garvin, it calls out that it cannot find the libs/ directory and can't find the setup/ directory which are called at the top of the file.

Just to see what would happen, I copied these two directories into s9y public_html (they're in public_html/wiki/) and the output was there! But, it was all the way under s9y footer AND it wasn't detecting that it had already been installed...it was attempting its installation routine again.

So, I'm awful close...but it seems the output is still not pulled into the page. I have considered that this might be a templating issue...I'm using Carl02 from Carl Galloway. If that's the case, just let me know and I'll attempt to hunt down how I can get it to display inside the right area.

Blog location: http://linux-blog.org
Wikka Location: http://linux-blog.org/wiki/HomePage

Posted: Tue Jan 22, 2008 11:48 am
by garvinhicking
Hi!

You need to put the s9y inclusion code at the bottom of your waka file, after waka has processed everything. s9y must be the last thing called before any content is displayed.

HTH,
Garvin