Page 1 of 3

Navi Script {NAV_VERT_FO:ID,Depth} nicht mit PHP 7 kompatibel

Posted: Wed 14. Nov 2018, 06:00
by Uwe367
Navchdem ich nun schoin mehrmals sah daß die verschiedenen Navigationsscripte im Wiki, die Knut einst schrieb, alle nicht mit PHP 7 kompatibel sind würde ich mich freuen wenn sich das mal jemand anschauen könnte.
Die Funktion preg_replace sowie der Modifiere werden von PHP 7 nicht mehr unterstützt, stattdessen soll perg_replace_callback verwendet werden was ich auch versuchsweise machte.
Wenns denn auch so einfach wäre, aber Pustekuchen.
Nehme ich den Modifier raus und setzte perg_replace_callback an die entsprechende Stelle, so kommt eine Fehlermeldung:
Warning: preg_replace_callback(): Requires argument 2, 'buildNavi_vert("$1","0","$2"-1);', to be a valid callback in
Und schon stehe ich auf dem Schlauch.
Der Code, aus dem der Fehler kommt ist dieser:

Code: Select all

$content["all"] = preg_replace_callback('/\{NAV_VERT_FO:(.*?),(.*?)\}/','buildNavi_vert("$1","0","$2"-1);', $content["all"]);
Im Original sieht die Zeile so aus:

Code: Select all

$content["all"] = preg_replace('/\{NAV_VERT_FO:(.*?),(.*?)\}/e','buildNavi_vert("$1","0","$2"-1);', $content["all"]);
Für jemanden, der sich damit auskennt sicher ein leichtes Spiel und daher frage ich mal ganz freundlich unseren Oliver ob er sich das mal anschauen und vielleicht richten könnte :)
Eines der Scripte, die den Fehler verursachen liegt hier: https://wiki.phpwcms.org/doku.php/deuts ... v_horiz_dd

Die anderen Scripte werden ebenso den gleichen Fehler auslösen, aber ich traue mir zu diese nach einem vorhandenen Beispiel selbst zu korrigieren wenn ich ein Beispiel dafür bekomme.

Oliver... könntest du dir das mal anschauen und ein Beispiel dafür geben wie man das in Ordnung bringen kann?
Wäre wirklich toll und für viele, die diese Scripte noch nutzen, sehr hilfreich.
Vielen Dank.

Re: Navi Script {NAV_VERT_FO:ID,Depth} nicht mit PHP 7 kompatibel

Posted: Sun 18. Nov 2018, 08:45
by Oliver Georgi
Ich habe neulich erst die {NAV_HORIZ_DD} für einen Kunden umgebaut. Das ist ja die gleiche Geschichte. Die habe ich noch weiter aufgeräumt. Aber in der Hauptsache geht es um das Einführen einer Wrapper-Funktion.

Code: Select all

if(strpos($content["all"], '{NAV_VERT_FO') !== false) {
    $content["all"] = str_replace('{NAV_VERT_FO}', '{NAV_VERT_FO:0,100}', $content["all"]);
    $content["all"] = preg_replace_callback('/\{NAV_VERT_FO:(.*?)\}/i', 'buildNavi_vert_wrapper', $content["all"]);
}

function buildNavi_vert_wrapper($matches) {

    $start = 0;
    $counter = 0;
    $depth = 99;

    if (!isset($matches[1]) || empty($matches[1])) {
        return buildNavi_vert($start, $counter, $depth);
    }

    $value = explode(',', trim($matches[1]));

    $start = intval(trim($value[0]));
    if (isset($value[1])) {
        $depth = intval(trim($value[1]));
        if ($depth) {
            $depth = $depth - 1;
        }
    }

    return buildNavi_vert($start, $counter, $depth);
}

Re: Navi Script {NAV_VERT_FO:ID,Depth} nicht mit PHP 7 kompatibel

Posted: Sun 18. Nov 2018, 10:12
by Uwe367
Danke Oliver :)
So wie ich das sehe müßte das ja eigentlich auf alle anderen Scripte, die eine ähnliche Navi erzeugen, anwendbar sein oder?

Re: Navi Script {NAV_VERT_FO:ID,Depth} nicht mit PHP 7 kompatibel

Posted: Sun 18. Nov 2018, 11:11
by Oliver Georgi
Ja, das Prinzip ist immer identisch.

Re: Navi Script {NAV_VERT_FO:ID,Depth} nicht mit PHP 7 kompatibel

Posted: Sun 18. Nov 2018, 17:28
by Uwe367
Ok, Danke für den Hinweis.
Dann werde ich in den nächsten Tagen mal versuchen die Scripte aus dem Wiki enstsprechend zu bearbeiten so daß diese wieder lauffähig sind.

Re: Navi Script {NAV_VERT_FO:ID,Depth} nicht mit PHP 7 kompatibel

Posted: Mon 19. Nov 2018, 10:12
by fhadmin
Oliver Georgi wrote: Sun 18. Nov 2018, 08:45 Ich habe neulich erst die {NAV_HORIZ_DD} für einen Kunden umgebaut. Das ist ja die gleiche Geschichte. Die habe ich noch weiter aufgeräumt. Aber in der Hauptsache geht es um das Einführen einer Wrapper-Funktion.

Code: Select all

if(strpos($content["all"], '{NAV_HORIZ_DD') !== false) {
    $content["all"] = str_replace('{NAV_HORIZ_DD}', '{NAV_HORIZ_DD:0,100}', $content["all"]);
    $content["all"] = preg_replace_callback('/\{NAV_VERT_FO:(.*?)\}/i', 'buildNavi_vert_wrapper', $content["all"]);
}

function buildNavi_vert_wrapper($matches) {

    $start = 0;
    $counter = 0;
    $depth = 99;

    if (!isset($matches[1]) || empty($matches[1])) {
        return buildNavi_vert($start, $counter, $depth);
    }

    $value = explode(',', trim($matches[1]));

    $start = intval(trim($value[0]));
    if (isset($value[1])) {
        $depth = intval(trim($value[1]));
        if ($depth) {
            $depth = $depth - 1;
        }
    }

    return buildNavi_vert($start, $counter, $depth);
}
Ich habe diesen Code in folgendem Script entsprechend eingebunden, doch das Horizontale Menü funkrioniert nicht.

horizontal drop-down with ID output -> NAVI HORIZONTAL DROP-DOWN (Version 1.01 04.09.2010 KH 25.07.07 Oliver Georgi )

Zu sehen hier: Problem: {NAV_HORIZ_DD:0,3} wird nicht angezeigt
http://new.schwarzwaldverein-rheinfelden.de/

Re: Navi Script {NAV_VERT_FO:ID,Depth} nicht mit PHP 7 kompatibel

Posted: Mon 19. Nov 2018, 10:24
by Oliver Georgi
Genau schauen, das ist nur das Prinzip! Braucht Anpassung.

Da habe ich einiges gemixt in dem Beitrag. Habe es jetzt für die vertikale gefixt. Aber ich habe dieses so nicht getestet.

Habe hier nur das horizontale Script gefixt vorliegen. Das ist auch zusätzlich fehlerbereinigt, sodass es keinerlei Errormeldungen mehr wirft.

Re: Navi Script {NAV_VERT_FO:ID,Depth} nicht mit PHP 7 kompatibel

Posted: Tue 25. Dec 2018, 14:10
by Old Boy
Werden denn solche überarbeiteten RT-Scrips, die dann auch in Zukunft lauffähig sein werden, in das Standardpaket einfließen?

Re: Navi Script {NAV_VERT_FO:ID,Depth} nicht mit PHP 7 kompatibel

Posted: Tue 25. Dec 2018, 14:23
by Uwe367
Ich denke das werden externe Scripte bleiben oder aber Oliver nimmt sie, mit etwas Glück :wink: , ins Corepaket auf, überarbeitet sie und schiebt sie in Verzeichnis frontend_render/disabled bzw. frontend_init/disabled. Wäre mit Sicherheit die beste Lösung, aber ich gehe nicht davon aus daß das passiert.

Re: Navi Script {NAV_VERT_FO:ID,Depth} nicht mit PHP 7 kompatibel

Posted: Tue 25. Dec 2018, 17:49
by Oliver Georgi
diese Sachen fließen vermutlich nicht ein

Re: Navi Script {NAV_VERT_FO:ID,Depth} nicht mit PHP 7 kompatibel

Posted: Wed 26. Dec 2018, 08:12
by Uwe367
Oliver Georgi wrote: Tue 25. Dec 2018, 17:49 diese Sachen fließen vermutlich nicht ein
Genau das dachte ich mir. Also werde ich versuchen das ganze entsprechend anzupassen und hoffe auf Hilfe falls ich es nicht hin bekomme.

Re: Navi Script {NAV_VERT_FO:ID,Depth} nicht mit PHP 7 kompatibel

Posted: Wed 26. Dec 2018, 10:21
by Uwe367
Wobei ich auf eine Lösung aufmerksam gemacht wurde, die unabhängig von einer PHP Version läuft. Nämlich das ganze nur rein auf NAV_LIST_UL basierend mit den Parametern, die das System im Core bietet und entsrechendes Javascript und CSS dazu. Wäre wohl zukunftsweisender als PHP Scripte die nach einer gewissen Zeit wieder angepasst werden müßten.

Bzw. um das ganze noch einfacher zu machen.. mit CSS Transitions arbeiten. Wären das Alternativen die man brauchbar umsetzen könnte?
Ähnlich diesem Beispiel: https://www.newmediacampaigns.com/blog/ ... ons-part-2

Re: Navi Script {NAV_VERT_FO:ID,Depth} nicht mit PHP 7 kompatibel

Posted: Thu 27. Dec 2018, 07:16
by Oliver Georgi
Transitions sind nur eine zusätzliche Option. Ich nutze häufiger dann animate.css.

Re: Navi Script {NAV_VERT_FO:ID,Depth} nicht mit PHP 7 kompatibel

Posted: Thu 27. Dec 2018, 16:07
by Uwe367
Oliver Georgi wrote: Thu 27. Dec 2018, 07:16 Transitions sind nur eine zusätzliche Option. Ich nutze häufiger dann animate.css.
Ok... Danke für den Hinweis.
Aber um nochmal auf die JS-Nutzung in Verbindung mit NAV_LIST_UL zurückzukommen. Wäre das vielleicht sinnvoller als PHP Script?
Der einfache User mag mit JS noch einiges hinbekommen, aber bei PHP hörts bei vielen auf da man dazu mehr oder weniger den Core des Systems kennen muß bzw. wie das System arbeitet. Mit JS kann ich mir die Klassen im Quellcode suchen und gezielt darauf triggern.

Re: Navi Script {NAV_VERT_FO:ID,Depth} nicht mit PHP 7 kompatibel

Posted: Thu 27. Dec 2018, 22:01
by Oliver Georgi
mit der NAV_LIST_UL ist es eigentlich nicht nötig, zusätzlich zu programmieren. Dieses Teil kann sehr vieles von Haus aus. Im Endeffekt ist das Thema Navigation fast erschöpft, seit Mobile first greift. Hamburgermenü und fertig.