cmb69 / foldergallery_xh

Automatic image galleries of whole folders
GNU General Public License v3.0
3 stars 2 forks source link

Plugin call in template #51

Open frase-git opened 1 year ago

frase-git commented 1 year ago

Just now I noticed that a plugin call is also possible in the template. Example: <div><?=foldergallery('UNTERORDNERNAME')?></div> There is nothing about it in the manual. That could be made up if no problems are expected with it.

frase-git commented 1 year ago

Unfortunately, I had to realize now (too late) that the gallery is displayed, but the functionality is not given. In this case, “Photoswipe” is not included correctly. This is a pity, because I would have needed such functionality well.

cmb69 commented 1 year ago

Die Verwendung von Plugin-Aufrufen ist immer möglich (es sind schließlich normale PHP-Funktionen), aber in diesem Fall klappt das je nach konfiguriertem Frontend nicht, da z.B. Photoswipe nach $hjs schreibt, und das kommt beim Pluginaufruf im Template zu spät. Das ist eigentlich ein allgemeines Problem, um das Pluginautoren bislang auf unterschiedliche Weise herumgearbeitet haben (gar nicht nach $hjs schreiben; die nötige Ausgabe in $hjs immer erzeugen; eine zusätzliche Initialisierungs-Funktion im Template aufrufen müssen), oder auch nicht. Das mag ich bei der Foldergallery eigentlich nicht machen. Statt dessen sollte der Core eine Funktion bereitstellen, die man aufrufen kann statt nach $hjs zu schreiben (und wenn head() bereits aufgerufen wurde, dann muss der Core eben nachträglich den <head> manipulieren; nicht schön, und vielleicht auch nicht performant, aber dann wäre dieses leidige Thema vom Tisch).

frase-git commented 1 year ago

Verstehe. Danke. Im speziellen Fall wollte ich mittels Morepagedata eine Galerie über die volle Seitenbreite unterhalb des eigentlichen Inhalts (nicht volle Breite) anzeigen lassen – oder eben nicht. Jetzt muss ich das Template so abändern, dass der normale Inhalt per DIV im Editor markiert werden muss, damit dieser nicht die volle Breite erhält. Unkomfortabel, leider.

cmb69 commented 1 year ago

Du könntest patchen. Es sollte genügen diese Zeilen in eine eigene Funktion auszugliedern, etwa

function init_photoswipe_for_foldergallery() {
    global $hjs;
    // hier die Zeilen einfügen
}

Diese Funktion müsste dann früh im Template aufgerufen werden (vor head()).

frase-git commented 1 year ago

Hm, funktioniert leider nicht.

Uncaught ReferenceError: PhotoSwipe is not defined

frase-git commented 1 year ago

Ich habe jetzt folgendes ins Template geschrieben: (nach <head> und vor <?=head();?>)

<?php
// https://github.com/cmb69/foldergallery_xh/issues/51#issuecomment-1399464588
function init_photoswipe_for_foldergallery() {
    global $hjs;

    $hjs .= sprintf(
        '<link rel="stylesheet" href="./plugins/foldergallery/lib/photoswipe/photoswipe.css">'
    );
    $hjs .= sprintf(
        '<link rel="stylesheet" href="./plugins/foldergallery/lib/photoswipe/default-skin/default-skin.css">'
    );
    $hjs .= sprintf(
        '<script src="./plugins/foldergallery/lib/photoswipe/photoswipe.min.js"></script>'
    );
    $hjs .= sprintf(
        '<script src="./plugins/foldergallery/lib/photoswipe/photoswipe-ui-default.min.js"></script>'
    );
}
init_photoswipe_for_foldergallery()
?>

Und das scheint zu funktionieren. Könnte das Probleme machen?

Die Dateien werden zwar auf allen Seiten eingebunden, das stört aber nicht wirklich.

cmb69 commented 1 year ago

Und das scheint zu funktionieren. Könnte das Probleme machen?

Höchstens, wenn die Foldergallery noch zusätzlich per Pluginaufruf genutzt wird; dann würde das CSS und JS zweimal eingebunden werden. Wahrscheinlich auch kein Problem, aber das ließe sich abfangen (falls relevant, kann ich da noch etwas Code schreiben).

frase-git commented 1 year ago

(falls relevant, kann ich da noch etwas Code schreiben)

Erstmal nicht, danke. Ich überlege gerade, wenn ich sowieso die Galerie nur anzeige, wenn in Morepagedata ein Galeriename vergeben wurde (<?php if(isset($galName)):?>) dann könnte ich ja die Funktion auch davon abhängig machen – oder?

if(isset($galName)) {
    init_photoswipe_for_foldergallery();
}
cmb69 commented 1 year ago

Ja, das sollte funktionieren (du musst die Bedingung halt zweimal schreiben, aber das ist an sich kein Problem).

olape-git commented 1 year ago

Statt dessen sollte der Core eine Funktion bereitstellen, die man aufrufen kann statt nach $hjs zu schreiben (und wenn head() bereits aufgerufen wurde, dann muss der Core eben nachträglich den <head> manipulieren; nicht schön, und vielleicht auch nicht performant, aber dann wäre dieses leidige Thema vom Tisch).

Eigentlich gibt es dafür ja schon XH_afterFinalCleanUp