DokuWiki

It's better when it's simple

User Tools

Site Tools


plugin:pagespace

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
plugin:pagespace [2008-02-08 19:32] 196.1.53.29plugin:pagespace [2015-05-02 05:35] (current) – [Discussion] 24.214.43.25
Line 1: Line 1:
 +====== Pagespace Plugin ======
  
 +---- plugin ----
 +description: Additional syntax to allow a relative link to a namespace based on the current page name
 +author     : Symon Bent
 +email      : hendrybadao[at]gmail[dot]com
 +type       : Syntax
 +lastupdate : 2008-02-09
 +compatible : 2007-06-26b
 +depends    : 
 +conflicts 
 +similar    : 
 +tags       : links, namespace
 +----
 +
 +
 +====== Rationale ======
 +I love DokuWiki, and use it all the time both at work as a knowledge repository, and at home for my own thoughts and ideas.
 +The one thing I found a little tiresome was typing in long internal links; so I love the idea of relative links.  It makes it much easier to create clean clear namespace layouts.
 +
 +At present you can create the following relative links (if I've understood correctly...!):
 +  *To the root namespace
 +
 +  [[:new link]]
 +
 +  *To the parent namespace (back 2)
 +
 +  [[..:new link]]
 +
 +  *Or to the current namespace (back 1)
 +
 +  [[.:new link]]
 +
 +What I propose adding is a syntax to create a link to the //pagespace//, i.e. a namespace based on the current //page name//
 +
 +====== Syntax ======
 +Let's assume the current page name (top left in a standard DokuWiki installation) is as follows:
 +  [[plugin:pagespace]]
 +This means that the current namespace is //plugin// and the current page is //pagespace//
 +
 +Using the following syntax:
 +  [[@new link]]  or  [[@:new link]]
 +This link would be created:
 +  [[plugin:pagespace:new_link]]
 +
 +And that's basically all there is to it!
 +
 +====== Code ======
 +<code php>
 +<?php
 +if(!defined('DOKU_INC')) define('DOKU_INC',realpath(dirname(__FILE__).'/../../').'/');
 +if(!defined('DOKU_PLUGIN')) define('DOKU_PLUGIN',DOKU_INC.'lib/plugins/');
 +require_once(DOKU_PLUGIN.'syntax.php');
 + 
 +/** Creates a relative link to the current 'Pagespace'
 + i.e. a namespace based on current page name (page ID))
 + 
 +  To use:
 + 
 +  If current page name is: [[root:parent:current_page]]
 + 
 + then [[@:new page]] or [[@new page]]
 + 
 +  would result in the following link:
 + 
 +  [[root:parent:current_page:new_page]]
 + 
 +    License: GPL
 +  */
 +  
 +class syntax_plugin_pagespace extends DokuWiki_Syntax_Plugin {
 +  
 + function getInfo() {
 + return array('author' => 'Symon Bent',
 +                  'email'  => 'symonbent [at] gmail [dot-com]',
 +                  'name'   => 'pagespace',
 +                  'desc'   => "New syntax to allow a relative link to a namespace based on current page name, e.g. [[@:new page]]",
 +                  'url'    => '');
 + }
 +  
 +  function getType() {
 +    return 'substition';
 +  }
 +  
 + function getSort() {
 +     return 239;
 + }
 +
 + function connectTo($mode) {
 + $this->Lexer->addSpecialPattern("\[\[\@.+?\]\]",$mode,'plugin_pagespace');
 + }
 +
 + function handle($match, $state, $pos, &$handler) {
 +   //Swaps the @ symbol for the current page ID
 +   global $ID;
 + global $conf;
 +  
 + $pagespace = $ID;
 +   $link = $match;
 +
 + //Ignore the start (root) namespace
 + if ($pagespace == $conf['start']) {
 + $pagespace = '';
 + } else {
 + $pagespace .= ':';
 + }
 +
 + // Only replace an initial @ symbol, not elsewhere in link
 + $link = str_replace("[[@", "[[".$pagespace, $link);
 + dbglog($link);
 +
 +                // Strip the opening and closing markup
 +                $link = substr($link, 2, -2);
 +        
 +                // Split title from URL
 +                $link = preg_split('/\|/u', $link, 2);
 +                if ( !isset($link[1]) ) {
 +                    $link[1] = NULL;
 +                }
 +         return $link;
 + }
 +  
 + function render($mode, &$renderer, $data) {
 + if ($mode == 'xhtml') {
 + $renderer->internallink($data[0], $data[1]);
 + return true;
 + }
 + return false;
 + }
 +}
 +</code>
 +
 +====== History =====
 +
 +  *2008-01-15:  First release, warts and all!
 +  *2008-02-08:  Bug fix - plugin now adds nothing to root namespace, and fixed a little bug in render function
 +
 +====== Discussion ======
 +This is only my second plugin, the previous one has not been published (it was a adaption of the explain plugin which allowed the glossary to be a normal wiki page.  I found it very useful...anybody interested?)
 +
 +  * Yes! //--- hansbkk//
 +
 +> Okay, I'll make it available sometime.---//Symon 2011-11-22//
 +
 +I still have much to learn so any suggestions, improvements, and comments are most welcome.  Thanks to all the rest of you for sharing so generously!
 +
 +
 +  * Does it work with [[plugin:pagemove]]? //--- onn//
 +  * Does it work with recent versions of DW? //--- hansbkk//
 +
 +I really like the idea of using this as the "home page" for a namespace - with all implementations of hierarchical organisation, there's always the question "is the container **just** a container, or does it also have content?" IMO tools should let the user decide - give the rationale for a tag **in** the tag itself, let it **be** a glossary entry for example. Nice work, but please keep it up to date with the current stable release of DokuWiki and indicate such in the plugin page. . .
 +
 +> Time...wish I had more of it!  I haven't used it in a while so I do not know if it works on the new release.  I'll check though and provide a proper zip download once I get a moment.---//Symon 2011-11-22//
 +
 +Kewl, and know what you mean, low priority. In thinking about this, triggered again by [[http://www.digitalcure.org/projects/refactordw.html]] I'm thinking maybe it would be better to make /string2/$conf['start'].txt the "standard" place for an "about the namespace" page, or even /string1/string2/string2.txt, rather than /string1/string2.txt? Obviously you (used to?) do it the latter way, did you run into issues that made you change?
 +
 +I just wanted to add that this plugin seems to be working fine on Release 2014-09-29d "Hrun" and is EXACTLY what I was looking for and will save me a lot of little mistakes. For those unsure how to install manually, I saved the code above to a file called syntax.php and placed it in a folder I created "namespace" in the "lib/plugins" folder on the server. I'm new to DokuWiki myself but it seems to be working like a champ! //Cowboy 2015-05-01//

Except where otherwise noted, content on this wiki is licensed under the following license: CC Attribution-Share Alike 4.0 International
CC Attribution-Share Alike 4.0 International Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki