====== columns plugin ====== ---- plugin ---- description: Arrange information in multiple columns author : Michael Arlt email : michael.arlt@sk-schwanstetten.de type : syntax lastupdate : 2008-10-08 compatible : 2008-05-05 depends : conflicts : similar : tags : columns ---- ===== Description ===== You can arrange your information in multiple columns. Column breaks must be inserted manually. I use a table with one %%%% for each column. This worked best together with the S5 plugin from Andreas Gohr. ===== Syntax ===== Simply add two lines around your information and enter your column breaks. The first parameter is the width of the table. The following parameters are for the columns. If you do not want to specify a value for the table- or column-width use "-" instead. information in column 1 ~~NEWCOL~~ information in column 2 information in column 1 (50% width) ~~NEWCOL~~ information in column 2 ~~NEWCOL~~ information in column 3 ==== Columns2 Branch ==== The syntax is mostly identical to the original version, except that the new column keyword has to be specified within angle brackets((The syntax can be made fully compatible with the original version of plugin by un-checking "Wrap the new column tag" check box in the Configuration Settings.)): information in column 1 (50% width) information in column 2 information in column 3 By default the text in columns is justified. This can be changed by adding asterisks on either side of the column width specification. The asterisk indicates non-justified side of the text block, so to achieve left alignment add the asterisk on the right side. Justified text Aligned on the left side Center-aligned Aligned on the right side ===== Localisation ===== The keywords can be customized - see DokuWiki: administration -> configuration. ^Language ^Start ^End ^Next Column ^ |English | | |~~NEWCOL~~ | |German | | |~~NEUESPALTE~~ | |Spanish | | |~~NUEVACOLUMNA~~| $lang['kwcolumns'] $lang['kwnewcol'] ===== Download / Installation ===== Install the [[http://dwp-forge.googlecode.com/files/columns-2008-10-08.zip|current release]] with the plugin manager. Have a look at the DokuWiki plugin configuration. ^ 2008-10-08 | [[http://dwp-forge.googlecode.com/files/columns-2008-10-08.zip|Download]] | Columns2 branch | ^ 2008-09-29 | [[http://dwp-forge.googlecode.com/files/columns-2008-09-29.zip|Download]] | Columns2 branch | ^ 2007-10-22 | [[http://it-arlt.de/plugins/columns.zip|Download]] | Latest version of the original plugin by Michael Arlt | ===== Source Code ===== ==== syntax.php ==== * @version 2007-10-22 */ 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'); function td($tdwidth,$css) { if ($tdwidth == "-") { return ''; } else { return ''; } } /** * All DokuWiki plugins to extend the parser/rendering mechanism * need to inherit from this class */ class syntax_plugin_columns extends DokuWiki_Syntax_Plugin { /** * function constructor */ function syntax_plugin_columns(){ // enable direct access to language strings $this->setupLocale(); } /** * return some info */ function getInfo(){ return array( 'author' => 'Michael Arlt', 'email' => 'michael.arlt@sk-schwanstetten.de', 'date' => '2007-10-22', 'name' => 'columns Plugin', 'desc' => 'Arrange information in multiple columns', 'url' => 'http://www.dokuwiki.org/plugin:columns', ); } /** * What kind of syntax are we? */ function getType(){ return 'formatting'; } function getPType(){ return 'normal'; } /** * What modes are allowed within our mode? */ function getAllowedTypes() { return array('substition','protected','disabled','formatting'); } /** * Where to sort in? */ function getSort(){ return 1; } function connectTo($mode) { $kwcolumns=$this->getConf('kwcolumns'); if ($kwcolumns=="") { $kwcolumns=$this->lang["kwcolumns"]; }; $this->Lexer->addSpecialPattern('<'.$kwcolumns.'.*?>.*?',$mode,'plugin_columns'); } /** * Handle the match */ function handle($match, $state, $pos, &$handler) { $kwnewcol=$this->getConf('kwnewcol'); if ($kwnewcol=="") { $kwnewcol=$this->lang["kwnewcol"]; }; $kwcolumns=$this->getConf('kwcolumns'); if ($kwcolumns=="") { $kwcolumns=$this->lang["kwcolumns"]; }; $length=strlen($this->lang["kwcolumns"])+2; $end=strpos($match,">"); if($end > $length) { $width=preg_split('/ /',substr($match,$length,$end-$length)); } #$lines="$kwcolumns:$kwnewcol:".substr($match,$length,$end-$length).":"; $css1=$this->getConf('css1'); $css2=$this->getConf('css2'); $css3=$this->getConf('css3'); $lines.='1) # all other columns { $lines.=td($width[$column],$css2); $lines.= p_render('xhtml',p_get_instructions($oldcol),$info); } } $column++; $oldcol=$col; } $lines.=td($width[$column],$css3); $lines.= p_render('xhtml',p_get_instructions($oldcol),$info); # last column $lines.=''; return $lines; } /** * Create output */ function render($mode, &$renderer, $data) { if($mode == 'xhtml'){ $renderer->doc .= $data; return true; } return false; } } //Setup VIM: ex: et ts=4 enc=utf-8 : ===== Change History ===== ==== Columns2 Branch ==== === 2008-10-08 === * Added nesting support * Removed extra margin at the bottom of the columns block, which together with paragraph margin of the column content often caused double margin === 2008-09-29 === * Added Spanish localization (thanks to Digna González Otero) * Added Russian localization === 2008-09-14 === * Added extended syntax to specify text alignment in the columns * To make the syntax fully compatible with the original plugin, the angle brackets around the new column keyword can be disabled from the configuration manager === 2008-08-23 === * Fixed issue with the backlinks * Columns styling is moved from configuration to ''style.css'' file * Slightly different syntax: the new column keyword is wrapped in angle brackets (i.e. '' ... ... '') ==== 2007-10-22 ==== * First public release * All desired features of the author are implemented ===== Thanks to ... ===== Andreas Gohr for DokuWiki and now: S5! ===== License ===== This product is released under the [[http://www.gnu.org/licenses/gpl.html|GPL 2]] ===== Discussion ===== ==== Bugs ==== * The new release does not process headlines inside columns. e.g. the following code results on the plain ===== Headline =====: ===== Headline ===== nonono --- //[[rodrigor@rodrigor.com|Rodrigo Rebouças]] 2008/10/12 16:27// ---- I'm not sure it's a bug per definition. AFAIK, there is no error in the plugin that would cause it. It seems that DokuWiki has a limitation that doesn't allow to include headings into other modes. While the headings look like a nice feature at the first glance, there are number of questions that arise when you consider it in detail: * If there are two columns in a block and the first one uses heading, should the left margin associated with the heading level be applied also to the contents of the second column? * If there is a nested columns block in the first column, should the margin be applied to every nested column? * What about text after the columns block (out of plugin scope), should the margin be applied there? While you can come up with some answers to these questions, it seems to be too complicated and against the DokuWiki rules. So for now keep the headings out of columns. --- //[[spambox03@mail.ru|Mykola Ostrovskyy]] 2008/10/13 8:30// ---- >> I started using the 2007-10-22 release, now without problems with headings. You can see an example here: http://meninosdarede.org.br/site/ajude --- //[[rodrigor@rodrigor.com|Rodrigo Rebouças]] 2008/10/13 12:54// ---- \\ > While you can come up with some answers to these questions... So your answer is no margin. Works fine with your template but will look not so nice with the default one. The 2007-10-22 release also has a number of problems and I'm afraid it won't be easy to take best of both. Though, never say never. If more people will ask I might reconsider ;-) --- //[[spambox03@mail.ru|Mykola Ostrovskyy]] 2008/10/13 20:32// >> If it´s just a question of feedback: Enabling headings would be more as a nice feature. In future versions of DokuWiki you´ll have the same problem. Maybe margins for headings can be overwritten by your CSS. Mainly I think it´s a question of structuring the text optically -- so far I think your plugin is very very interesting! --- //[[none|Stefan]] 2008/12/28// ==== Nested Blocks ==== Nice plugin but could be awesome if you could use it in nested blocks. Thanks for your work :D. --- [[zeth_69@hotmail.com|Angelo Anfossi]] 2008/10/04 23:18 ---- If you mean "columns within columns", it's implemented in release of 2008-10-08. --- //[[spambox03@mail.ru|Mykola Ostrovskyy]] 2008/10/08 17:22// ---- ==== Alignment ==== Having poked at this for a few minutes, I don't believe what you're doing is ever going to produce the alignments you appear to be attempting to achieve. The default settings you add to the Config (local.php) have no alignment styling, at all, and the outputted HTML reflects this. The 0.5em padding assigned to CSS1, CSS2, and CSS3 are not going to produce actual alignments. It is certainly possible to achieve real alignments by editing the config and adding either a "textAlign:center", for instance, or a "text-Align:right". But then those alignments apply to all tables, throughout the entire wiki site, which is not the implied intent. I think that, to allow alignment to be applied to specific tables and columns, you need another layer of manipulation, which would append the appropriate textAlign property to the default style for the given "CSS" column type. The basic functionality works nicely (in the latest version, at least), though, so thank you for that --- //[[david.mcneill@ge.com|DGM2]] 2008/09/16 01:32// ---- I believe there is a bit of confusion here. The alignment feature has been added to the branched version (release 2008-09-14). The ''text-align'' is added to the table cell ''style'' attribute at the rendering time. Though, you seems to be talking about the original version of the plugin (the "current release" link up there). Unfortunately Michael doesn't have time at the moment to support the plugin (hence the branch) and the "current release" link is out of date. --- //[[spambox03@mail.ru|Mykola Ostrovskyy]] 2008/09/28 23:20// ---- ==== Basic Columns ==== It works if I put NEWCOL rather than ~~NEWCOL~~ (I got ~~ appearing as text). The default language is pt-br. // Please give me all information from both (the correct and incorrect) variants: What did you put in the configuration dialog? What do you put in the text? Please type the complete line with "$conf['plugin']['columns']['kwnewcol'] = ..." from your conf/local.php; // In the text information in column 1 (50% width) NEWCOL information in column 2 (15% width) NEWCOL information in column 3 In the configuration settings, I am going with the default (that is left blank). Check it at [[http://complex.if.uff.br/playground/playground|Playground]]. ---- The same here - NEWCOL works better - ~~ are not displayed. Language is: pl. The settings are default. //There is a small bug in .../columns/lang/en/lang.php - change line 10 from 'NEWCOL' to '~~NEWCOL~~' \\ Please tell me if the problem is fixed then. You can change it in the preferences too. If you enter ~~NEWCOL~~ it should work, too. \\ After this you must adjust your pages to the new pattern.// > backlinks simply do not work with those links that occure inside a column. The metadata is not updated, the references aren't detected during the rendering, I can't find the way to deal with the problem, did anyone experience this? I am running the latest version of DokuWiki. >Found a bug: when putting links to non-existing pages in one of the columns, the link is red ... no problem. But when you now click on it + create the page + go back to the page with the columns ... the link remains red. It only turns into the color of a valid pages //after// editing the page with the columns. I've just tested this on the playground-link provided in the first discussion comment in this page and it's the same there. In other words, not just because of my installation. Is it possible to give this some attention ... I plan on using this plugin heavily. //I don't have any idea to fix this. This maybe a problem because i do not understand all of DokuWiki which I use. Any help is welcome. Michael// >> this is just a caching issue and has nothing to do with the column plugin. Of course, the cache of the column page is not changed if a different (the target) page is edited or created >>> You'll notice that links on wiki pages are "updated" once a new page was created. To omit that in the column plugin you could use the following in your handler function: $renderer->info['cache'] = false; --- //[[chi@chimeric.de|Michael Klier]] 2008/03/13 11:58// >>>> Michael, I tried to solve this caching-issue using the way described by you above. Sadly it doesn't work. I tried to add the line in several different ways at several places in the code (although I assume it should be added to the method: function render($mode, &$renderer, $data) //before// the existing code), but nothing works. Can you maybe explain it a bit more or take a look at the code yourself? --- //[[mischa@the-evil.pointclark.net|Mischa The Evil]] 2008/04/16 23:30// >>>>> Same problem here. In addition, ~~NOCACHE~~ at top of the page doesn't help either.[[stinkywinky@gmx.net|StinkyWinky]] 2008/05/20 14:26 >>>>>> Please publish your code here (or on your own site), that makes it easier and quicker to review your code without having to go to the trouble of installing the plugin. --- //[[chris@jalakai.co.uk|Christopher Smith]] 2008/05/21 11:15// >>>>>>> [[#source_code|Here]] is the code ... If possible leave a hint using email... this will improve response time... //[[michael.arlt@sk-schwanstetten.de|Michael Arlt]] 2008/06/10 23:39// >>>>>>>> I would really like to use this plugin more but the cache issue and it having problems outputting properly formatted XHTML is worrisome - [[vtingey@msl.ubc.ca|Vince]] 2008/08/21 * The columns plugin is working unstable with [[plugin:indexmenu]]. Apache error_log message is shown as following. [client 220.130.131.238] PHP Fatal error: Allowed memory size of 16777216 bytes exhausted (tried to allocate 35 bytes) in /var/www/html/dev/inc/parser/parser.php on line 98, referrer: http://www.everplast.net/dev/everplast/reinforcedhose/video?do=edit&rev= After tracing the source code, I guess the error could be from that parser cannot found end tag. Does anyone have workaround solution or patch code? --- //[[tryweb@ichiayi.com|Jonathan Tsai]] 2008/07/11 09:26// >This is not an error of DokuWiki or the Columns plugin. It is an error caused by the PHP-configuration. Your PHP-setup is limited to use not more then 16MB of memory. This error shows you that the limit has been reached. >See the [[http://nl3.php.net/manual/en/ini.core.php#ini.memory-limit|PHP manual]] for more info about the related configuration-directive (//''memory_limit''//). > --- //[[mischa_the_evil@hotmail.com|Mischa The Evil]] 2008/07/12 05:21// >> Actually, the problem is no more appearing after using columns-2008-09-14 branch version. Thanks a lot! >> --- //[[tryweb@ichiayi.com|Jonathan Tsai]] 2008/09/14 22:18// In release 2008-09-14 the backlinks works and the caching issue has gone! Many thanks to Mykola Ostrovskyy! [[stinkywinky@gmx.net|StinkyWinky]] 2008/09/19 07:59 Is it possible to vertically-align content in the columns? Any tips please email me :) laurence dot diver at gmail dot com --- //[[laurence.diver@gmail.com|Laurence]] 2008/10/30 14:49// ===== Language Files ===== ==== Spanish ==== === lang.php === */ $lang['kwcolumns'] = 'columnas'; // define the wiki syntax keywords $lang['kwnewcol'] = 'NUEVACOLUMNA'; // define the wiki syntax keywords //Setup VIM: ex: et ts=4 enc=utf-8 : ?> === settings.php === */ $lang['css1'] = 'Atributos CSS de la primera columna'; $lang['css2'] = 'Atributos CSS del resto de las columnas'; $lang['css3'] = 'Atributos CSS de la última columna'; $lang['kwcolumns'] = 'Patrón de reconocimiento de DokuWiki (por defecto: columnas) - Se debe especificar en la página wiki con <palabra>...</palabra>'; $lang['kwnewcol'] = 'Patrón de nueva columna de DokuWiki (por defecto: ~~NUEVACOLUMNA~~)'; //Setup VIM: ex: et ts=2 enc=utf-8 : ?>