Mediawiki/Erweiterung/IconLink: Unterschied zwischen den Versionen

Aus Mikiwiki
Zur Navigation springen Zur Suche springen
Keine Bearbeitungszusammenfassung
Keine Bearbeitungszusammenfassung
 
(10 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 114: Zeile 114:
|}
|}


4. Damit auch ein (selbst hergestelltes) Icon angezeigt wird, wenn die betreffende Seite selber keine "favicon.ico"-Datei zur Verfügung stellt, wird der Code der Datei "extensions/FaviconLink.php" wie folgt erweitert. Natürlich muss ausserdem die Bilddatei "images/favicon.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.
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%
{| class=wiki width=100%
|
|
<source lang=php enclose=div>
<source lang=php enclose=div>
<?php
   ...
   ...
   if ($iconExists) {
   if ($iconExists) {
Zeile 125: Zeile 127:
   }
   }
   if (! $iconExists) {
   if (! $iconExists) {
     $html .= "<img class='iconlink' src='/mikiwiki/images/gavicon.gif' width='16' height='16' />";
     $html .= "<img class='iconlink' src='/mikiwiki/images/favicon_transparent.gif' width='16' height='16' />";
   }
   }
   $html .= " $description</a>";
   $html .= " $description</a>";
   ...
   ...
}
?>
?>
</source>
</source>
Zeile 144: Zeile 145:
  require_once("$IP/extensions/IconLink/IconLink.php");
  require_once("$IP/extensions/IconLink/IconLink.php");


== Verwendung ==
== Syntax ==


Der folgende Code erzeugt einen [[Hyperlink]], vor dem das [[Favicon]] der betreffenden Website angezeigt wird.
Der folgende Code erzeugt einen [[Hyperlink]], vor dem das [[Favicon]] der betreffenden Website angezeigt wird.
Zeile 153: Zeile 154:


wobei
wobei
* <b>url</b> der URL ist, wohin ein Hyperlink erzeugt werden soll.
* <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>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>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.
* <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.


Das sieht dann so aus:
== Verwendung ==
 
Der folgende Code


<pre class=wiki>
* {{#iconlink: http://www.allocine.fr/ | Allocine}}
* {{#iconlink: http://www.allocine.fr/ | Allocine}}
</pre>
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:
* 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 ==


{{Weblinks1|{{url_mediawiki|Extension:IconLink|Extension:IconLink}}
{{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