Oznámení

Provoz fóra byl ukončen

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

krteczek
Člen | 13

V nové verzi Texyly je tohle již vyřešeno. Podrobnosti v knize návštěv

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;
}