Skip to content

Commit

Permalink
Improved sidebar inclusion
Browse files Browse the repository at this point in the history
Template authors now can use tpl_sidebar() to include the sidebar.
Sidebars can be defined in subnamespaces as well
  • Loading branch information
splitbrain committed Jul 1, 2012
1 parent 65ee48a commit e66d3e6
Show file tree
Hide file tree
Showing 6 changed files with 119 additions and 3 deletions.
40 changes: 40 additions & 0 deletions _test/tests/inc/pageutils_findnearest.test.php
@@ -0,0 +1,40 @@
<?php

class pageutils_findnearest_test extends DokuWikiTest {
function testNoSidebar() {
global $ID;

$ID = 'foo:bar:baz:test';
$sidebar = page_findnearest('sidebar');
$this->assertEquals(false, $sidebar);
}

function testExistingSidebars() {
global $ID;

saveWikiText('sidebar', 'topsidebar-test', '');

$ID = 'foo:bar:baz:test';
$sidebar = page_findnearest('sidebar');
$this->assertEquals('sidebar', $sidebar);

$ID = 'foo';
$sidebar = page_findnearest('sidebar');
$this->assertEquals('sidebar', $sidebar);

saveWikiText('foo:bar:sidebar', 'bottomsidebar-test', '');

$ID = 'foo:bar:baz:test';
$sidebar = page_findnearest('sidebar');
$this->assertEquals('foo:bar:sidebar', $sidebar);

$ID = 'foo:bar:test';
$sidebar = page_findnearest('sidebar');
$this->assertEquals('foo:bar:sidebar', $sidebar);

$ID = 'foo';
$sidebar = page_findnearest('sidebar');
$this->assertEquals('sidebar', $sidebar);
}

}
40 changes: 40 additions & 0 deletions _test/tests/inc/template_sidebar.test.php
@@ -0,0 +1,40 @@
<?php

class template_sidebar_test extends DokuWikiTest {
function testNoSidebar() {
global $ID;

$ID = 'foo:bar:baz:test';
$sidebar = tpl_sidebar(false);
$this->assertEquals('',$sidebar);
}

function testExistingSidebars() {
global $ID;

saveWikiText('sidebar', 'topsidebar-test', '');

$ID = 'foo:bar:baz:test';
$sidebar = tpl_sidebar(false);
$this->assertTrue(strpos($sidebar, 'topsidebar-test') > 0);

$ID = 'foo';
$sidebar = tpl_sidebar(false);
$this->assertTrue(strpos($sidebar, 'topsidebar-test') > 0);

saveWikiText('foo:bar:sidebar', 'bottomsidebar-test', '');

$ID = 'foo:bar:baz:test';
$sidebar = tpl_sidebar(false);
$this->assertTrue(strpos($sidebar, 'bottomsidebar-test') > 0);

$ID = 'foo:bar:test';
$sidebar = tpl_sidebar(false);
$this->assertTrue(strpos($sidebar, 'bottomsidebar-test') > 0);

$ID = 'foo';
$sidebar = tpl_sidebar(false);
$this->assertTrue(strpos($sidebar, 'topsidebar-test') > 0);
}

}
24 changes: 24 additions & 0 deletions inc/pageutils.php
Expand Up @@ -622,3 +622,27 @@ function utf8_decodeFN($file){
return urldecode($file);
}

/**
* Find a page in the current namespace (determined from $ID) or any
* higher namespace
*
* Used for sidebars, but can be used other stuff as well
*
* @todo add event hook
* @param string $page the pagename you're looking for
* @return string|false the full page id of the found page, false if any
*/
function page_findnearest($page){
global $ID;

$ns = $ID;
do {
$ns = getNS($ns);
$pageid = ltrim("$ns:$page",':');
if(page_exists($pageid)){
return $pageid;
}
} while($ns);

return false;
}
12 changes: 12 additions & 0 deletions inc/template.php
Expand Up @@ -1394,6 +1394,18 @@ function tpl_include_page($pageid,$print=true){

if(!$print) return $html;
echo $html;
return $html;
}

/**
* Include the sidebar, will check current namespaces first
*/
function tpl_sidebar($print=true){
global $conf;

$sidebar = page_findnearest($conf['sidebar']);
if($sidebar) return tpl_include_page($sidebar, $print);
return '';
}

/**
Expand Down
2 changes: 1 addition & 1 deletion lib/tpl/dokuwiki/detail.php
Expand Up @@ -10,7 +10,7 @@
// must be run from within DokuWiki
if (!defined('DOKU_INC')) die();

$showSidebar = $conf['sidebar'] && page_exists($conf['sidebar']) && ($ACT=='show');
$showSidebar = page_findnearest($conf['sidebar']) && ($ACT=='show');
?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="<?php echo $conf['lang']?>"
Expand Down
4 changes: 2 additions & 2 deletions lib/tpl/dokuwiki/main.php
Expand Up @@ -10,7 +10,7 @@

if (!defined('DOKU_INC')) die(); /* must be run from within DokuWiki */

$showSidebar = $conf['sidebar'] && page_exists($conf['sidebar']) && ($ACT=='show');
$showSidebar = page_findnearest($conf['sidebar']) && ($ACT=='show');
?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="<?php echo $conf['lang'] ?>"
Expand Down Expand Up @@ -41,7 +41,7 @@ class="dokuwiki site mode_<?php echo $ACT ?> <?php echo ($showSidebar) ? 'hasSid
<div class="content">
<?php tpl_flush() ?>
<?php tpl_includeFile('sidebarheader.html') ?>
<?php tpl_include_page($conf['sidebar']) ?>
<?php tpl_sidebar() ?>
<?php tpl_includeFile('sidebarfooter.html') ?>
</div>
</div></div><!-- /aside -->
Expand Down

0 comments on commit e66d3e6

Please sign in to comment.