Welcome, Guest. Please login or register.
Friday, July 30, 2010 (15:50)
Home Help Search Login Register
News: mwCMS now uses Mantis (on SourceForge.net) as bugtracker.

+  mwCMS
|-+  Deutscher Support
| |-+  Plugins, Layouts und Erweiterungen
| | |-+  Nachrichten-Teaser
« previous next »
Pages: [1] Print
Author Topic: Nachrichten-Teaser  (Read 3970 times)
rene_jo
Global Moderator
mwCMS player
*****
Posts: 29

View Profile
« on: Tuesday, January 08, 2008 (14:06) »

Ich möchte für meinen Webauftritt einen Nachrichten-Teaser bauen.

Ist dies mit mwCMS möglich?
Hat jemand eine Idee zur einfachen Umsetzung meines Vorhabens?
Logged
ClausVB
Administrator
mwCMS supporter
*****
Posts: 73


View Profile
« Reply #1 on: Monday, January 14, 2008 (16:44) »

Ist dies mit mwCMS möglich?

Ja, natürlich. Du kannst ein externes News-Skript über die Plugins einbinden, aber wenn es nur eine kleine Webseite ist, bietet sich evtl. so etwas an:

Code: [Select]
<fieldset>
  <legend>10.01.2008 - Sport</legend>
  <h2>Die Überschrift der Sportnachricht</h2>
  Der Text der Sportnachricht<br />
  <a href="die_url_der_sportnachricht.htm">mehr ...</a>
</fieldset>

Das ist das HTML-Grundgerüst, dass Du dann mit CSS belieben steuern kannst.

Dazu kannst Du dann im MediaWiki eine sogenannte Extension bauen:

Code: [Select]
<teaser datum="10.01.2008" rubrik="Sport" [Anmerkung: weitere Attribute sind möglich]>Der Text der Sportnachricht</teaser>
Ein kurzes Beispiel, wie eine sogenannten "Tag Extension" funktioniert kann man bei mediawiki.org nachlesen.

Mach mir bitte mal ein paar Beispiele für Deine Seite, danke!

Gruß
Claus
« Last Edit: Friday, October 03, 2008 (14:30) by ClausVB » Logged
rene_jo
Global Moderator
mwCMS player
*****
Posts: 29

View Profile
« Reply #2 on: Thursday, January 17, 2008 (08:10) »

Hallo Claus,

dein Vorschlag hört sich gut an. Da ich seltener Nachrichten veröffentliche, möchte ich deine Idee aufnehmen und auf ein externes News-Skript verzichten.

Der Teaser sollte wie folgt aufgebaut sein:

Code: [Select]
<fieldset>
  <legend>13.01.2008</legend>
  <h2>Neue Ampelanlage an L 158 in Betrieb genommen</h2>
  Die neue Ampelanlage an der Landstraße 158 (Ecke Zukunftsweg / Im Bruch) ist nach langer Planungs- und Bauzeit nun in der vergangenen Woche endlich in Betrieb genommen worden.<br />
  <a href="/Artikel_2008-01-13_ampelanlage_in_betrieb_genommen.htm">mehr ...</a>
</fieldset>

Im CSS habe ich ergänzt:

Code: [Select]
   /***** TEASER: eigener DIV-Container *****/

  #teaser fieldset {
    margin-bottom: 20px;
    padding: 10px 10px 10px 10px;
    color: #000;
    border: 1px #1B3A8B solid;
    background:#fff;
  }

  #teaser legend {
    color:#999;}


Für das Plugin benötige ich entsprechend des oben geposteten Beispiels folgende Attribute:
- Datum
- Überschrift
- URL

Auf der Seite http://www.villip.de/02_nachrichten.htm habe ich drei Nachrichten angelegt:

Artikel_2008-01-13_ampelanlage_in_betrieb_genommen
Artikel_2008-01-10_termine_januar
Artikel_2008-01-10_vier_jahre_jiw

Die Artikel beginnen allesamt mit "Artikel_".

Wenn du weitere Angaben benötigst, melde dich bitte.

VIELEN DANK!

Gruß René
Logged
ClausVB
Administrator
mwCMS supporter
*****
Posts: 73


View Profile
« Reply #3 on: Friday, January 18, 2008 (18:42) »

Zuerst müssen wir das MediaWiki erweitern, danach das mwCMS.

Die Datei "extensions/teaser.php" muss mit folgendem Inhalt erzeugt werden:
Code: [Select]
<?php
$wgExtensionFunctions[] = 'teaser';

function teaser()
{
global $wgParser;
$wgParser->setHook('teaser''process_teaser');
}

function process_teaser($input$args$parser)
{
$teaser_with_fieldset_and_legend '<fieldset> <legend>'
$args['date'] . '</legend> <h2>'
$args['caption'] . '</h2> '
htmlspecialchars($input) . '<br /> <a href="'
$args['url'] . '">mehr ...</a>';

return $teaser_with_fieldset_and_legend;
}
?>

Die Datei "LocalSettings.php" muss am Ende folgende Zeile enthalten:

Code: [Select]
require_once 'extensions/teaser.php';
Im MediaWiki wird dann der Teaser eingegeben:

Code: [Select]
<teaser date="13.01.2008" caption="Neue Ampelanlage an L 158 in
Betrieb genommen" url="Artikel_2008-01-13_ampelanlage_in_betrieb_genommen">Die
neue Ampelanlage an der Landstraße 158 (Ecke Zukunftsweg / Im Bruch) ist nach
langer Planungs- und Bauzeit nun in der vergangenen Woche endlich in Betrieb
genommen worden.</teaser>

Funktioniert dann der Teaser im MediaWiki?

Gruß
Claus
« Last Edit: Friday, October 03, 2008 (14:31) by ClausVB » Logged
rene_jo
Global Moderator
mwCMS player
*****
Posts: 29

View Profile
« Reply #4 on: Monday, January 28, 2008 (11:20) »

Hallo Claus,

vielen Dank für den nützlichen Tipp. Ich habe deinen Vorschlag inzwischen getestet. Der Teaser wird dargestellt. Allerdings musste in der Datei "extensions/teaser.php" noch "</fieldset>" ergänzt werden:

Code: [Select]
<?php
$wgExtensionFunctions[] = 'teaser';

function teaser()
{
global $wgParser;
$wgParser->setHook('teaser''process_teaser');
}

function process_teaser($input$args$parser)
{
$teaser_with_fieldset_and_legend '<fieldset> <legend>'
$args['date'] . '</legend> <h2>'
$args['caption'] . '</h2> '
htmlspecialchars($input) . '<br /> <a href="'
$args['url'] . '">mehr ...</a></fieldset>';

return $teaser_with_fieldset_and_legend;
}
?>

Gruß René
Logged
rene_jo
Global Moderator
mwCMS player
*****
Posts: 29

View Profile
« Reply #5 on: Friday, February 01, 2008 (14:49) »

Die Erstellung des Teasers hat soweit sehr gut funktioniert. An die Handhabung gewöhnt man sich schnell. Allerdings gibt es entgegen meiner ursprünglichen Erwartung ein Problem mit der Verlinkung. Ich muss den Hyperlink zum Artikel komplett mit "MediaWiki_" und ".htm" eintragen, also

Code: [Select]
(...) url="MediaWiki_(Rubrik)_Musterartikel.htm"  (...)

Das hat zur Folge, dass die Seiten innerhalb des MediaWiki nicht mehr über den Hyperlink aufgerufen werden können.

Gibt es eine Lösung für mein Problem?
Logged
ClausVB
Administrator
mwCMS supporter
*****
Posts: 73


View Profile
« Reply #6 on: Friday, February 01, 2008 (16:08) »

Gibt es eine Lösung für mein Problem?

Ja. Ist gar nicht so schwer, wenn man sich nur mal genug Gedanken gemacht hat :D

Zuerst wollte ich das über den Parser (include/class_parser.php) regeln, aber es geht eigentlich ganz simpel. Der Parser bearbeitet nämlich schon interne Hyperlinks, aber sie müssen mit "/index.php/..." beginnen und ein TITLE-Attribut haben. Das ist bei Deiner Teaser-Extension für das MediaWiki nicht enthalten. So müsste es gehen:

Code: [Select]
<?php
// siehe Quelltext oben im Forum

function process_teaser($input$args$parser)
{
$wiki_url str_replace(' ''_'$args['url']);

$teaser_with_fieldset_and_legend '<fieldset> <legend>'
$args['date'] . '</legend> <h2>'
$args['caption'] . '</h2> '
htmlspecialchars($input) . '<br /> <a href="/index.php/'
$wiki_url '" title="' $args['caption'] . '">mehr ...</a></fieldset>';

return $teaser_with_fieldset_and_legend;
}
?>

Den "str_replace()" habe ich eingefügt, damit Du mit Copy&Paste arbeiten kannst und nicht immer alle Leerzeichen durch Unterstrich ersetzen musst.

Gruß
Claus
Logged
ClausVB
Administrator
mwCMS supporter
*****
Posts: 73


View Profile
« Reply #7 on: Saturday, November 29, 2008 (14:57) »

Ich habe übrigens jetzt einen eigenen Nachrichten-Teaser plus "Artikel-Engine" über das MediaWiki realisiert.

1. Änderung der ".htaccess"
2. News-Bereich auf ein neues Plugin umgestellt
3. "display_plugin_mediawiki.php" abgeändert


1. Änderung der ".htaccess"

Code: [Select]
RewriteRule ^Artikel_(.+).htm$ index.php?topnav=aktuelles&mediawiki=$1
Wenn der Artikel angezeigt wird, soll die Hauptnavigation "Aktuelles" anzeigen. Der GET-Parameter heißt bei mir "mediawiki".


2. News-Bereich auf ein neues Plugin umgestellt

Ich habe die "meta.xml" geändert ("<plugin>teaser_news.php</plugin>") und im Plugin steht dann:

Code: [Select]
<?php
  $tmpl 
= new vlibTemplate('templates/col3_begin.htm');
  
$tmpl->setvar('caption''News');
  
$tmpl->pparse();
?>


<p>Einleitung und Beschreibung des Teaser-Bereichs.</p>

<fieldset>
  <legend>Noch ein Test</legend>
  <img src="bilder_logos/mwcms_logo.jpg" alt="&copy; mwcms.net: Logo des mwCMS" title="&copy; kde.org: mwcms.net: Logo des mwCMS" style="float: right" />
  XYZ und mehr "Was_mit_Ümläuten_und_(Klammern)"<br />
  <a href="Artikel_Was_mit_Ümläuten_und_(Klammern).htm">Mehr ...</a>
</fieldset>

(...)
<?php include_once 'templates/col3_end.htm'?>


3. "display_plugin_mediawiki.php" abgeändert

Code: [Select]
<?php
/**
 * CVB 2008-11-29: Important for "aktuelles_news" and "Artikel_MeineNews" (MediaWiki)
**/
$mediawiki_url .= (isset($_GET['mediawiki']))
  ? 
$_GET['mediawiki']
  : 
urlencode(str_replace(' ''_'$page->navigation));
?>

Damit wird entweder direkt der GET-Parameter genommen oder die Daten aus der "meta.xml" entsprechend kodiert übergeben und im MediaWiki gesucht.
Logged
ClausVB
Administrator
mwCMS supporter
*****
Posts: 73


View Profile
« Reply #8 on: Tuesday, June 09, 2009 (14:00) »

WICHTIG

Aufgrund von Erfahrungen und Angriffen auf andere Webseiten ...

!!! Parameter von außen ($_GET, $_POST) sollten immer valdiert werden !!!

Bei
Code: [Select]
$_GET['mediawiki']kann man mit "preg_match()" und regulären Ausdrücken überprüfen, ob es zu keiner "Injection" (Code oder SQL oder ... oder ... oder) kommt.

In der Standard-Version vom mwCMS ist ein Angriff darüber nicht möglich, weil der GET-Parameter "mediawiki" dort nicht existiert und die "file_get_content()" immer von der Konstante "SERVER" abhängig ist und die "fopen()"-Aktionen immer die Datei "meta.xml" nur lesend zugegriffen wird. Der Wert "meta.xml" ist von außen nicht veränderbar.

Gruß
Claus
Logged
ClausVB
Administrator
mwCMS supporter
*****
Posts: 73


View Profile
« Reply #9 on: Tuesday, July 21, 2009 (17:03) »

Zu deiner Frage per PN, René:

Ja, es ist richtig, dass die Dateien:
- ".htaccess"
- "display_plugin_mediawiki.php"
- "include/class_parser.php"
geändert werden müssen. Du hattest alles gemacht bis auf:

Code: [Select]
$searchReplace = ($key != FALSE)
? preg_replace('!<a href="/(.*?)" title="(.*?)!', '<!-- mwCMS: MediaWiki internal hyperlink with navigation ($1) --> <a href="' . $key . '.htm" title="', $cut)
: preg_replace('!<a href="/[a-z0-9\.\/-]+/(.*?)" title="(.*?)!i', '<!-- mwCMS: MediaWiki internal hyperlink WITHOUT navigation --> <a href="MediaWiki_$1.htm" title="', $cut);

in der Methode "ParsingInternalExternalHyperlinks" (Datei "include/class_parser.php").

Dort steht im Original:

Code: [Select]
<?php
(...)
      
// Internal hyperlinks
      
elseif (preg_match('!<a href="/(.*?)" title="(.*?)">!'$cut$url_and_title))
      {
        
$key array_search($url_and_title[2], $internalHyperlinks);

        
$searchReplace preg_replace('!<a href="/(.*?)" title="(.*?)!''<!-- mwCMS: "$1" (MediaWiki internal hyperlink) --> <a href="' $key '.htm" title="'$cut);

        
$modifiedLine .= $searchReplace;
      }
(...)
?>

und geändert wird das auf

Code: [Select]
<?php
(...)
// Internal hyperlinks
elseif (preg_match('!<a href="/(.*?)" title="(.*?)">!'$cut$url_and_title))
{
$key array_search($url_and_title[2], $internalHyperlinks);

$searchReplace = ($key != FALSE)
preg_replace('!<a href="/(.*?)" title="(.*?)!''<!-- mwCMS: MediaWiki internal hyperlink with navigation ($1) --> <a href="' $key '.htm" title="'$cut)
preg_replace('!<a href="/[a-z0-9\.\/-]+/(.*?)" title="(.*?)!i''<!-- mwCMS: MediaWiki internal hyperlink WITHOUT navigation --> <a href="MediaWiki_$1.htm" title="'$cut);

$modifiedLine .= $searchReplace;
}
(...)
?>

Gruß
Claus
« Last Edit: Tuesday, July 21, 2009 (17:09) by ClausVB » Logged
Pages: [1] Print 
« previous next »
 


Login with username, password and session length

Powered by MySQL Powered by PHP Powered by SMF 2.0 RC3 | SMF © 2006–2010, Simple Machines LLC Valid XHTML 1.0! Valid CSS!