alphaindex plugin by Hubert Molière
Allows you to insert the alphabetical index of a namespace in a page
Last updated on 2008-10-28. Provides Syntax.
No compatibility info given!
Similar to indexmenu, indexmenu2.
This simple plugin allows you to insert an alphabetical index of a specified namespace in your pages. It should be useful in Dokuwiki sites where pages are organized by namespaces.
It is fully inspired and based on the indexmenu plugin by Samuele Tognini samuele@netsons.org.
{{alphaindex>[namespace][#n][|nons]}}
[namespace] | Namespace name from which the index starts. | optional with [n] or nons; “.” is the current namespace; “..” or an empty value shows the top level namespace. |
|---|---|---|
[n] | Number that specifies the max level of the tree index nodes. | optional; it can be used together with nons. |
nons | Exclude namespaces nodes from index. It shows only the pages | optional. |
Example that displays only pages inside wiki:plugins and lower namespaces (max two levels):
{{alphaindex>wiki:plugins#2|nons}}
All the data displayed by the alphaindex plugin are inside a div (called “alphaindex”).
You can customize each part of the generated code.
For example if you have defined the begin_letter_tpl as this :
==== {{letter}} ====
the plugin will generate the following html code :
<h3><a name="a" id="a">{{letter}}</a></h3>
and you can create the following css rule (for example) :
#alphaindex h3{ display: block; background-color: #dee7ec; padding: 2px 0 2px 10px; margin: 20px 0 5px 0; }
Optional config option in conf/local.protected.php:
$conf['plugin']['alphaindex']['numerical_index'] = '0-9'; $conf['plugin']['alphaindex']['articles_deletion'] = '^the +|^a +|^an +'; $conf['plugin']['alphaindex']['articles_moving'] = 1; $conf['plugin']['alphaindex']['empty_msg'] = 'No pages'; $conf['plugin']['alphaindex']['title_tpl'] = '===== Alphabetical index ====='; $conf['plugin']['alphaindex']['begin_letter_tpl'] = '**{{letter}}**'; $conf['plugin']['alphaindex']['entry_tpl'] = ' * [[{{link}}|{{name}}]]'; $conf['plugin']['alphaindex']['end_letter_tpl'] = ''; $conf['plugin']['alphaindex']['hidepages'] = 'start|sidebar';
Text display in block letter title for the page title beginning with a numerical value.
Optional
Default : '0-9'
Example : 'Numerical'
List of article treated by the plugin. Each article is separated with a '|'.
Optional
Default : (empty)
Example : ^the +|^a +|^an + or ^le +|^la +|^les +|^l\' * (in french)
With the example above, the page 'The Rolling Stones' will be treated as 'Rolling Stones' instead of its real name.
Management of the articles when the article_deletion option is active.
Optional
Default : 1
Authorized values :
Example: with the pagename 'The Rolling Stones'
Message shown in your page when the index is empty.
Note : {{ns}} is an alias for the requested namespace.
Optionnal
Default : 'No index for <b>{{ns}}</b>'
Template (in dokuwiki syntax) for the index title.
Optionnal
Default : '===== Index ====='
Template (in dokuwiki syntax) at the beginning of each letter's blok.
Note : the {{letter}} pattern is mandatory. It's an alias for the current letter.
Optionnal
Default : '==== {{letter}} ===='
Template (in dokuwiki syntax) for each letter's entry.
Note : the {{link}} and {{name}} patterns are mandatory.They are aliases for the page link and the page name.
Optionnal
Default : ' * [[{{link}}|{{name}}]]'
Template (in dokuwiki syntax) at the end of each letter's block.
Optionnal
Default : (empty)
Name of pages not displayed in the index. Each page name is separated with a '|'.
Optionnal
Default : (empty)
Example : 'start|sidebar'
Download the zip file (3k) and unpack it into lib/plugins folder or use the plugin_manager.
Create the folder alphaindex in dokuwiki /lib/plugins directory. Then create the file syntax.php in this folder 1) and paste in it this code:
/** * Info Alphaindex: Displays the alphabetical index of a specified namespace. * * Version: 1.2 * last modified: 2006-06-14 12:00:00 * @license GPL 2 (http://www.gnu.org/licenses/gpl.html) * @author Hubert Molière <hubert.moliere@alternet.fr> */ /** * Configuration additionnelle spécifique au plugin * * - $conf['plugin']['alphaindex']['numerical_index'] * - $conf['plugin']['alphaindex']['articles_deletion'] * - $conf['plugin']['alphaindex']['articles_moving'] * - $conf['plugin']['alphaindex']['empty_msg'] * - $conf['plugin']['alphaindex']['title_tpl'] * - $conf['plugin']['alphaindex']['begin_letter_tpl'] * - $conf['plugin']['alphaindex']['entry_tpl'] * - $conf['plugin']['alphaindex']['end_letter_tpl'] * - $conf['plugin']['alphaindex']['hidepages'] * */ 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'); require_once(DOKU_INC.'inc/search.php'); /** * All DokuWiki plugins to extend the parser/rendering mechanism * need to inherit from this class */ class syntax_plugin_alphaindex extends DokuWiki_Syntax_Plugin { /** * return some info */ function getInfo(){ return array( 'author' => 'Hubert Moliere', 'email' => 'takashi@natural-design.net', 'date' => '2006-06-14', 'name' => 'Alphaindex', 'desc' => 'Insert the alphabetical index of a specified namespace.', 'url' => 'http://www.dokuwiki.org/plugin:alphaindex' ); } function getType(){ return 'substition';} function getAllowedTypes() { return array('baseonly', 'substition', 'formatting', 'paragraphs', 'protected'); } /** * Where to sort in? */ function getSort(){ return 139; } /** * Connect pattern to lexer */ function connectTo($mode) { $this->Lexer->addSpecialPattern('{{alphaindex>.+?}}',$mode,'plugin_alphaindex'); } /** * Handle the match */ function handle($match, $state, $pos, &$handler){ $level = 0; $nons = true; $match = substr($match,12,-2); //split namespaces $match = preg_split('/\|/u', $match, 2); //split level $ns_opt = preg_split('/\#/u', $match[0], 2); //namespace name $ns = $ns_opt[0]; //level; if (is_numeric($ns_opt[1])) { $level=$ns_opt[1]; } $match = explode(" ", $match[1]); // namespaces option $nons = in_array('nons', $match); // multi-columns option $incol = in_array('incol', $match); return array($ns,array('level' => $level,'nons' => $nons,'incol' => $incol)); } /** * Render output */ function render($mode, &$renderer, $data) { global $conf; if($mode == 'xhtml'){ $alpha_data = $this->_alpha_index($data, $renderer); if ((!@$n)) { if (isset ($conf['plugin']['alphaindex']['empty_msg'])) { $n = $conf['plugin_alphaindex']['empty_msg']; } else { $n = 'No index for <b>{{ns}}</b>'; } } $alpha_data = str_replace('{{ns}}',cleanID($data[0]),$alpha_data); $alpha_data = p_render('xhtml', p_get_instructions($alpha_data), $info); // remove toc, section edit buttons and category tags $patterns = array('!<div class="toc">.*?(</div>\n</div>)!s', '#<!-- SECTION \[(\d*-\d*)\] -->#e', '!<div class="category">.*?</div>!s'); $replace = array('','',''); $alpha_data = preg_replace($patterns, $replace, $alpha_data); $renderer->doc .= '<div id="alphaindex">' ; $renderer->doc .= $ns_data; $renderer->doc .= '<hr />'; $renderer->doc .= $alpha_data; $renderer->doc .= '</div>' ; return true; } return false; } /** * Return the alphabetical index * @author Hubert MOLIERE <hubert.moliere@alternet.fr> * * This function is a hack of Indexmenu _tree_menu($ns) * @author Samuele Tognini <samuele@netsons.org> * * This function is a simple hack of Dokuwiki html_index($ns) * @author Andreas Gohr <andi@splitbrain.org> */ function _alpha_index($myns, &$renderer) { global $conf; global $ID; $ns = $myns[0]; $opts = $myns[1]; // Articles deletion configuration $articlesDeletionPatterns = array(); if(isset($conf['plugin']['alphaindex']['articles_deletion'])) { $articlesDeletionPatterns = explode('|', $conf['plugin']['alphaindex']['articles_deletion']); $articlesDeletion = true; } else { $articlesDeletion = false; } // Hide pages configuration $hidepages = array(); if(isset($conf['plugin']['alphaindex']['hidepages'])) { $hidepages = explode('|', $conf['plugin']['alphaindex']['hidepages']); } // template configuration if(isset($conf['plugin']['alphaindex']['title_tpl'])) { $titleTpl = $conf['plugin']['alphaindex']['title_tpl']; } else { $titleTpl = '===== Index ====='; } if(isset($conf['plugin']['alphaindex']['begin_letter_tpl'])) { $beginLetterTpl = $conf['plugin']['alphaindex']['begin_letter_tpl']; } else { $beginLetterTpl = '==== {{letter}} ===='; } if(isset($conf['plugin']['alphaindex']['entry_tpl'])) { $entryTpl = $conf['plugin']['alphaindex']['entry_tpl']; } else { $entryTpl = ' * [[{{link}}|{{name}}]]'; } if(isset($conf['plugin']['alphaindex']['end_letter_tpl'])) { $endLetterTpl = $conf['plugin']['alphaindex']['end_letter_tpl']; } else { $endLetterTpl = ''; } if($ns == '.') { $ns = dirname(str_replace(':','/',$ID)); if ($ns == '.') $ns = ''; } else { $ns = cleanID($ns); } $ns = utf8_encodeFN(str_replace(':','/',$ns)); $data = array(); search($data,$conf['datadir'],'alphaindex_search_index',$opts,"/".$ns); $nb_data = count($data); $alpha_data = array(); // alphabetical ordering for($cpt=0; $cpt<$nb_data; $cpt++) { $tmpData = $data[$cpt]['id']; $pos = strrpos(utf8_decode($tmpData), ':'); if($conf['useheading']) { $pageName = p_get_first_heading($tmpData); if($pageName == NULL) { if($pos != FALSE) { $pageName = utf8_substr($tmpData, $pos+1, utf8_strlen($tmpData)); } else { $pageName = $tmpData; } $pageName = utf8_str_replace('_', ' ', $pageName); } } else { if($pos != FALSE) { $pageName = utf8_substr($tmpData, $pos+1, utf8_strlen($tmpData)); } else { $pageName = $tmpData; } $pageName = utf8_str_replace('_', ' ', $pageName); } $pageNameArticle = ''; // if the current page is not a page to hide if(!in_array($pageName, $hidepages)) { // Articles deletion if($articlesDeletion) { foreach($articlesDeletionPatterns as $pattern) { if(eregi($pattern, $pageName, $result)) { $pageName = eregi_replace($pattern, '', $pageName); $pageNameArticle = ucfirst(trim($result[0])); } } } // Récupération de la première lettre du mot et classement $firstLetter = utf8_deaccent(utf8_strtolower(utf8_substr($pageName, 0, 1))); if(is_numeric($firstLetter)) { if(isset($conf['plugin']['alphaindex']['numerical_index'])) { $firstLetter = $conf['plugin']['alphaindex']['numerical_index']; } else { $firstLetter = '0-9'; } } if(isset($conf['plugin']['alphaindex']['article_moving'])) { $articleMoving = $conf['plugin']['alphaindex']['article_moving']; } else { $articleMoving = 1; } if($articleMoving == 0) { $pageName = $pageNameArticle.' '.$pageName; } else if (($articleMoving == 1)&&($pageNameArticle != '')) { $pageName = $pageName.' ('.$pageNameArticle.')'; } $data[$cpt]['id2'] = ucfirst($pageName); $alpha_data[$firstLetter][] = $data[$cpt]; } } // array sorting by key ksort($alpha_data); // Display of results // alphabetical index $alphaOutput .= $titleTpl."\n"; $nb_data = count($alpha_data); foreach($alpha_data as $key => $currentLetter) { // Sorting of $currentLetter array usort($currentLetter, create_function('$a, $b', "return strnatcasecmp(\$a['id2'], \$b['id2']);")); $begin = utf8_str_replace("{{letter}}" ,utf8_strtoupper($key), $beginLetterTpl); $alphaOutput .= $begin."\n"; foreach($currentLetter as $currentLetterEntry) { $link = utf8_str_replace("{{link}}" ,$currentLetterEntry['id'], $entryTpl); $alphaOutput .= utf8_str_replace("{{name}}" ,$currentLetterEntry['id2'], $link); $alphaOutput .= "\n"; } $end = utf8_str_replace("{{letter}}" ,utf8_strtoupper($key), $endLetterTpl); $alphaOutput .= $end."\n"; } return $alphaOutput; } } //Alphaindex class end /** * Build the browsable index of pages * * $opts['ns'] is the current namespace * * @author Andreas Gohr <andi@splitbrain.org> * modified by Samuele Tognini <samuele@netsons.org> */ function alphaindex_search_index(&$data,$base,$file,$type,$lvl,$opts){ $return = true; $item = array(); if($type == 'd'){ if ($opts['level'] == $lvl) $return=false; if ($opts['nons']) return $return; }elseif($type == 'f' && !preg_match('#\.txt$#',$file)){ //don't add return false; } $id = pathID($file); //check hidden if($type=='f' && isHiddenPage($id)){ return false; } //check ACL if($type=='f' && auth_quickaclcheck($id) < AUTH_READ){ return false; } //Set all pages at first level if ($opts['nons']) { $lvl=1; } $data[]=array( 'id' => $id, 'type' => $type, 'level' => $lvl, 'open' => $return ); return $return; }
* To use the UTF8 functions instead of classic php ones for characters and strings management.
* What's about an update to do Configuration via the Admin-panel?
* And what's about a RegEx for hidepages?
— Samuele Tognini 2006-05-25 03:08
Corrected in 1.2 version — Takashi 2006-06-14 10:16
ucfirst calls to UTF8-safe code. For example, utf8_strtoupper(utf8_substr($string, 0, 1)).utf8_substr($string, 1). Otherwise non-latin page titles (cyrillic in my case) displays corrupted. Sorry for my bad english.— David Mzareulyan 2007-03-08 18:30
$match = substr($match,12,-2);
of alphaindex/syntax.php should be:
$match = substr($match,13,-2);
— Thanos Massias 2007-06-21 11:10
$match = substr($match,12,-2);
should be
$match = substr($match,13,-2);
— Ben Slusky 2007-11-11 02:40
Odd error
I just installed the plugin, and I'm getting this error:
Fatal error: Call to undefined function utf8_str_replace() in /var/www/wiki/lib/plugins/alphaindex/syntax.php on line 216
Juice 2008/06/02
--- syntax.php 2006-06-14 10:30:44.000000000 +0200 +++ ../../../../plugins/alphaindex/syntax.php 2008-08-11 15:48:02.000000000 +0200 @@ -205,7 +205,7 @@ } else { $pageName = $tmpData; } - $pageName = utf8_str_replace('_', ' ', $pageName); + $pageName = str_replace('_', ' ', $pageName); } } else { if($pos != FALSE) { @@ -213,7 +213,7 @@ } else { $pageName = $tmpData; } - $pageName = utf8_str_replace('_', ' ', $pageName); + $pageName = str_replace('_', ' ', $pageName); } $pageNameArticle = ''; @@ -228,6 +228,13 @@ } } } + + if(isset($conf['plugin']['alphaindex']['metadata_title'])) { + $tmp = p_get_metadata($data[$cpt]['id']); + if(isset($tmp['title'])) + $pageName = $tmp['title']; + } + // Récupération de la première lettre du mot et classement $firstLetter = utf8_deaccent(utf8_strtolower(utf8_substr($pageName, 0, 1))); if(is_numeric($firstLetter)) { @@ -266,14 +273,14 @@ // Sorting of $currentLetter array usort($currentLetter, create_function('$a, $b', "return strnatcasecmp(\$a['id2'], \$b['id2']);")); - $begin = utf8_str_replace("{{letter}}" ,utf8_strtoupper($key), $beginLetterTpl); + $begin = str_replace("{{letter}}" ,utf8_strtoupper($key), $beginLetterTpl); $alphaOutput .= $begin."\n"; foreach($currentLetter as $currentLetterEntry) { - $link = utf8_str_replace("{{link}}" ,$currentLetterEntry['id'], $entryTpl); - $alphaOutput .= utf8_str_replace("{{name}}" ,$currentLetterEntry['id2'], $link); + $link = str_replace("{{link}}" ,$currentLetterEntry['id'], $entryTpl); + $alphaOutput .= str_replace("{{name}}" ,$currentLetterEntry['id2'], $link); $alphaOutput .= "\n"; } - $end = utf8_str_replace("{{letter}}" ,utf8_strtoupper($key), $endLetterTpl); + $end = str_replace("{{letter}}" ,utf8_strtoupper($key), $endLetterTpl); $alphaOutput .= $end."\n"; } @@ -327,4 +334,4 @@ return $return; } -?> \ Pas de fin de ligne à la fin du fichier. +?>
2008-08-31
There is a patch which :
utf8_str_replace by str_replace by Juice.match(12 to match(13 issue rise by Thanos.@NS@ support from Thanos.useheading option, by Nicolas.And…
hidepages and useheading option.I test it on the release 2008-05-05.
diff -Naur alphaindex_orig/syntax.php alphaindex/syntax.php --- alphaindex_orig/syntax.php 2006-06-14 10:30:44.000000000 +0200 +++ alphaindex/syntax.php 2008-08-31 19:44:35.000000000 +0200 @@ -1,21 +1,21 @@ <?php /** - * Info Alphaindex: Displays the alphabetical index of a specified namespace. + * Info Alphaindex: Displays the alphabetical index of a specified namespace. * - * Version: 1.2 - * last modified: 2006-06-14 12:00:00 + * Version: 1.3 + * last modified: 2008-08-31 * @license GPL 2 (http://www.gnu.org/licenses/gpl.html) - * @author Hubert Moli?re <hubert.moliere@alternet.fr> + * @author Hubert Moli?re <hubert.moliere@alternet.fr> */ - + /** - * Configuration additionnelle sp?cifique au plugin + * Configuration additionnelle sp?cifique au plugin * * - $conf['plugin']['alphaindex']['numerical_index'] * - $conf['plugin']['alphaindex']['articles_deletion'] - * - $conf['plugin']['alphaindex']['articles_moving'] + * - $conf['plugin']['alphaindex']['articles_moving'] * - $conf['plugin']['alphaindex']['empty_msg'] - * - $conf['plugin']['alphaindex']['title_tpl'] + * - $conf['plugin']['alphaindex']['title_tpl'] * - $conf['plugin']['alphaindex']['begin_letter_tpl'] * - $conf['plugin']['alphaindex']['entry_tpl'] * - $conf['plugin']['alphaindex']['end_letter_tpl'] @@ -27,13 +27,13 @@ if(!defined('DOKU_PLUGIN')) define('DOKU_PLUGIN',DOKU_INC.'lib/plugins/'); require_once(DOKU_PLUGIN.'syntax.php'); require_once(DOKU_INC.'inc/search.php'); - + /** * All DokuWiki plugins to extend the parser/rendering mechanism * need to inherit from this class */ class syntax_plugin_alphaindex extends DokuWiki_Syntax_Plugin { - + /** * return some info */ @@ -41,61 +41,88 @@ return array( 'author' => 'Hubert Moliere', 'email' => 'takashi@natural-design.net', - 'date' => '2006-06-14', + 'date' => '2008-08-31', 'name' => 'Alphaindex', 'desc' => 'Insert the alphabetical index of a specified namespace.', 'url' => 'http://wiki.splitbrain.org/plugin:alphaindex' ); } - + function getType(){ return 'substition';} function getAllowedTypes() { return array('baseonly', 'substition', 'formatting', 'paragraphs', 'protected'); } - + /** * Where to sort in? */ function getSort(){ return 139; } - + /** * Connect pattern to lexer */ function connectTo($mode) { $this->Lexer->addSpecialPattern('{{alphaindex>.+?}}',$mode,'plugin_alphaindex'); } - + /** * Handle the match */ function handle($match, $state, $pos, &$handler){ + global $ID; + $level = 0; $nons = true; - $match = substr($match,12,-2); + $match = substr($match,13,-2); //split namespaces $match = preg_split('/\|/u', $match, 2); //split level $ns_opt = preg_split('/\#/u', $match[0], 2); //namespace name $ns = $ns_opt[0]; + // add @NS@ option + if(empty($ns) || $ns == '@NS@') { + $pos = strrpos($ID,':'); + if($pos!=false){ + $ns = substr($ID,0,$pos); + }else{ + $ns = '.'; + } + } //level; if (is_numeric($ns_opt[1])) { $level=$ns_opt[1]; } $match = explode(" ", $match[1]); - // namespaces option + // namespaces option $nons = in_array('nons', $match); // multi-columns option $incol = in_array('incol', $match); return array($ns,array('level' => $level,'nons' => $nons,'incol' => $incol)); } - + /** * Render output */ function render($mode, &$renderer, $data) { + global $ID; global $conf; - if($mode == 'xhtml'){ + + if($mode == 'xhtml'){ + // Never cache to get fresh info + $renderer->info['cache'] = false; + // Remove Section Edit Buttons + $oldmaxecl = $conf['maxseclevel']; + $conf['maxseclevel'] = 0; + // To see the TOC, to not use ~~NOTOC~~ + if ($renderer->info['toc']) { + $oldmaxtoc = $conf['maxtoclevel']; + $conf['maxtoclevel'] = 3; + } + else { + $oldmaxtoc = -1; + } + $alpha_data = $this->_alpha_index($data, $renderer); if ((!@$n)) { if (isset ($conf['plugin']['alphaindex']['empty_msg'])) { @@ -106,31 +133,28 @@ } $alpha_data = str_replace('{{ns}}',cleanID($data[0]),$alpha_data); - $alpha_data = p_render('xhtml', p_get_instructions($alpha_data), $info); - - // remove toc, section edit buttons and category tags - $patterns = array('!<div class="toc">.*?(</div>\n</div>)!s', - '#<!-- SECTION \[(\d*-\d*)\] -->#e', - '!<div class="category">.*?</div>!s'); - $replace = array('','',''); - $alpha_data = preg_replace($patterns, $replace, $alpha_data); + $alpha_data = p_render('xhtml', p_get_instructions($alpha_data), $info); + $renderer->doc .= '<div id="alphaindex">' ; $renderer->doc .= $ns_data; $renderer->doc .= '<hr />'; $renderer->doc .= $alpha_data; $renderer->doc .= '</div>' ; + + $conf['maxseclevel'] = $oldmaxecl; + if ( $oldmaxtoc == -1 ) $conf['maxtoclevel'] = $oldmaxtoc; return true; } return false; } /** - * Return the alphabetical index + * Return the alphabetical index * @author Hubert MOLIERE <hubert.moliere@alternet.fr> * * This function is a hack of Indexmenu _tree_menu($ns) * @author Samuele Tognini <samuele@netsons.org> - * + * * This function is a simple hack of Dokuwiki html_index($ns) * @author Andreas Gohr <andi@splitbrain.org> */ @@ -138,9 +162,9 @@ global $conf; global $ID; - $ns = $myns[0]; + $ns = $myns[0]; $opts = $myns[1]; - + // Articles deletion configuration $articlesDeletionPatterns = array(); if(isset($conf['plugin']['alphaindex']['articles_deletion'])) { @@ -149,13 +173,13 @@ } else { $articlesDeletion = false; } - + // Hide pages configuration $hidepages = array(); if(isset($conf['plugin']['alphaindex']['hidepages'])) { $hidepages = explode('|', $conf['plugin']['alphaindex']['hidepages']); } - + // template configuration if(isset($conf['plugin']['alphaindex']['title_tpl'])) { $titleTpl = $conf['plugin']['alphaindex']['title_tpl']; @@ -177,25 +201,25 @@ } else { $endLetterTpl = ''; } - + if($ns == '.') { $ns = dirname(str_replace(':','/',$ID)); if ($ns == '.') $ns = ''; } else { $ns = cleanID($ns); } - + $ns = utf8_encodeFN(str_replace(':','/',$ns)); $data = array(); search($data,$conf['datadir'],'alphaindex_search_index',$opts,"/".$ns); - + $nb_data = count($data); $alpha_data = array(); - + // alphabetical ordering for($cpt=0; $cpt<$nb_data; $cpt++) { $tmpData = $data[$cpt]['id']; - + $pos = strrpos(utf8_decode($tmpData), ':'); if($conf['useheading']) { $pageName = p_get_first_heading($tmpData); @@ -205,7 +229,7 @@ } else { $pageName = $tmpData; } - $pageName = utf8_str_replace('_', ' ', $pageName); + $pageName = str_replace('_', ' ', $pageName); } } else { if($pos != FALSE) { @@ -213,14 +237,21 @@ } else { $pageName = $tmpData; } - $pageName = utf8_str_replace('_', ' ', $pageName); + $pageName = str_replace('_', ' ', $pageName); } $pageNameArticle = ''; - - // if the current page is not a page to hide - if(!in_array($pageName, $hidepages)) { + + // Otherwise,hhidepages doesn't work with useheading + if($pos != FALSE) { + $pageNameNS = utf8_substr($tmpData, $pos+1, utf8_strlen($tmpData)); + } else { + $pageNameNS = $tmpData; + } + + // if the current page is not a page to hide + if(!in_array($pageNameNS, $hidepages)) { // Articles deletion - if($articlesDeletion) { + if($articlesDeletion) { foreach($articlesDeletionPatterns as $pattern) { if(eregi($pattern, $pageName, $result)) { $pageName = eregi_replace($pattern, '', $pageName); @@ -228,7 +259,14 @@ } } } - // R?cup?ration de la premi?re lettre du mot et classement + + if(isset($conf['plugin']['alphaindex']['metadata_title'])) { + $tmp = p_get_metadata($data[$cpt]['id']); + if(isset($tmp['title'])) + $pageName = $tmp['title']; + } + + // R?cup?ration de la premi?re lettre du mot et classement $firstLetter = utf8_deaccent(utf8_strtolower(utf8_substr($pageName, 0, 1))); if(is_numeric($firstLetter)) { if(isset($conf['plugin']['alphaindex']['numerical_index'])) { @@ -237,7 +275,7 @@ $firstLetter = '0-9'; } } - + if(isset($conf['plugin']['alphaindex']['article_moving'])) { $articleMoving = $conf['plugin']['alphaindex']['article_moving']; } else { @@ -248,38 +286,38 @@ } else if (($articleMoving == 1)&&($pageNameArticle != '')) { $pageName = $pageName.' ('.$pageNameArticle.')'; } - + $data[$cpt]['id2'] = ucfirst($pageName); $alpha_data[$firstLetter][] = $data[$cpt]; } } - + // array sorting by key ksort($alpha_data); - + // Display of results - + // alphabetical index $alphaOutput .= $titleTpl."\n"; $nb_data = count($alpha_data); foreach($alpha_data as $key => $currentLetter) { // Sorting of $currentLetter array usort($currentLetter, create_function('$a, $b', "return strnatcasecmp(\$a['id2'], \$b['id2']);")); - - $begin = utf8_str_replace("{{letter}}" ,utf8_strtoupper($key), $beginLetterTpl); + + $begin = str_replace("{{letter}}" ,utf8_strtoupper($key), $beginLetterTpl); $alphaOutput .= $begin."\n"; foreach($currentLetter as $currentLetterEntry) { - $link = utf8_str_replace("{{link}}" ,$currentLetterEntry['id'], $entryTpl); - $alphaOutput .= utf8_str_replace("{{name}}" ,$currentLetterEntry['id2'], $link); + $link = str_replace("{{link}}" ,$currentLetterEntry['id'], $entryTpl); + $alphaOutput .= str_replace("{{name}}" ,$currentLetterEntry['id2'], $link); $alphaOutput .= "\n"; } - $end = utf8_str_replace("{{letter}}" ,utf8_strtoupper($key), $endLetterTpl); + $end = str_replace("{{letter}}" ,utf8_strtoupper($key), $endLetterTpl); $alphaOutput .= $end."\n"; } - + return $alphaOutput; } - + } //Alphaindex class end /** @@ -292,9 +330,9 @@ */ function alphaindex_search_index(&$data,$base,$file,$type,$lvl,$opts){ $return = true; - + $item = array(); - + if($type == 'd'){ if ($opts['level'] == $lvl) $return=false; if ($opts['nons']) return $return; @@ -302,24 +340,24 @@ //don't add return false; } - + $id = pathID($file); - + //check hidden if($type=='f' && isHiddenPage($id)){ return false; } - + //check ACL if($type=='f' && auth_quickaclcheck($id) < AUTH_READ){ return false; } - + //Set all pages at first level if ($opts['nons']) { - $lvl=1; + $lvl=1; } - + $data[]=array( 'id' => $id, 'type' => $type, 'level' => $lvl, @@ -327,4 +365,4 @@ return $return; } -?> \ Pas de fin de ligne ? la fin du fichier. +?> diff -Naur alphaindex_orig/VERSION alphaindex/VERSION --- alphaindex_orig/VERSION 1970-01-01 01:00:00.000000000 +0100 +++ alphaindex/VERSION 2008-08-31 18:32:47.000000000 +0200 @@ -0,0 +1 @@ +20080831
– Jonesy, have fun !
Since it seems that this plugin is abandoned by the original author, i've build an alphaindex darcs containing your patches (i had to manually correct some hunks) . You can fetch it with:
darcs get http://samuele.netsons.org/darcs/alphaindex
I'll apply there any new working patch pubblished here, sended with the darcs mechanism or created by me.
Next step could be to implement a better cache mechanism according for example to the indexmenu action plugin.
It's also possible to install it via plugin manager using this link.
This version only has 1 error. When activate the articles_moving when the article_deletion option is active, look at this example:
$conf['articles_deletion'] = '^the +|^a +|^an +' $conf['articles_moving'] = 1 $conf['metadata_title'] = 1
If I have a page wich header is 'The Rolling Stones', this page will be treated as 'Rolling Stones' instead of its real name. But the page remains in the letter “T”, and not in the letter “R”.
I see in the code and I found 2 minimal errors:
Line 221
if($this->getConf('metadata_title')