Oznámení
Odkaz v textu novém okně
před 12 lety
- Juri
- Člen | 6
Zdravím, jak zařídím, aby se mi odkaz v textu otevřel v novém okně?
Vím, že to jde přes
$texy->linkModule->popupOnClick, ale nevím jak postupovat. Předem
děkuji za radu.
Editoval Juri (2. 10. 2007 23:19)
před 12 lety
- David Grudl
- Nette Core | 6806
Otevření odkazu v novém okně a „popup“ není úplně to stejné. Popup je vyskakovací okénko otevřené JavaScriptem (ten může stanovit jeho rozměry apod.), kdežto otevření v novém okně obstarává prohlížeč.
Popup:
"odkaz .[popup]":www.example.com
Odkliknutí zavolá JavaScriptový kód uvedený v
$texy->linkModule->popupOnClick
. Výchozí nastavení volá
return !popup(this.href)
, funkci popup() je potřeba vložit do
kódu. Může vypadat např. takto:
function popup(url) {
var wnd = window.open(url, '', 'status=0,toolbar=0,location=0,scrollbars=1,width=350,height=300,resizable=1,left=150');
return typeof(wnd) == 'object';
}
Více informací třeba u Yuůha.
Otevření v novém okně
Texy nemá přímou podporu, takže zapíšeme s uvedením HTML atributu:
"odkaz .{target:_blank}":www.example.com
Zbytek obstará prohlížeč.
Poznámka: s otevíráním do nových oken zacházej opatrně, obvykle je to spíš na škodu než k užitku
před 11 lety
- krteczek
- Člen | 13
Musím říct, že otevírání do nových oken by byla dobrá volba do nastavení Texy. Například u diskusních fór je lepší, když k otevření do nového okna (dnes už vlastně panelu, myslím že to jde nastavit v prohlížečích) dojde vždy.
Bude lepší když se to nastaví na jednom místě natvrdo, než přidávat nějaký další filtr.
Navíc asi záleží na konfiguraci Texy, protože ani tady, ani na dalších místech kde je nasazena texyla nedojde k vytvoření
<a href="www.example.com" target="_blank">odkaz</a>
ale
<a href="http://www.example.com" rel="nofollow">odkaz</a>
nebo
<a href="http://www.example.com" class="target:_blank">odkaz</a>
Editoval krteczek (16. 5. 2008 14:26)
před 11 lety
- David Grudl
- Nette Core | 6806
Moje chyba, měly tam být složené uvozovky. Předchozí post jsem opravil.
Otevírání do nového okna bude lepší nechat na filtr (handler), využije se to skutečně u minoritního počtu instalací.
před 11 lety
- David Grudl
- Nette Core | 6806
Otevírání odkazů do nového okna by bylo vhodnější vyřešit handlerem. Příklad (netestovaný):
$texy->addHandler('phrase', 'phraseHandler');
/**
* @param TexyHandlerInvocation handler invocation
* @param string
* @param string
* @param TexyModifier
* @param TexyLink
* @return TexyHtml|string|FALSE
*/
function phraseHandler($invocation, $phrase, $content, $modifier, $link)
{
// pokud $link je objekt (třídy TexyLink)
if ($link) {
// uprav jej
$link->modifier->attrs['target'] = '_blank';
}
// další zpracování nech na Texy
return $invocation->proceed();
}
před 11 lety
- David Grudl
- Nette Core | 6806
Druhá (a možná lepší) varianta:
/**
* @param TexyHandlerInvocation handler invocation
* @param string
* @param string
* @param TexyModifier
* @param TexyLink
* @return TexyHtml|string|FALSE
*/
function phraseHandler($invocation, $phrase, $content, $modifier, $link)
{
// vychozí zpracování Texy
$el = $invocation->proceed();
// ověř, že $el je objekt TexyHtml a že jde o element 'a'
if ($el instanceof TexyHtml && $el->getName() === 'a') {
// uprav jej
$el->attrs['target'] = '_blank';
}
return $el;
}