Extension:BreadCrumbsBar/it

From MediaWiki.org
Jump to: navigation, search
Lingua: English  • Italiano

           

Manuale sulle Estensioni MediaWiki
Lista delle Estensioni MediaWiki
Crystal Clear action run.png
BreadCrumbsBar

Stato Release: beta

Implementazione  User interface
Descrizione Creates a bread crumbs navigation bar
Autore(i)  Alessandra Bilardi (Bilardi Talk)
Versione  0.1 (2009-11-26)
MediaWiki  1.14.0 or higher (tried and true)
Licenza GPL
Download no link
Parametri  $wgBreadCrumbsBarDelimiter

$wgBreadCrumbsBarRoot
$wgBreadCrumbsBarHome
$wgBreadCrumbsBarTitle
$wgBreadCrumbsBarLink
$wgBreadCrumbsBarLabel

Esempio  CRIBI Genomics

Contents

[edit] Introduzione

BreadCrumbsBar è una vera barra di navigazione come le estensioni dell'ultimo paragrafo. Queste estensioni usano global $wgUser;.. perciò se setti $wgGroupPermissions['*']['read'] = false; o simili, gli utenti anonimi non hanno la barra di navigazione anche se esiste $wgWhitelistRead.. beh sì, è un caso limite.. ma è la mia situazione.

In più, molti siti wiki hanno un albero di categorie complesso e ciascuna pagina appartiene a più categorie. In questi casi, l'estensione come decide la barra di navigazione? Ho risolto questo problema pensando che ci sono alcune categorie più importanti di altre. Queste potrebbero appartenere a categorie root aggiunte in $wgBreadCrumbsBarRoot.

Nell'esempio limite ho pagine pubbliche e private (due categorie 'root') e ho creato pagine redirect alle pagine delle categorie pubbliche.. perciò necessito di alcune opzioni: se voglio la barra di navigazione sulle pagine speciali (vedi $wgBreadCrumbsBarTitle), se voglio il namespace nel link e/o dell'etichetta di ciascuna categoria (vedi $wgBreadCrumbsBarLink e $wgBreadCrumbsBarLabel) e cosa far vedere come primo link (vedi $wgBreadCrumbsBarHome).

[edit] Commenti e Feedback

Commenti e Feedback nella pagina di discussione (in inglese).

[edit] Impostazioni

In LocalSettings.php aggiungere il codice che segue:

// add BreadCrumbsBar
// delimiter between links
$wgBreadCrumbsBarDelimiter = ' > ';
// categories root names
$wgBreadCrumbsBarRoot = 'Site_Map;Archive';
// HTML code about first link omnipresent
$wgBreadCrumbsBarHome = '<a href="Main_Page">Home</a>';
// true: all pages have got bar; false: only pages created from users have got bar
$wgBreadCrumbsBarTitle = false;
// true: all links have got namespace category; false: all links have not got namespace category 
$wgBreadCrumbsBarLink = true;
// true: all links labels have got namespace category; false: all links labels have not got namespace category 
$wgBreadCrumbsBarLabel = true;
 
require_once("extensions/BreadCrumbsBar/BreadCrumbsBar.php");


In Monobook.php cambiare le linee:

<div id='content'>
  <a name='top' id='top'></a>

con:

<div id='content'>
  $BreadCrumbsBar=new BreadCrumbsBar();
  $Title=Title::newFromId($this->data['articleid']);
  echo $BreadCrumbsBar->displayBar($Title);
  <a name='top' id='top'></a>

Se usi lo skin ltrMenuPlus, allora cambiare le linee:

<div id='content'>
  <a name='top' id='top'></a>

con:

$BreadCrumbsBar=new BreadCrumbsBar();
$Title=Title::newFromId($this->data['articleid']);
echo $BreadCrumbsBar->displayBar($Title);
<div id='content'>
  <a name='top' id='top'></a>

[edit] BreadCrumbsBar.php

<?php
/*
 * BreadCrumbsBar is an extension for providing an 
 * bread crumbs navigation bar.
 */
 
//Not a valid entry point, skip unless MEDIAWIKI is defined
if (!defined('MEDIAWIKI')) {
        echo <<<EOT
To install my extension, put the following line in LocalSettings.php:
require_once( "$IP/extensions/BreadCrumbsBar/BreadCrumbsBar.php" );
EOT;
        exit( 1 );
}
 
/**
 * The Credits Extension
 */
$wgExtensionCredits['parserhook'][] = array(
        'name' => 'Bread Crumbs Bar',
        'version' => '0.1',
        'author' => '[http://www.mediawiki.org/User:Bilardi Alessandra Bilardi]',
        'url' => 'http://www.mediawiki.org/wiki/Extension:BreadCrumbsBar',
        'description' => "Creates a bread crumb navigation bar."
);
 
/**
 * Definition of the class
 */    
class BreadCrumbsBar {
 
        /**
         * constructor
         */
        function __construct() {
                global $wgScript;
                global $wgBreadCrumbsBarDelimiter, $wgBreadCrumbsBarRoot, $wgBreadCrumbsBarHome, $wgBreadCrumbsBarTitle, $wgBreadCrumbsBarLink, $wgBreadCrumbsBarLabel;
 
                /**
                 * This is the configuration file for this extension
                 */
                if (is_null($wgBreadCrumbsBarDelimiter)) $wgBreadCrumbsBarDelimiter = ' &gt; ';
                if (is_null($wgBreadCrumbsBarRoot)) $wgBreadCrumbsBarRoot = 'Site_Map';
                if (is_null($wgBreadCrumbsBarHome)) $wgBreadCrumbsBarHome = '<a href="'.$wgScript.'">Home</a>';
                if (is_null($wgBreadCrumbsBarTitle)) $wgBreadCrumbsBarTitle = false;
                if (is_null($wgBreadCrumbsBarLink)) $wgBreadCrumbsBarLink = true;
                if (is_null($wgBreadCrumbsBarLabel)) $wgBreadCrumbsBarLabel = true;
 
        }       
 
        /**
         * get categories links and create hash
         */
        private function createHash($dbr) {
                // Query the database.
                $res = $dbr->select(
                        array('page', 'categorylinks'),
                        array('page_title', 'page_namespace', 'cl_sortkey', 'cl_to'),
                        'cl_from = page_id','',''
                );
                if ($res === false)
                return array_keys();
 
                // Convert the results list into an array.
                $hash = array_keys();
                while ($x = $dbr->fetchObject($res)) {
                        if ($hash[$x->cl_sortkey]) $hash[$x->cl_sortkey] .= ','.$x->cl_to;
                        else $hash[$x->cl_sortkey] = $x->cl_to;
                        //Underconstruction: Make a Title for this item.
                        //$title = Title::makeTitle($l->page_namespace, $l->page_title);
                }
                // Free the results.
                $dbr->freeResult($res);
 
                return $hash;
        }
 
        /**
         * is there root? 
         */
        private function isThereRoot($cat,&$hash) {
                global $wgBreadCrumbsBarRoot;
                $loop = true;
 
                while ($loop) {
                        if (!$cat) return false;
                        if (strstr($wgBreadCrumbsBarRoot,$cat)) return true;
                        $cat = str_replace("_", " ", $cat);
                        if (strstr($hash[$cat],",")) {
                                $matches = explode(",",$hash[$cat]);
                                foreach ($matches as $ct)
                                        if ($this->isThereRoot($ct,$hash)) 
                                                return true;
                        } else $cat = $hash[$cat];
                }
 
                return true;
        }
 
        /**
         * get category
         */
        private function getCat($page,&$hash) {
                $cat = '';
                $page = str_replace("_", " ", $page);
                if (strstr($hash[$page],",")) {
                        $matches = explode(",",$hash[$page]);
                        foreach ($matches as $ct)
                                if ($this->isThereRoot($ct,$hash)) {
                                        $cat = $ct;
                                        break;
                                }
                } else {
                        $cat = $hash[$page];
                }
 
                return $cat;
        }
 
        /**
         * back root
         */
        private function backRoot($page,&$hash) {
                global $wgBreadCrumbsBarRoot;
 
                $cts = array();
 
                if (strstr($wgBreadCrumbsBarRoot,$page) === false) {
                        $loop = true;
                        while ($loop) {
                                $cat = $this->getCat($page,$hash);
                                if ($cat && strstr($wgBreadCrumbsBarRoot,$cat) === false) {
                                        $cts[] = $cat;
                                        $page = $cat;
                                } else $loop = false;
                        }
                }
 
                return $cts;
        }
 
        /**
         * create array of categories
         */
        private function createArray($title) {
                global $wgBreadCrumbsBarDelimiter, $wgBreadCrumbsBarRoot;
 
                // Query the database.
                $dbr =& wfGetDB(DB_SLAVE);
                $hash = array_keys();
                $matches = array();
                $array = array();
                $backcat = '';
                $hash=$this->createHash($dbr);
                $page = str_replace("_", " ", $title);
                $array=$this->backRoot($page,$hash);
 
                return $array;
        }
 
        /**
         * displayBar
         */
        public function displayBar($Title) {
                global $wgBreadCrumbsBarDelimiter, $wgBreadCrumbsBarRoot, $wgBreadCrumbsBarHome, $wgBreadCrumbsBarTitle, $wgBreadCrumbsBarLink, $wgBreadCrumbsBarLabel;
                $links = array();
                $links = $this->createArray($Title);
                $bar= '';
                foreach ($links as $l) {
                        $l = str_replace("_", " ", $l);
                        if ($wgBreadCrumbsBarLink) $nl = ':Category:'.$l; else $nl = $l;
                        if ($wgBreadCrumbsBarLabel) $l = 'Category:'.$l;
                        $link = '<a href="'.$nl.'">'.$l.'</a>';
                        $bar = $bar ? $link.' '.$wgBreadCrumbsBarDelimiter.' '.$bar : $link; 
                }
 
                //if( get_class( $Title ) !="Title") return "";
 
                if ($Title != "Main Page" && ($wgBreadCrumbsBarTitle || get_class( $Title ) == "Title")) 
                        $bar = $bar ? 
//                            '<div id="BreadCrumbsBar">'.$wgBreadCrumbsBarHome.' '.$wgBreadCrumbsBarDelimiter.' '.$bar.' '.$wgBreadCrumbsBarDelimiter.' '.$Title.'</div>'
                                '<div id="BreadCrumbsBar">'.$wgBreadCrumbsBarHome.' '.$wgBreadCrumbsBarDelimiter.' '.$bar.'</div>'
//                            : '<div id="BreadCrumbsBar">'.$wgBreadCrumbsBarHome.' '.$wgBreadCrumbsBarDelimiter.' '.$Title.'</div>';
                                : '<div id="BreadCrumbsBar">'.$wgBreadCrumbsBarHome.'</div>';
 
                return $bar;
        }
 
}

[edit] Vedi anche

Personal tools
Namespaces
Variants
Actions
Site
Support
Download
Development
Communication
Print/export
Toolbox