Extension:BreadCrumbs (Kimon)/el

From MediaWiki.org

Jump to: navigation, search
MediaWiki Extension
Crystal Clear action run.png
BreadCrumbs (Kimon)

Release status: beta

Implementation User interface
Hooks used UserToggles

ArticleViewHeader
OutputPageParserOutput

Description Προβάλλει τις σελίδες που επισκέφτηκε ο χρήστης και τη σειρά τους. Βασισμένο στην επέκταση Extension:BreadCrumbs του Manuel Schneider.
Author(s) Κίμων Ανδρέου (Kimon talk)
Version 1.0.0 (2007-10-26)
MediaWiki Δοκιμασμένο στην έκδοση 1.10
License GPL
Download Δείτε παρακάτω
Parameters $wgBreadCrumbsDelimiter $wgBreadCrumbsCount

[edit] Περιγραφή

Προβάλλει μια λίστα όλων των σελίδων που ο χρήστης είδε κατα την επίσκεψή του. Εξαιρετικά χρήσιμο όταν ο χρήστης θέλει να μάθει το πως "έφτασε" στη συγκεκριμένη σελίδα.

Εάν η νέα σελίδα την έχει ήδη επισκεφθεί ο χρήστης (άρα είνα ήδη στη λίστα), η λίστα δε μεγαλώνει (δε δημιουργεί διπλές εγγραφές) και αν είναι μια παλαιότερη σελίδα, τότε η λίστα συρρικνώνεται.

Επίσης, μια νέα προτίμηση χρήστη έτσι ώστε ο κάθε χρήστης να μπορεί να επιλέξει εάν θέλει να βλέπει τη λίστα ή όχι. Η νέα αυτή προτίμηση βρίσκεται στις "Διαφ. ρυθμίσεις".

Η γραμμή με τους συνδέσμους τοποθετείται στο κάτω μέρος της σελίδας αλλά όλες οι δυνατότηες μορφοποιήσης μπορούν να γίνουν μέσω του αρχείου CSS που συνοδεύει αυτή την επέκταση.

Δείτε το κάτω μέρος αυτής της σελίδας για ένα παράδειγμα

 Bread crumbs: Main Page > Category:All extensions > Extension:BreadCrumbs (Kimon)

[edit] Παράμετροι

$wgBreadCrumbsDelimiter
Ορίζει τους χαρακτήρες που θα χρησιμοποιηθούν ως διαχωρισμός μεταξύ των συνδέσμων των σελίδων. Η αρχική τμή της μεταβλητής αυτής είναι: " > "
$wgBreadCrumbsCount
Ορίζει πόσες σελίδες να προβάλλει στη λίστα. Η αρχική τιμή είναι 5.

[edit] Εγκατάσταση

Ακολουθήστε τα παρακάτω βήματα για να εγκαταστήσετε την επέκταση:

1. Δημιουργείστε ένα νέο κατάλογο υπό τον κατάλογο "extensions" με το όνομα "BreadCrumbs"

2. Δημιουργείστε ένα νεο αρχείο με το όνομα "BreadCrumbs.php" πρσθέστε τον παρακάτω κώδικα:

<?php
 
# The BreadCrumbs extension, an extension for providing an breadcrumbs
# navigation to users.

# @addtogroup Extensions
# @author Manuel Schneider <manuel.schneider@wikimedia.ch>
# @author Kimon Andreou
# @copyright © 2007 by Manuel Schneider, Kimon Andreou
# @licence GNU General Public Licence 2.0 or later

 
if( !defined( 'MEDIAWIKI' ) ) {
  echo( "This file is an extension to the MediaWiki software and cannot be used standalone.\n" );
  die();
}
 
## Options:
# set the delimiter
$wgBreadCrumbsDelimiter = ' &gt; ';
# number of breadcrumbs to use
$wgBreadCrumbsCount = 5;
 
$bcBreadCrumbs = new BreadCrumbs();
 
$wgExtensionFunctions[] = array($bcBreadCrumbs, 'setup');
$wgHooks['UserToggles'][] = array($bcBreadCrumbs, 'toggle');
 
$wgExtensionCredits['parserhook'][] = array(
  'name'          => 'BreadCrumbs',
  'author'        => 'Kimon Andreou',
  'url'           => 'http://www.mediawiki.org/wiki/Extension:BreadCrumbs_(Kimon)',
  'description'   => "Shows a breadcrumb navigation. Based heavily on Manuel Shneider's extension[http://www.mediawiki.org/wiki/Extension:BreadCrumbs]"
);
 
##
## Main class
class BreadCrumbs {
  #constructor
  function BreadCrumbs() {}
 
  ## Set Hook:
  function setup() {
    global $wgUser, $wgHooks;
 
    #can we see the breadcrumbs?
    if($wgUser->getOption('breadcrumb')==0) {
      return;
    }
 
    ## Showing and updating the breadcrumbs trail
    # Hook when viewing article header:
    $wgHooks['ArticleViewHeader'][] = array($this, 'show');
 
  ## Infrastructure
  # Hook our own CSS:
  $wgHooks['OutputPageParserOutput'][] = array($this, 'output');
  }
 
  #Return our new user preference (t/f toggle)
  function toggle(&$arr) {
    global $wgMessageCache;
    #named "breadcrumb" - original, no?
    $arr[] = 'breadcrumb';
    $wgMessageCache->addMessage('tog-breadcrumb', 'Use breadcrumbs');
    return true;
  }
 
  #Show the breadcrumbs on the page
  function show( &$m_pageObj ) {
    global $wgUser, $wgTitle, $wgOut, $wgBreadCrumbsDelimiter, $wgBreadCrumbsCount;
 
    # deserialize data from session into array:
    $m_BreadCrumbs = array();
 
    #If a session doesn't already exist, create one
    if( isset( $_SESSION['BreadCrumbs'] ) ) {
      $m_BreadCrumbs = $_SESSION['BreadCrumbs'];
    }
    else {
      if( !isset( $_SESSION ) ) {
        session_start();
      }
      $_SESSION['BreadCrumbs'] = array();
    }
    # cache index of last element:
    $m_count = count( $m_BreadCrumbs ) - 1;
 
    # if we've got too many entries, reduce the array:
    if( count( $m_BreadCrumbs ) > 0 && $m_BreadCrumbs[ $m_count ] != $wgTitle->getPrefixedText() ) {
      # reduce the array set, remove older elements:
      $m_BreadCrumbs = array_slice( $m_BreadCrumbs, ( 1 - $wgBreadCrumbsCount ) );
      # add new page:
      array_push( $m_BreadCrumbs, $wgTitle->getPrefixedText() );
    }
    else {
      array_push( $m_BreadCrumbs, $wgTitle->getPrefixedText() );
    }
 
    #if returning to a page we've already visited, reduce the array
    $loc = array_search($wgTitle->getPrefixedText(), $m_BreadCrumbs);
    if(($loc >= 0)) {
      #shrink array
      $m_BreadCrumbs = array_slice($m_BreadCrumbs, 0, ($loc + 1));
    } 
 
    # serialize data from array to session:
    $_SESSION['BreadCrumbs'] = $m_BreadCrumbs;
    # update cache:
    $m_count = count( $m_BreadCrumbs ) - 1;
 
    # acquire a skin object:
    $m_skin =& $wgUser->getSkin();
    # build the breadcrumbs trail:
    $m_trail = "<div id=\"BreadCrumbsTrail\">&nbsp;<i>Bread crumbs:</i> ";
    for( $i = 0; $i <= $m_count; $i++ ) {
      $m_trail .= $m_skin->makeLink( $m_BreadCrumbs[$i] );
      if( $i < $m_count ) $m_trail .= $wgBreadCrumbsDelimiter;
    }
    $m_trail .= '&nbsp;</div>';
    $wgOut->addHTML( $m_trail );
 
    # invalidate internal MediaWiki cache:
    $wgTitle->invalidateCache();
    $wgUser->invalidateCache();
 
    # Return true to let the rest work:
    return true;
  }
 
  ## Entry point for the hook for printing the CSS:
  # todo: find a better implementation
  function output( &$m_pageObj, &$m_parserOutput ) {
    global $wgScriptPath;
 
    # Register CSS file for our select box:
    $m_pageObj->addLink(
      array(
        'rel'   => 'stylesheet',
        'type'  => 'text/css',
        'href'  => $wgScriptPath . '/extensions/BreadCrumbs/BreadCrumbs.css'
      )
    );
 
    # Be nice:
    return true;
  }
}

3. Δημιουργήστε ένα νέο αρχείο με το όνομα "BreadCrumbs.css" και προσθέστε το παρακάτω:

/* Stylesheet for the BreadCrumbs extension, an extension of the
 * edit box of MediaWiki to provide an easy way to add category links
 * to a specific page.
 *
 * @package MediaWiki
 * @subpackage Extensions
 * @author Manuel Schneider <manuel.schneider@wikimedia.ch>
 * @author Kimon Andreou
 * @copyright © 2007 by Manuel Schneider
 * @licence GNU General Public Licence 2.0 or later
*/
 
#BreadCrumbsTrail {
        font-size:0.8em;
        background-color: #FFFFCC;
        position:absolute;
        left: 2px;
        bottom:0;
        width:99%;
}

4. Προσθέστε την παρακάτω γραμμή στο τέλος του αρχείου LocalSettings.php

require_once( "$IP/extensions/BreadCrumbs/BreadCrumbs.php" );