Hallo,
der Titel sagt eigentlich schon alles. Mein Auftraggeber will, dass externe Links in einer neuen Seite geöffnet werden. Ist das irgendwie mit textile umzusetzten?
Hallo,
Wir haben in letzter Zeit festgestellt, dass die Kommunikation via Slack viel schneller und zielführender ist als ein Beitrag im Forum. Aufgrund der neuen und besseren Möglichkeiten der Kommunikation haben wir uns entschlossen das Forum nur noch als Archiv zur Verfügung zu stellen. Somit bleibt es weiterhin möglich hier nach Lösungen zu suchen. Neue Beiträge können nicht mehr erstellt werden.
Wir empfehlen, für deine Fragen/Probleme Slack zu nutzen. Dort sind viele kompetente Benutzer aktiv und beantworten jegliche Fragen, gerne auch von REDAXO-Anfängern! Slack wird von uns sehr intensiv und meistens "rund um die Uhr" benutzt
Selbst einladen kannst Du dich hier: https://redaxo.org/slack/
Wir haben in letzter Zeit festgestellt, dass die Kommunikation via Slack viel schneller und zielführender ist als ein Beitrag im Forum. Aufgrund der neuen und besseren Möglichkeiten der Kommunikation haben wir uns entschlossen das Forum nur noch als Archiv zur Verfügung zu stellen. Somit bleibt es weiterhin möglich hier nach Lösungen zu suchen. Neue Beiträge können nicht mehr erstellt werden.
Wir empfehlen, für deine Fragen/Probleme Slack zu nutzen. Dort sind viele kompetente Benutzer aktiv und beantworten jegliche Fragen, gerne auch von REDAXO-Anfängern! Slack wird von uns sehr intensiv und meistens "rund um die Uhr" benutzt
Selbst einladen kannst Du dich hier: https://redaxo.org/slack/
Mit Hilfe eines kleinen Hacks und etwas JavaScript geht das.
Ich habe gerade etwas dazu fertig gestellt.
Bereite die Daten nur noch schnell auf und werd sie dann veröffentlichen.
Ich habe gerade etwas dazu fertig gestellt.
Bereite die Daten nur noch schnell auf und werd sie dann veröffentlichen.
<?php print $Footer; ?>
Sven
Ich würde ja die Welt verändern,
doch der Quellcode ist mir zu absurd!
REX 5 :: Tricks und Tipps
REX 5 :: Modulesammlung
Wiki zu Redaxo 3 und 4 (!nur noch im Webarchiv!)
Sven
Ich würde ja die Welt verändern,
doch der Quellcode ist mir zu absurd!
REX 5 :: Tricks und Tipps
REX 5 :: Modulesammlung
Wiki zu Redaxo 3 und 4 (!nur noch im Webarchiv!)
Die Implementierung für verlinkte Grafiken hat mich etwas aufgehalten.
Hier nun die Lösung:
Wiki::Textile - Hyperlinks in neuem Fenster öffnen
Getestet mit REDAXO 4.0 und Textile-AddOn 1.0 (gehöhrt zum Redaxopacket).
Hier nun die Lösung:
Wiki::Textile - Hyperlinks in neuem Fenster öffnen
Getestet mit REDAXO 4.0 und Textile-AddOn 1.0 (gehöhrt zum Redaxopacket).
<?php print $Footer; ?>
Sven
Ich würde ja die Welt verändern,
doch der Quellcode ist mir zu absurd!
REX 5 :: Tricks und Tipps
REX 5 :: Modulesammlung
Wiki zu Redaxo 3 und 4 (!nur noch im Webarchiv!)
Sven
Ich würde ja die Welt verändern,
doch der Quellcode ist mir zu absurd!
REX 5 :: Tricks und Tipps
REX 5 :: Modulesammlung
Wiki zu Redaxo 3 und 4 (!nur noch im Webarchiv!)
Hallo Sven
ich hab mich ja noch nicht wirklich mit R4 auseinandergesetzt und von Textile kenn ich nur den Namen und dass es eine Alternative zu TinyMCE ist. Aber wenn ich Deine Lösung (den im Wiki beschriebenen Hack) richtig verstehe, wird die Umsetzung u.a. durch ein in das Template einzubindende JS realisiert.
Die eigentliche Lösung des Problems ist also in das Frontend geschoben. Und da wird dann statt dass Redaxo direkt reinen HTML-Code erzeugt (<a href=... target="_blank">) erst noch JS zwischengeschoben.
Ich krieg immer Anfälle wenn ich auf Webseiten stoße, die mit Java Sachen realisieren, die mit Bordmitteln (HTML/CSS) bereits gelöst sind.
Gibt es überhaupt eine realistische Chance, so ein Problem mit Textile ohne JS im Frontend zu lösen?
Danke und Gruß
Christoph
ich hab mich ja noch nicht wirklich mit R4 auseinandergesetzt und von Textile kenn ich nur den Namen und dass es eine Alternative zu TinyMCE ist. Aber wenn ich Deine Lösung (den im Wiki beschriebenen Hack) richtig verstehe, wird die Umsetzung u.a. durch ein in das Template einzubindende JS realisiert.
Die eigentliche Lösung des Problems ist also in das Frontend geschoben. Und da wird dann statt dass Redaxo direkt reinen HTML-Code erzeugt (<a href=... target="_blank">) erst noch JS zwischengeschoben.
Ich krieg immer Anfälle wenn ich auf Webseiten stoße, die mit Java Sachen realisieren, die mit Bordmitteln (HTML/CSS) bereits gelöst sind.
Gibt es überhaupt eine realistische Chance, so ein Problem mit Textile ohne JS im Frontend zu lösen?
Danke und Gruß
Christoph
Hi Solander,
hier noch mal eine nicht ganz xml saubere Lsg.
Den Code der Klasse (class.textile.inp.php) wie folgt anpassen (function flink Codezeile 765-788)
Achtung: durch das Einfügen des target="blank" wird das Ergebnis zwar Richtig interpretiert ist aber nicht mehr xml valide. Desweiteren werden ALLE externen Links in einem neuen Fenster geöffnet. - dafür ohne JS.
Gruß Thorsten
hier noch mal eine nicht ganz xml saubere Lsg.
Den Code der Klasse (class.textile.inp.php) wie folgt anpassen (function flink Codezeile 765-788)
Code: Alles auswählen
function fLink($m)
{
list(, $pre, $atts, $text, $title, $url, $slash, $post, $tail) = $m;
$atts = $this->pba($atts);
$atts .= ($title != '') ? ' title="' . $this->encode_html($title) . '"' : '';
if (!$this->noimage)
$text = $this->image($text);
$text = $this->span($text);
$text = $this->glyphs($text);
$url = $this->shelveURL($url.$slash);
$out = '<a href="' . $url . '"' . $atts . $this->rel . ' target="blank" >' . trim($text) . '</a>' . $post;
if (($pre and !$tail) or ($tail and !$pre))
$out = $pre.$out.$tail;
// $this->dump($out);
return $this->shelve($out);
}
Achtung: durch das Einfügen des target="blank" wird das Ergebnis zwar Richtig interpretiert ist aber nicht mehr xml valide. Desweiteren werden ALLE externen Links in einem neuen Fenster geöffnet. - dafür ohne JS.
Gruß Thorsten
- Peter.Bickel
- Beiträge: 1856
- Registriert: 25. Jan 2005, 21:17
- Wohnort: Schleswig-Holstein
- Kontaktdaten: Website
Ich mach's immer so (s.u., ganz zu Beginn ins Template schreiben). Die Lösung ist nicht von mir, ich hab das irgendwo aus dem Forum oder dem Downloadbereich, weiß aber nicht mehr, wo.
Auch hier wird JS verwendet, aber ich bevorzuge diesen Weg definitiv angesichts der Tatsache, dass target=_blank nicht Xhtml-valide ist. Erstens kenne ich niemanden, der JS ausgeschaltet hat, und zeitens bekommt der die Links dann halt nicht im neuen, sondern im gleichen Fenster - ist ja nicht schlimm. Bei mir wird auch noch eine Klasse "extern" zugewiesen, so dass man externe Links mit CSS kennzeichnen kann.
Gegenüber Thorstens Ansatz hat meine Lösung de Vorteil, dass man nicht im Core rumfummeln muss (Updatefähigkeit).
Grüße,
Peter.
Auch hier wird JS verwendet, aber ich bevorzuge diesen Weg definitiv angesichts der Tatsache, dass target=_blank nicht Xhtml-valide ist. Erstens kenne ich niemanden, der JS ausgeschaltet hat, und zeitens bekommt der die Links dann halt nicht im neuen, sondern im gleichen Fenster - ist ja nicht schlimm. Bei mir wird auch noch eine Klasse "extern" zugewiesen, so dass man externe Links mit CSS kennzeichnen kann.
Gegenüber Thorstens Ansatz hat meine Lösung de Vorteil, dass man nicht im Core rumfummeln muss (Updatefähigkeit).
Code: Alles auswählen
<?
// -------------------------------------------------------
// 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"';
// alte Links mit den modifizierten ersetzen:
if(strpos($matches[0][$m],'onclick="window.open(this.href); return false;"') === false) {
$content = str_replace($matches[1][$m],$external_link,$content);
}
}
}
return $content;
}
?>
Peter.
- Peter.Bickel
- Beiträge: 1856
- Registriert: 25. Jan 2005, 21:17
- Wohnort: Schleswig-Holstein
- Kontaktdaten: Website
Sollte aber nicht passieren; bei mir klappt das. Es sei denn, Du hast Deine Navigationen so programmiert, dass Du http mit reingsetzt hast.Solander hat geschrieben:pbickel: dein Teil habe ich auch schon versucht, aber irgendwie wurden dann alle Links (auch die Seiteninternen) in einem neuen Fenster geöffnet..
Viele Grüße,
Peter.
Zwei Dinge sollte man dazu beachten.chris-b hat geschrieben:Die eigentliche Lösung des Problems ist also in das Frontend geschoben. Und da wird dann statt dass Redaxo direkt reinen HTML-Code erzeugt (<a href=... target="_blank">) erst noch JS zwischengeschoben.
1. egal welche der Lösungen hier eingesetzt werden, sie sind alle nicht XHTML-Strict tauglich (Textile selbst hat sich aber zum Ziel gesetzt, eben diesem Standard gerecht zu werden)
2. hast du die Wahl, den Code leicht wartbar zu halten (durch Verwendung der JS-Variante) oder bei Updates die Änderungen ständig neu in den Code einbringen zu müssen (siehe Antwort von Thorsten)
... und ich krieg immer Anfälle wenn jemand JavaScript mit java verwechselt (auch wenn es nicht so gemeint war)chris-b hat geschrieben:Ich krieg immer Anfälle wenn ich auf Webseiten stoße, die mit Java Sachen realisieren, die mit Bordmitteln (HTML/CSS) bereits gelöst sind.
Der Vorteil der JS-Variante liegt aber eindeutig darin, dass sie selbst bei abgeschaltetem JS in behindertgerecht eingerichteten Browsern (mit XHTML-Strict geforderter Einstellung) ohne Probleme funktionieren wird (hoffe ich zumindest).
<?php print $Footer; ?>
Sven
Ich würde ja die Welt verändern,
doch der Quellcode ist mir zu absurd!
REX 5 :: Tricks und Tipps
REX 5 :: Modulesammlung
Wiki zu Redaxo 3 und 4 (!nur noch im Webarchiv!)
Sven
Ich würde ja die Welt verändern,
doch der Quellcode ist mir zu absurd!
REX 5 :: Tricks und Tipps
REX 5 :: Modulesammlung
Wiki zu Redaxo 3 und 4 (!nur noch im Webarchiv!)
- Peter.Bickel
- Beiträge: 1856
- Registriert: 25. Jan 2005, 21:17
- Wohnort: Schleswig-Holstein
- Kontaktdaten: Website
Sehe ich genauso.
Es wäre nicht weiter schwierig, in den Redaxokern einen Schalter einzubauen, über den man einstellen könnte, dass alle externen Links in einem neuen Fenster geöffnet werden oder nicht. Aber wozu, wenn diese Option nicht mehr vom W3-Konsortium unterstützt wird, also aussterben wird?
Die Ersetzung bei der Frontend-Ausgabe ist m.E. die flexibelste Lösung. Und wenn Du keine XHTML-konforme JS-Lösung bevorzugst, kannst Du ja meine Funktion so umformulieren, dass ein target=_blank statt des JS-Aufrufs ausgegeben wird.
Auch eine Verwendung des Output-Filter-Addon wäre übrigens denkbar.
Viele Grüße,
Peter.
Es wäre nicht weiter schwierig, in den Redaxokern einen Schalter einzubauen, über den man einstellen könnte, dass alle externen Links in einem neuen Fenster geöffnet werden oder nicht. Aber wozu, wenn diese Option nicht mehr vom W3-Konsortium unterstützt wird, also aussterben wird?
Die Ersetzung bei der Frontend-Ausgabe ist m.E. die flexibelste Lösung. Und wenn Du keine XHTML-konforme JS-Lösung bevorzugst, kannst Du ja meine Funktion so umformulieren, dass ein target=_blank statt des JS-Aufrufs ausgegeben wird.
Auch eine Verwendung des Output-Filter-Addon wäre übrigens denkbar.
Viele Grüße,
Peter.
- Thomas.Blum
- Entwickler
- Beiträge: 5063
- Registriert: 24. Aug 2004, 22:11
- Wohnort: Dresden
- Kontaktdaten: Website