Seite 1 von 1

Neues Browserfenster

Verfasst: Sa 15. Feb 2014, 20:59
von danburdy
Hallo ,

hat schon jemand Erfahrungen mit Version 4.9.* in Sachen "Öffnen in neuem Browserfenster" bzw. "_blank" über die Standardnavigation der 4.9.*?
Ich kannte die Post von älteren Versionen zum Thema, hier haben aber alle Tipps bisher mit 4.9.3 nix gebracht.
Es sollen schlicht und einfach bestimmte Menüpunkte der Hauptnavigation direkt per Mausklick in einem neuen Browserfenster geöffnet werden (externe URL's) ...

Viele Grüße
Daniel

Re: Neues Browserfenster

Verfasst: So 16. Feb 2014, 20:39
von xmurrix
Hallo danburdy,

ich weiß zwar nicht, wie das früher der Fall war, aber du kannst das folgendermaßen lösen:
  • Entweder du setzst das Attribut target="_blank" bei der Ausgabe der Navigation fest, indem du den Wert der URL prüfst, z. B. in der cms/data/modules/navigation_main/template/get.tpl
  • oder du machst das mit JavaScript, einfach nach dem Laden der Seite alle Links analysieren, und solche mit externen URLs in einem neuen Fenster öffnen, siehe http://css-tricks.com/snippets/jquery/o ... ew-window/
Gruß
xmurrix

Re: Neues Browserfenster

Verfasst: Mo 17. Feb 2014, 13:15
von danburdy
Hallo xmurrix ,

vielen herzlichen Dank für Deine Tipps.
Leider bin ich eine "technische Flachzange" und habe die *.get.tpl zwar erweitert, aber nun öffnen sich alle Links in einem neuen Browserfenster.
Muss da eine Abfrage erfolgen, welche steuert, welche Links extern sind?

-------------------------------------------------------------------------------

Die tpl-Datei sieht nun so aus:

{if 0 lt $ulId|strlen}<!-- navigation_main/template/get.tpl -->{/if}

<ul class="{$ulId}">

{foreach from=$tree item=wrapper}
{assign var="idcat" value=$wrapper.idcat}
{assign var="url" value=$wrapper.item->getLink()}
{assign var="name" value=$wrapper.item->get('name')}
{if $idcat|in_array:$path}
{assign var="aClass" value='active'}
{else}
{assign var="aClass" value=''}
{/if}
<li>
<a class="{$aClass}" href="{$url}" title="{$name}" target="_blank">&nbsp;&raquo; {$name}&nbsp;</a>
{if $idcat|in_array:$path}
{include file="navigation_main/template/get.tpl"
tree=$wrapper.subcats path=$path ulId=""}
{/if}
</li>
{/foreach}
</ul>

{if 0 lt $ulId|strlen}<!-- /navigation_main/template/get.tpl -->{/if}



Viele Grüße
Daniel

Re: Neues Browserfenster

Verfasst: Mo 17. Feb 2014, 23:17
von xmurrix
Hallo danburdy,

du solltest vor der Ausgabe des Links prüfen, ob der Inhalt der URL auh eine externe URL ist, z. B.:

Code: Alles auswählen

{if strpos($url, 'http') === 0} 
    <a class="{$aClass}" href="{$url}" title="{$name}" target="_blank">&nbsp;&raquo; {$name}&nbsp;</a>
{else}
    <a class="{$aClass}" href="{$url}" title="{$name}">&nbsp;&raquo; {$name}&nbsp;</a>
{/if}
Das Beispiel deckt aber nicht alle Fälle ab, wenn jemand eine interne Weiterleitung mit Protokoll + Domain angibt, wird der Link dann mit dem Attribut target="_blank" ausgegeben. Entweder man sorgt dafür, dass interne Weiterleitungen nicht mit Protokoll + Domain angegeben werden, oder man muss diesen Fall auch berücksichtigen.

Gruß
xmurrix

Re: Neues Browserfenster

Verfasst: Fr 28. Feb 2014, 09:39
von danburdy
Hallo xmurrix ,

vielen Dank.
Ich habe die "*.tpl" nun entsprechend angepasst, leider öffnet alles weiterhin im gleichen Browserfenster.
Im Backend habe ich bei besagten Artikeln mit externen URL's jeweils den Haken drin, die URL drin und auf "permanent" gestellt.
Müssen hier evt. noch an anderer Stelle im Backend oder in der DB selbst Einstellungen erfolgen?

Viele Grüße
Daniel

Re: Neues Browserfenster

Verfasst: So 31. Aug 2014, 13:09
von McHubi
Hallo,

in den Mandanteneinstellungen kann folgende Variable gesetzt werden
Typ: articles
Name: show-new-window-checkbox
Wert: true

Das führt dazu, dass im Artikelreiter "Eigenschaften" in der Zeile "Weiterleitung eine Checkbox und ein Dropdown zum Thema "neues Fenster" angeflanscht werden. Die zwei Spezis scheinen aber ohne funktion zu sein. Denn ein

Weiterleitung [x] [http://www.irgendwohin.de] [x] [permanent]

führt zwar dazu, dass die Weiterleitung aufgerufen wird - aber nicht im neuen Fenster. :(
Achso, Contenido 4.9.4 mit aktivierten AMR und URL-shortener.

Hat jemand einen Tipp? :D

Re: Neues Browserfenster

Verfasst: So 31. Aug 2014, 22:58
von homtata
Ich habe auch mal ein wenig rumexperimentiert, und denke, die etwas elegantere Art wäre in etwa folgender Weg:

Zusätzlich zu den idcatlang-Infos, die ja in $tree landen, wäre es schick, anhand der dort gespeicherten idartlang für den Startartikel herauszufinden, ob DORT der Haken gesetzt ist für das blank-Fenster.
Voraussetzung: die Mandanteneinstellungen sind wie oben beschrieben gesetzt:
Typ: articles
Name: show-new-window-checkbox
Wert: true

Dann würde man im Navigationsmodul-Output eine neue Klasse einfügen, mit dieser ein leeres Objekt instanzieren, dieses an Smarty übergeben und DORT dann die Funktion aufrufen, die aus der idartlang für den Startartikel checkt, ob dort external_redirect auf 1 (= ja) steht oder nicht.

Im Output sieht das dann wie folgt aus:

Code: Alles auswählen

<?php

/**
 * description: main navigation
 *
 * @package Module
 * @subpackage NavigationMain
 * @version SVN Revision $Rev:$
 *
 * @author marcus.gnass@4fb.de
 * @copyright four for business AG <www.4fb.de>
 * @license http://www.contenido.org/license/LIZENZ.txt
 * @link http://www.4fb.de
 * @link http://www.contenido.org
 */

// assert framework initialization
defined('CON_FRAMEWORK') || die('Illegal call: Missing framework initialization - request aborted.');

// get client settings
$rootIdcat = getEffectiveSetting('navigation_main', 'idcat', 1);
$depth = getEffectiveSetting('navigation_main', 'depth', 3);

// get category tree
$categoryHelper = cCategoryHelper::getInstance();
$categoryHelper->setAuth(cRegistry::getAuth());
$tree = $categoryHelper->getSubCategories($rootIdcat, $depth);

// get path (breadcrumb) of current category
function navigation_main_filter(cApiCategoryLanguage $categoryLanguage) {
	return $categoryLanguage->get('idcat');
}
$path = array_map('navigation_main_filter', $categoryHelper->getCategoryPath(cRegistry::getCategoryId(), 1));
$WindowObj = new NavWindowMode();

// use template to display navigation
$tpl = cSmartyFrontend::getInstance();
$tpl->assign('ulId', 'navigation');
$tpl->assign('tree', $tree);
$tpl->assign('path', $path);
$tpl->assign('common', $WindowObj);
$tpl->display('get.tpl');

class NavWindowMode
{
 
    function getwindowmode($startidartlang) {
        $this->startidartlang = $startidartlang;
		$addinfo = new cApiArticleLanguage($startidartlang);
		return $addinfo->get('external_redirect');
    }
}


?>
und im Smarty wie folgt:

Code: Alles auswählen

{if 0 lt $ulId|strlen}<!-- navigation_main/template/get.tpl -->{/if}

<ul class="{$ulId}">

    {foreach from=$tree item=wrapper}
        {assign var="idcat" value=$wrapper.idcat}
        {assign var="url" value=$wrapper.item->getLink()}
        {assign var="name" value=$wrapper.item->get('name')}
        {assign var="startidartlang" value=$wrapper.item->get('startidartlang')}
        {assign var="windowinfo" value=$common->getwindowmode($startidartlang)}
        {if $idcat|in_array:$path}
            {assign var="aClass" value='active'}
        {else}
            {assign var="aClass" value=''}
        {/if}

        {if $windowinfo eq '1' }
            {assign var="windowmode" value='blank'}
        {else}
            {assign var="windowmode" value=''}
        {/if}

        <li>
            <a class="{$aClass}" href="{$url}" title="{$name}" target="{$windowmode}">{$name}</a>
        {if $idcat|in_array:$path}
            {include file="navigation_main/template/get.tpl"
                tree=$wrapper.subcats path=$path ulId=""}
        {/if}
        </li>
     {/foreach}
</ul>

{if 0 lt $ulId|strlen}<!-- /navigation_main/template/get.tpl -->{/if}
Lässt sich ja immer noch verfeinern, aber scheint mir erstmal sicherer...

Re: Neues Browserfenster

Verfasst: So 29. Jul 2018, 13:05
von McHubi
Hallo zusammen,

ich muss das Thema hier nochmal aufwärmen... Ich bin mir nämlich zu 99,9% sicher, dass das Öffnen im neuen Fenster in der Zwischenzeit nach der 4.9.4 funktioniert hat ohne im Code was anpassen zu müssen.

Eine per navigation_main aufgerufene Kategorie konnte man also - wie schon beschrieben - per

1) Mandanteneinstellung -> Typ: articles | Name: show-new-window-checkbox | Wert: true
2) Artikeleigenschaften -> Weiterleitung: [x] [https://www.domain.de] [x] [permanent]

im neuen Fenster öffnen. Das klappt in der aktuellen 4.9.12er mit php7 nicht mehr. errorlog & Co. spucken nichts verwertbares aus... :|

Aktuell behelfe ich mich damit - da es in diesem Fall auch nur um eine einzige Kategorie geht - damit, in der get.tpl des Moduls navigation_main die idcat zu prüfen um darüber das target-Attribut zu setzen:

Code: Alles auswählen

[...]

{if $idcat==123}
  {assign var="target" value='_blank'}
{else}
  {assign var="target" value='_self'}
{/if}
	
[...]
<a class="{$aClass}" href="{$url}" title="{$name}" target="{$target}">{$name}</a>
Das ist natürlich in punkto Redakteure nicht wirklich prickelnd und die Lösung von homtata entsprechend sinnvoller, aber ich wollte erst mal größere Codeanpassungen vermeiden. Wenn Bug, dann sollte der natürlich behoben und nicht umgangen werden.

Jemand ne Idee? Kann das jemand reproduzieren?

Viele Grüße und Dank für Tipps,


Markus :)

Re: Neues Browserfenster

Verfasst: So 29. Jul 2018, 17:25
von Oldperl
Servus Markus,
McHubi hat geschrieben:
So 29. Jul 2018, 13:05
im neuen Fenster öffnen. Das klappt in der aktuellen 4.9.12er mit php7 nicht mehr.
Den Fehler kann ich so nicht bestätigen. Ich habe hier lokal eine 4.9.12 unter PHP7.0 und MySQL 5.7. Nach dem Aktivieren der von Dir benannten Mandanteneinstellungen und Einrichtung einer entsprechenden Weiterleitung, funktioniert es sowohl mit temporär als auch mit permanent.
Stellt sich mir die Frage ob Du eventuell AMR im Einsatz hast und ob es daran liegt, denn bei mir war der Versuch nun ohne AMR.

Gruß aus Franken

Ortwin

Re: Neues Browserfenster

Verfasst: So 29. Jul 2018, 21:03
von McHubi
Hallo Ortwin,

ja, AMR ist aktiviert (schändlicherweise nicht in meinem Post erwähnt, sorry). War es in der Vergangenheit allerdings auch und es funktionierte. Werde das aber mal morgen testweise deaktivieren und schauen ob sich was ändert. Wenn nicht, werde ich mir wohl homtatas Lösung näher anschauen. Vermutlich aber sowieso, denn ohne AMR ... Nuja...

Danke Dir für Dein feedback! Komm gut in die nächste Woche,

Markus

Re: Neues Browserfenster

Verfasst: So 29. Jul 2018, 21:30
von Oldperl
Servus Markus,

BUG bestätigt!

Mit eingeschaltetem AMR funktioniert die Weiterleitung nicht. Ich wer mir das mal anschauen. Eventuell kann ja auch Murat mal schauen, der kennt AMR ja wie seine Westentasche.

Gruß aus Franken

Ortwin

Re: Neues Browserfenster

Verfasst: So 29. Jul 2018, 23:22
von Oldperl
@Markus,

kannst Du mal bitte in den Mod-Rewrite-Einstellungen den Wert von "Prozentsatz für ähnliche Kategorie-Pfade in URLs" schrittweise herabsetzen und schauen ob es dann geht?

Gruß aus Franken

Ortwin

Re: Neues Browserfenster

Verfasst: Mo 30. Jul 2018, 07:11
von McHubi
Hallo Ortwin,

mach ich. Komm da allerdings erst heute Abend zu... Bis dahin...

Re: Neues Browserfenster

Verfasst: Di 31. Jul 2018, 17:37
von McHubi
Hallo Ortwin,
kannst Du mal bitte in den Mod-Rewrite-Einstellungen den Wert von "Prozentsatz für ähnliche Kategorie-Pfade in URLs" schrittweise herabsetzen und schauen ob es dann geht?
War auf den Standardwert 75 eingestellt. Bei 50, 25 und 0 gab es keine Veränderung im Verhalten. Hatte vor jedem neuen Test auch den Browsercache vollständig geleert und auch unter Administration -> System -> Bereinigung beim Mandanten den Code Cache gelöscht, Codegenerierung erzwungen, die Cache-Dateien gelöscht und auch den Contenido-Cache gelöscht.

Soviel erst mal von meiner Seite... Um die Lösung von homtata zu testen, bräuchte ich noch was länger.

VG,

Markus

Re: Neues Browserfenster

Verfasst: Sa 30. Mär 2019, 04:05
von McHubi
Um die Lösung von homtata zu testen, bräuchte ich noch was länger.
Mittlerweile schon fast ne Ewigkeit her, aber homtatas Lösung funktioniert wunderbar. :D