OTUPUTFILTER: do externals! vs. Sitemap

Wie verwendet man Templates oder erstellt Navigationen und passt diese an.

OTUPUTFILTER: do externals! vs. Sitemap

Beitragvon netmanix » 16. Jan 2009, 12:10

Hallo

ich nutze do externals! und habe ein Problem wenn ich irgendein beliebiges Sitemap-Modul verwende. Wenn sich eine Sitemap auf einer Seite befindet, erhalte ich nur eine leere weiße Seite (keine Fehlermeldung).
Alle anderen Seiten funktionieren einwandfrei mit do externals!
Kann mir da jemand weiterhelfen?


Code: Alles auswählen
<?php
//---------------------------------------------
// do externals!
// REDAXO TEMPLATE
// Version 1.0 (rExtern 1.01)
// Thomas Skerbis
// Stand 26.08.2008
//----------------------------------------------
//
//
//------------------------------------------------
// Basiert auf:
// Wordpress-Plugin: Identify External Links
// Author: Mark Jaquith
// Version: 1.2
// Author URI: http://txfx.net/
//------------------------------------------------

// hier verwendete css-class:  .rextern
// Sofern erwünscht, im Quellcode austauschen




if (!$REX['REDAXO'])
   rex_register_extension('OUTPUT_FILTER', 'rex_external_links');   
     
    function rex_get_domainname_from_uri($uri){
    preg_match("/^(http:\/\/)?([^\/]+)/i", $uri, $matches);
    $host = $matches[2];
    preg_match("/[^\.\/]+\.[^\.\/]+$/", $host, $matches);
    return $matches[0];   
}


function parse_external_links($matches){
    if ( rex_get_domainname_from_uri($matches[3]) != rex_get_domainname_from_uri($_SERVER["HTTP_HOST"]) ){
        return '<a href="' . $matches[2] . '//' . $matches[3] . '"' . $matches[1] . $matches[4] . ' class="rextern" onclick="window.open(this.href); return false;">' . $matches[5] . '</a>';   
    } else {
        return '<a href="' . $matches[2] . '//' . $matches[3] . '"' . $matches[1] . $matches[4] . '>' . $matches[5] . '</a>';
    }
}
   

function rex_external_links($params) {
$rex_content = $params['subject'];   
$pattern = '/<a (.*?)href="(.*?)\/\/(.*?)"(.*?)>(.*?)<\/a>/i';
    $rex_content = preg_replace_callback($pattern,'parse_external_links',$rex_content);
   
    $pattern2 = '/<a (.*?) class="rextern"(.*?)>(.*?)<img (.*?)<\/a>/i';
    $rex_content = preg_replace($pattern2, '<a $1 $2>$3<img $4</a>', $rex_content);
   
    return $rex_content;

   
?>

Benutzeravatar
netmanix
 
Beiträge: 293
Registriert: 11. Sep 2008, 19:35
Wohnort: Wesel

Re: OTUPUTFILTER: do externals! vs. Sitemap

Beitragvon mow » 17. Jan 2009, 23:54

hallo netmanix,

irgendwo im forum gibt es schon was zum thema, ich hab es auf die schnelle gerade nicht gefunden, aber ich mach es so:
1. external-template erstellen:
Code: Alles auswählen
<?php
// Kennzeichnung Externe Links
if (!$REX['REDAXO'])
rex_register_extension('OUTPUT_FILTER', 'rex_external_links');

function rex_external_links($params) {
  $content = $params['subject'];
 
  // hier via regEx alle absoluten, externen Linkadressen heraussuchen
  preg_match_all("/<a[^>]*(href\s*=\s*(\"|')(http(s)?|ftp(s)?|telnet|irc)(?=:\/\/).*?(\"|'))[^>]*>(.*?)<\/a>/ims",$content,$matches);
 
  // doppelte links rausschmeissen
  $matches[1] = array_unique($matches[1]);
 
  // hier jetzt alle gefundenen durchgehen und erweitern
  if ( isset ($matches[0][0]) and $matches[0][0] != '') {
    for ($m = 0; $m < count ($matches[0]); $m++) {
      $external_link = "";
     
      // hier jetzt anhängen: javascript für neues Fenster, class für Kennzeichnung
      // $external_link .= $matches[1][$m].' onclick="window.open(this.href); return false;" class="extern"';
      $external_link .= $matches[1][$m].' class="extern" onclick="window.open(this.href); return false;" title="Externer Link" onfocus="titleAnpassen(this);" onmouseover="titleAnpassen(this);"';
     
      // alte Links mit den modifizierten ersetzen:
      // if(strpos($matches[0][$m],'onclick="window.open(this.href); return false;"') === false) {
      if(strpos($matches[0][$m],' class="extern" onclick="window.open(this.href); return false;" title="Externer Link" onfocus="titleAnpassen(this);" onmouseover="titleAnpassen(this);"') === false) {
        $content = str_replace($matches[1][$m],$external_link,$content);
      }
    }
  }
  return $content;
}
?>
2. external.js erstellen (optional):
Code: Alles auswählen
var externerLinkText = "Externer Link";
var textNeuesFenster = "(öffnet in einem neuen Fenster)";
function titleAnpassen(linkObjekt) {
   if (linkObjekt.getAttribute) {
      textAlt = linkObjekt.getAttribute("title");
      if(textAlt && textAlt.indexOf(textNeuesFenster) == -1) {
         textZusatz = textAlt.substring((textAlt.indexOf(externerLinkText)) + externerLinkText.length, textAlt.length);
         linkObjekt.setAttribute("title", externerLinkText + " " + textNeuesFenster + textZusatz);
      }
   }
}
3. beides im standardtemplate einbinden.
mit dem template werden in den externen links 'class="extern" title="Externer Link"' eingefügt, mit dem optionalen js wird das title-attribut mit '(öffnet in einem neuen Fenster)' ergänzt.
gruss
mow
best viewed with an open mind!
Benutzeravatar
mow
 
Beiträge: 76
Registriert: 2. Jul 2007, 00:49

Beitragvon netmanix » 20. Jan 2009, 15:40

Danke für Deine Lösung. Aber wie bekomme ich es nun hin dass Bildlinks nicht mit dem CSS versehen werden, bzw. wie hebe ich die CSS Definition bei Bildlinks auf. Ich möchte in Textlinks Pfeile darstellen (funktioniert perfekt) aber in/an Bildern möchte diese nicht sehen.

Bei der Lösung von Skerbis funktioniert das, da Bildlinks nicht mit der CSS versehen werden. Aber ebend nicht in Kombination mit Sitemap-Modulen.

Mir fällt auch nicht ein wie ich dies über eine CSS-Definition regeln könnte.

Da IMG nach A folgt und um die Bilder kein weiteres element steht.
( <a.....> <img ....> </img> </a> )
Benutzeravatar
netmanix
 
Beiträge: 293
Registriert: 11. Sep 2008, 19:35
Wohnort: Wesel

Beitragvon mow » 21. Jan 2009, 18:22

hallo netmanix
netmanix hat geschrieben:... Mir fällt auch nicht ein wie ich dies über eine CSS-Definition regeln könnte.
Da IMG nach A folgt und um die Bilder kein weiteres element steht.
( <a.....> <img ....> </img> </a> )
als erstes: 'img hat keinen endtag' :wink:
eine mögliche lösung (ich nehme jetzt mal an, dass du das 'normale' text/bild-textile-modul verwendest):
in der ausgabe des moduls definieren, dass wenn ein externer link mit text existiert, um den text eine 'class' gesetzt wird. diese 'class' enthält dann dein pfeil-bild. im quelltext ergäbe es folgendes bei externen text-links:
Code: Alles auswählen
<a href="http://www.irgend.wo" class="extern" onclick="..." title="..." onfocus="..." onmouseover="..."><span class="noimg">www.irgend.wo</span></a>
und bei externen bilder-links:
Code: Alles auswählen
<a href="http://www.irgend.wo" class="extern" onclick="..." title="..." onfocus="..." onmouseover="..."><img src="..." width="..." height="..." alt="..." /></a>
das css könnte so lauten:
Code: Alles auswählen
.extern .noimg {
padding-left:16px;
background:url(/files/pfeil.gif) no-repeat;
}

gruss
mow
best viewed with an open mind!
Benutzeravatar
mow
 
Beiträge: 76
Registriert: 2. Jul 2007, 00:49


Zurück zu Templates/Navigationen [R4]

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast