Mediawiki/Erweiterung/IconLink: Unterschied zwischen den Versionen

Aus Mikiwiki
Zur Navigation springen Zur Suche springen
Keine Bearbeitungszusammenfassung
Keine Bearbeitungszusammenfassung
 
(23 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
Fügt den zusätzlichen Tag <link> hinzu, der das Favicon der betreffenden Website vor jeden externen Link setzt.
Fügt den zusätzlichen Tag "#iconlink" hinzu, der das [[Favicon]] der betreffenden Website vor jeden externen [[URL]] setzt und auch innerhalb von Vorlagen verwendet werden kann.


== Installation ==
== Installation ==


1. Anlegen der Datei "extensions/FaviconLink.php" und Einfügen des folgenden PHP-Codes: FaviconLink 0.1 ().
1. Anlegen des Verzeichnisses "extensions/IconLink".


  # <b>vi extensions/FaviconLink.php</b>
# <b>mkdir extensions/IconLink</b>
# <b>chown wiki:wiki extensions/IconLink</b>
 
2. Anlegen der Datei "extensions/FaviconLink.php" und Einfügen des folgenden PHP-Codes: IconLink 0.1 (2008-03-11).
 
  # <b>vi extensions/IconLink/IconLink.php</b>


{| class=wiki width=100%
{| class=wiki width=100%
|
|
<source lang=php enclose=div>
<source lang=php enclose=div>
<?php
#
# IconLink extension for MediaWiki
#
# Installation:
#  create a new directory extensions/IconLink and copy all files there
#  add the following to LocalSettings.php:
#  require_once( "extensions/IconLink/IconLink.php" );
#
# Usage:
#  {{#iconlink: url | description | icon | width | height}}
#  where
#  - url is the URL you want to create a link to
#  - description is the text to show instead of the URL (optional)
#  - icon is the URL of the image to show before the link (optional)
#    if omitted, the favicon of the site you're linking is shown
#  - width and height define the dimensions of the icon (both optional)
#    if omitted, the icon will have a size of 16x16 pixels
#
if(! defined('MEDIAWIKI')) {
  die("This is a MediaWiki extension and can not be used standalone.\n");
}
$wgExtensionCredits['parserhook'][] = array(
  'name' => 'IconLink',
  'description' => 'Prepends an icon to a link.',
  'version' => '0.1',
  'author' => 'Robert H&auml;nel'
);
require_once('IconLink.code.php');
$wgExtensionFunctions[] = "wfIconLinkSetup";
$wgHooks['LanguageGetMagic'][] = 'wfIconLinkMagic';
function wfIconLinkSetup() {
  global $wgParser;
  $wgParser->setFunctionHook('iconlink', 'wfIconLinkRender');
}
function wfIconLinkMagic( &$magicWords, $langCode ) {
  $magicWords['iconlink'] = array(0, 'iconlink');
  return true;
}
?>
</source>
|}
3. Anlegen der Datei "extensions/FaviconLink.php" und Einfügen des folgenden PHP-Codes: IconLink 0.1 (2008-03-11).
# <b>vi extensions/IconLink/IconLink.code.php</b>


{| class=wiki width=100%
|
<source lang=php enclose=div>
<?php
function wfIconLinkRender(&$parser, $url = '', $description = '', $icon = '', $width = 16, $height = 16) {
  if (empty($url)) {
    return '';
  }
  $url = htmlspecialchars($url);
  if (empty($description)) {
    $description = $url;
  }
  $description = htmlspecialchars($description);
  if (empty($icon)) {
    # extract the first part of the URL (up until the host name) and append
    # the name of the favicon file
    $regex = '|^(http(s)?://[^/]+)|i';
    preg_match($regex, $url, $result);
    $icon = $result[0] . '/favicon.ico';
  }
  $icon = htmlspecialchars($icon);
  if (! ctype_digit($width)) {
    $width = 16;
  }
  if (! ctype_digit($height)) {
    $height = 16;
  }
  # check the http return code after trying to access the icon file
  # if it is 200 the file exists
  $headers = @get_headers($icon);
  $iconExists = (preg_match("|200|", $headers[0]) != 0);
  $html = "<a href='$url'>";
  if ($iconExists) {
    $html .= "<img class='iconlink' src='$icon' width='$width' height='$height' />";
  }
  $html .= " $description</a>";
  return $parser->insertStripItem($html, $parser->mStripState);
}
?>
</source>
|}


4. Die folgenden Anpassungen in der Datei "extensions/IconLink/IconLink.code.php" beheben zwei Probleme:


* Im Originalskript wird nur unter "<i>Domainname</i>/favicon.ico" nach einem Favicon gesucht.
* Nun wird ein (selbst hergestelltes, unsichtbares) Icon angezeigt, wenn die betreffende Seite selber keine "favicon.ico"-Datei zur Verfügung stellt. Natürlich muss ausserdem die Bilddatei "images/favicon_transparent.gif" erstellt werden (im Mikiwiki eine 1x1 Pixel grosse Datei mit transparentem Hintergrund). So stehen die Weblinks mit und ohne Favicon immer linksbündig untereinander.


{| class=wiki width=100%
|
<source lang=php enclose=div>
  ...
  if ($iconExists) {
    $html .= "<img class='iconlink' src='$icon' width='$width' height='$height' />";
  }
  if (! $iconExists) {
    $html .= "<img class='iconlink' src='/mikiwiki/images/favicon_transparent.gif' width='16' height='16' />";
  }
  $html .= " $description</a>";
  ...
?>
</source>
</source>
|}
|}


2. Anpassung der Rechte.
5. Anpassung der Rechte.
 
# <b>chown wiki:wiki extensions/IconLink/IconLink.php</b>
# <b>chown wiki:wiki extensions/IconLink/IconLink.code.php</b>
 
6. Einfügen der folgenden Zeile in die Datei "LocalSettings.php".


  # <b>chown wiki:wiki extensions/FaviconLink.php</b>
  ## Extension: IconLink
require_once("$IP/extensions/IconLink/IconLink.php");


3. Einfügen der folgenden Zeile in die Datei "LocalSettings.php".
== Syntax ==


## Extension: FaviconLink
Der folgende Code erzeugt einen [[Hyperlink]], vor dem das [[Favicon]] der betreffenden Website angezeigt wird.
include ("extensions/FaviconLink.php");
 
<pre class=wiki>
{{#iconlink: url | description | icon | width | height}}
</pre>
 
wobei
* <b>url</b> der [[URL]] ist, wohin ein Hyperlink erzeugt werden soll.
* <b>description</b> ist der Text, der anstelle des URL anzuzeigen ist (optional).
* <b>icon</b> ist der URL einer Bilddatei, die links vom Hyperlink anzuzeigen ist (optional); wird diese Angabe weggelassen, so wird das [[Favicon]] der Website angezeigt, zu der verlinkt wird.
* <b>width</b> und <b>height</b> bestimmen die Ausmasse der Icon-Datei (beide optional); werden diese Angaben weggelassen, so wird die Icon-Datei eine Grösse von 16x16 Pixel haben.


== Verwendung ==
== Verwendung ==


Der folgende Code erzeugt einen Link, vor dem das Favicon der betreffenden Website angezeigt wird.
Der folgende Code


<pre class=wiki>
<pre class=wiki>
{{#iconlink: url | description | icon | width | height}}
* {{#iconlink: http://www.allocine.fr/ | Allocine}}
</pre>
</pre>


Das sieht dann so aus:
erzeugt die folgende Zeile:
 
* {{#iconlink: http://www.allocine.fr/ | Allocine}}
 
== FAQ ==
 
=== Unklarheiten ===
 
In meinen mit der "[[Vorlage:Weblinks]]" erzeugten Linklisten, sind die folgenden beiden URLs linksbündig mit dem Tabellenrand, anstatt, dass Platz für ein (unsichtbares) Favicon bleibt:


* <ilink>http://www.allocine.fr/ Allocine</ilink>
* http://www.thoughtpolice.co.uk/favicon.ico - erzeugt eine Seite (deren Quelltext nicht angesehen werden kann) mit dem Text "<nowiki>http://www.thoughtpolice.co.uk/favicon.ico</nowiki>"
* http://www.linuxhaven.de/favicon.ico - erzeugt eine Seite (deren Quelltext angesehen werden kann) mit dem Text "Not Found. The requested URL /favicon.ico was not found on this server."


== Weblinks ==
== Weblinks ==


* <ilink>http://www.mediawiki.org/wiki/Extension:IconLink Extension:IconLink</ilink> (Mediawiki.org)
{{Weblinks}}
{{url_mediawiki|Extension:IconLink|Extension:IconLink}}
{{Fuss}}




{{cat|Favicon}}
{{cat|Favicon}}
{{cat|Mediawiki}}
{{cat|Mediawiki}}

Aktuelle Version vom 7. Februar 2010, 15:51 Uhr

Fügt den zusätzlichen Tag "#iconlink" hinzu, der das Favicon der betreffenden Website vor jeden externen URL setzt und auch innerhalb von Vorlagen verwendet werden kann.

Installation

1. Anlegen des Verzeichnisses "extensions/IconLink".

# mkdir extensions/IconLink
# chown wiki:wiki extensions/IconLink

2. Anlegen der Datei "extensions/FaviconLink.php" und Einfügen des folgenden PHP-Codes: IconLink 0.1 (2008-03-11).

# vi extensions/IconLink/IconLink.php
<?php
#
# IconLink extension for MediaWiki
#
# Installation:
#   create a new directory extensions/IconLink and copy all files there
#   add the following to LocalSettings.php:
#   require_once( "extensions/IconLink/IconLink.php" );
#
# Usage:
#   {{#iconlink: url | description | icon | width | height}}
#   where
#   - url is the URL you want to create a link to
#   - description is the text to show instead of the URL (optional)
#   - icon is the URL of the image to show before the link (optional)
#     if omitted, the favicon of the site you're linking is shown
#   - width and height define the dimensions of the icon (both optional)
#     if omitted, the icon will have a size of 16x16 pixels
#
 
if(! defined('MEDIAWIKI')) {
  die("This is a MediaWiki extension and can not be used standalone.\n");
}
 
$wgExtensionCredits['parserhook'][] = array(
  'name' => 'IconLink',
  'description' => 'Prepends an icon to a link.',
  'version' => '0.1',
  'author' => 'Robert H&auml;nel'
);
 
require_once('IconLink.code.php');
 
$wgExtensionFunctions[] = "wfIconLinkSetup";
$wgHooks['LanguageGetMagic'][] = 'wfIconLinkMagic';
 
function wfIconLinkSetup() {
  global $wgParser;
  $wgParser->setFunctionHook('iconlink', 'wfIconLinkRender');
}
 
function wfIconLinkMagic( &$magicWords, $langCode ) {
  $magicWords['iconlink'] = array(0, 'iconlink');
  return true;
}
?>

3. Anlegen der Datei "extensions/FaviconLink.php" und Einfügen des folgenden PHP-Codes: IconLink 0.1 (2008-03-11).

# vi extensions/IconLink/IconLink.code.php
<?php

function wfIconLinkRender(&$parser, $url = '', $description = '', $icon = '', $width = 16, $height = 16) {
  if (empty($url)) {
    return '';
  }
  $url = htmlspecialchars($url);
  if (empty($description)) {
    $description = $url;
  } 
  $description = htmlspecialchars($description);
  if (empty($icon)) {
    # extract the first part of the URL (up until the host name) and append
    # the name of the favicon file
    $regex = '|^(http(s)?://[^/]+)|i'; 
    preg_match($regex, $url, $result);
    $icon = $result[0] . '/favicon.ico';
  }
  $icon = htmlspecialchars($icon);
  if (! ctype_digit($width)) {
    $width = 16;
  }
  if (! ctype_digit($height)) {
    $height = 16;
  }

  # check the http return code after trying to access the icon file
  # if it is 200 the file exists
  $headers = @get_headers($icon);
  $iconExists = (preg_match("|200|", $headers[0]) != 0);

  $html = "<a href='$url'>";
  if ($iconExists) {
    $html .= "<img class='iconlink' src='$icon' width='$width' height='$height' />";
  }
  $html .= " $description</a>";

  return $parser->insertStripItem($html, $parser->mStripState);
}
?>

4. Die folgenden Anpassungen in der Datei "extensions/IconLink/IconLink.code.php" beheben zwei Probleme:

  • Im Originalskript wird nur unter "Domainname/favicon.ico" nach einem Favicon gesucht.
  • Nun wird ein (selbst hergestelltes, unsichtbares) Icon angezeigt, wenn die betreffende Seite selber keine "favicon.ico"-Datei zur Verfügung stellt. Natürlich muss ausserdem die Bilddatei "images/favicon_transparent.gif" erstellt werden (im Mikiwiki eine 1x1 Pixel grosse Datei mit transparentem Hintergrund). So stehen die Weblinks mit und ohne Favicon immer linksbündig untereinander.
  ...
  if ($iconExists) {
    $html .= "<img class='iconlink' src='$icon' width='$width' height='$height' />";
  }
  if (! $iconExists) {
    $html .= "<img class='iconlink' src='/mikiwiki/images/favicon_transparent.gif' width='16' height='16' />";
  }
  $html .= " $description</a>";
  ...
?>

5. Anpassung der Rechte.

# chown wiki:wiki extensions/IconLink/IconLink.php
# chown wiki:wiki extensions/IconLink/IconLink.code.php

6. Einfügen der folgenden Zeile in die Datei "LocalSettings.php".

## Extension: IconLink
require_once("$IP/extensions/IconLink/IconLink.php");

Syntax

Der folgende Code erzeugt einen Hyperlink, vor dem das Favicon der betreffenden Website angezeigt wird.

{{#iconlink: url | description | icon | width | height}}

wobei

  • url der URL ist, wohin ein Hyperlink erzeugt werden soll.
  • description ist der Text, der anstelle des URL anzuzeigen ist (optional).
  • icon ist der URL einer Bilddatei, die links vom Hyperlink anzuzeigen ist (optional); wird diese Angabe weggelassen, so wird das Favicon der Website angezeigt, zu der verlinkt wird.
  • width und height bestimmen die Ausmasse der Icon-Datei (beide optional); werden diese Angaben weggelassen, so wird die Icon-Datei eine Grösse von 16x16 Pixel haben.

Verwendung

Der folgende Code

* {{#iconlink: http://www.allocine.fr/ | Allocine}}

erzeugt die folgende Zeile:

FAQ

Unklarheiten

In meinen mit der "Vorlage:Weblinks" erzeugten Linklisten, sind die folgenden beiden URLs linksbündig mit dem Tabellenrand, anstatt, dass Platz für ein (unsichtbares) Favicon bleibt:

Weblinks

Herausgeber Sprache Webseitentitel Anmerkungen
Mediawiki eng Extension:IconLinkwbm Enzyklopädischer Artikel