Neuigkeiten
  • Die modified eCommerce Shopsoftware ist kostenlos, aber nicht umsonst.
    Spenden
  • Damit wir die modified eCommerce Shopsoftware auch zukünftig kostenlos anbieten können:
    Spenden
  • Thema: BETA MODUL: Modulestore / Marktplatz für Modified Module - MMLC

    awids

    • Experte
    • Beiträge: 3.790
    • Geschlecht:
    Re: BETA MODUL: Modulestore / Marktplatz für Modified Module - MMLC
    Antwort #45 am: 22. November 2020, 11:32:19
    Schon seit letzter Nacht (~03:30 Uhr) werden mir auf der Seite https://module-loader.de/modules/ gar keine Module mehr angezeigt und im MMLC in meinem Test-Shop nur noch die installierten Module. Soll das so sein (z. B. weil ihr gerade etwas bearbeitet und dafür etwas "vom Netz genommen" habt)?

    RobinTheHood

    • Experte
    • Beiträge: 205
    • Geschlecht:
    Re: BETA MODUL: Modulestore / Marktplatz für Modified Module - MMLC
    Antwort #46 am: 22. November 2020, 12:22:11
    Hallo awids,

    danke für deinen Hinweis. Die Module werden jetzt wieder alle angezeigt. Es kann zurzeit noch zu Problemen führen, wenn man Module aus dem MMLS entfernt. Auf dem Server arbeiten wir mit einem Cache. Der wird dann nicht neu aufgebaut und er versucht Dateien zu laden, die sich aber nicht mehr im Verzeichnis befinden. Hier wurde zur Sicherheit ein Abbruch eingebaut, damit keine Dateien ausgespielt werden, die nicht mehr gewünscht sind. Der hat gegriffen und es wurde nichts mehr angezeigt. Gut dass das gerade aufgetaucht ist, dann kann ich das jetzt mit auf die TODO Liste schreiben.

    Mit besten Grüßen und dir auch einen schönen Sonntag
    Robin

    awids

    • Experte
    • Beiträge: 3.790
    • Geschlecht:
    Re: BETA MODUL: Modulestore / Marktplatz für Modified Module - MMLC
    Antwort #47 am: 23. November 2020, 11:51:38
    Euer Cache ist echt hartnäckig. Es wird seit gestern (früher) Nachmittag immer noch ein Paket (aw-product-flags) angezeigt, dass ich längst gelöscht und durch ein anderes (am-product-flags) ersetzt hatte.

    Ihr solltet wirklich das automatische Leeren des Caches bei Paketlöschung anstoßen oder die Cache-Lifetime herunterschrauben.

    RobinTheHood

    • Experte
    • Beiträge: 205
    • Geschlecht:
    Re: BETA MODUL: Modulestore / Marktplatz für Modified Module - MMLC
    Antwort #48 am: 23. November 2020, 20:02:28
    Hallo awids,

    das von dir beobachtete Verhalten mit dem Cache ist nicht gewollt. Ich schaue mir an, wieso der Cache so lange aufrecht erhalten bleibt.

    Mit besten Grüßen
    Robin

    hpzeller

    • Experte
    • Beiträge: 4.130
    • Geschlecht:
    Hallo Robin,

    erst einmal Danke für das innovative Modul, so und nun gleich zu meinem Problem. Der Link "zurück zum Shopadmin" in meiner MMLC Installation sieht bei mir so aus -> domain.tld/admin_***/start.php er müsste aber so aussehen -> domain.tld/verzeichnis/admin_***/start.php

    Ist das ein Bug oder habe ich einen Fehler bei der Installation des MMLC gemacht?

    Gruss
    Hanspeter

    RobinTheHood

    • Experte
    • Beiträge: 205
    • Geschlecht:
    Hallo Hanspeter

    vielen dank für deine Nachricht. Du hast nichts falsch gemacht. Das ist ein Fehler in "/src/Templates/Navi.tmpl.php" vom MMLC. Wenn du Interesse hast, kannst du gerne ein Issue dazu auf GitHub aufmachen. (https://github.com/RobinTheHood/ModifiedModuleLoaderClient/issues). Ansonsten werde ich das aber auch gern für dich übernehmen.

    PS: Freue mich über dein Adminer Modul.

    Mit besten Grüßen und einen schönen Abend
    Robin

    hpzeller

    • Experte
    • Beiträge: 4.130
    • Geschlecht:
    Hallo Robin,

    wäre folgender Code in der "/src/Templates/Navi.tmpl.php"

    Code: XML  [Auswählen]
    <a class="icon externalLink" href="<?php echo '//' . rtrim($_SERVER['HTTP_HOST'], '/') . str_replace($_SERVER['DOCUMENT_ROOT'], '', ShopInfo::getAdminPath()) . '/start.php' ?>">

    als Ersatz für

    Code: XML  [Auswählen]
    <a class="icon externalLink" href="<?php echo '//' . rtrim($_SERVER['HTTP_HOST'], '/') . '/' . ShopInfo::getAdminDir() . '/start.php' ?>">

    eine gute Lösung für das Problem?

    PS:
    Ich habe den Code jetzt mal so wie oben beschrieben in meiner Installation eingebaut. Bei meiner Installation funktioniert es so.

    Gruss
    Hanspeter

    RobinTheHood

    • Experte
    • Beiträge: 205
    • Geschlecht:
    Hallo Hanspeter,

    Danke für deinen Code.

    Das sieht schon mal nach einem super Ansatz aus. Hab‘ auch schon dein Issue gesehen. Vielen Dank. Ich hab den Code noch nicht ausprobiert. Komme erst am Montag dazu. Schreibe gerade vom Smartphone. Dein Code baue ich gerne ein. Wenn du weißt, wie man ein PullRequest (PR) bei GitHub macht, hast du auch die Möglichkeit selbst Änderungen am Code direkt einzureichen. Aber ich übernehme und teste das auch gerne ohne das du ein PR machen musst. Wünsche dir einen schönen Abend. Beste Grüße Robin.

    hpzeller

    • Experte
    • Beiträge: 4.130
    • Geschlecht:
    Hallo Robin,

    ich habe mir das noch einmal überlegt, eigentlich sollte man ja PHP-Logik aus Templates raus alten, so gesehen ist meine Idee nicht so gut, besser wäre es wohl wenn man in der ShopInfo eine zusätzliche Methode für den Link einfügen würde, dabei könnte man in diese den $_SERVER['HTTP_HOST'] gleich mit integrieren. Aber ich überlasse es natürlich dir wie du das löst.

    Gruss
    Hanspeter

    RobinTheHood

    • Experte
    • Beiträge: 205
    • Geschlecht:
    Hallo Hanspeter,

    die Idee gefällt mir "natürlich" noch viel besser. Mir gefällt deine Herangehensweise. Ich bin ja (auch) ein Fan von Clean-Code. Das in die Klasse "ShopInfo" auszulagern ist eine gut Idee den Code übersichtlicher und sauberer zu gestalten.

    Wie bereits erwähnt, schreibe ich mir das alles auf meine Liste. Falls du ein PullRequest machst, bevor ich dazu komme den Code selbst zu ändern, fließt dein Vorschlag auch direkt ein. Oder ein Dritter nimmt sich dem an. Da du ja bereits freundlicherweise ein Issue erstellt hast. Das kommt hier und da mal vor, besonders da ich es als "good first issue" markiert habe.

    Danke für deinen Beitrag.

    Mit besten Grüßen und einen schönen Abend
    Robin

    Timm

    • Fördermitglied
    • Beiträge: 6.343
    Moin

    Kann es sein, dass der MMLC unter bestimmten Voraussetzungen fälschlicherweise zwei Ordner im root des Shops anlegt statt eine Ebene höher im Ordner /ModifiedModuleLoaderClient, wenn man darüber ein Modul installiert?  Es geht um das Verzeichnis /vendor und /vendor-no-composer.

    Gemeldet wurde das hier: MODUL: Amazon Pay für modified eCommerce Shopsoftware. Und einige Beiträge darüber.

    Das führte dazu, dass Amazon Pay nicht funktionierte und im Backend weiße Seiten entstanden, da Amazon Pay die gleichen Composer Dateien in einem eigenen vendor Ordner nutzt.

    Fehlermeldung mod_admin_error.log

    Code: XML  [Auswählen]
    [2021-08-03 20:56:00] [error] [modified] [pid:12357] Cannot declare class Composer\Autoload\ClassLoader, because the name is already in use in File: /var/www/clients/.../.../web/vendor/composer/ClassLoader.php on Line: 43 {} {}

    Gruss Timm

    RobinTheHood

    • Experte
    • Beiträge: 205
    • Geschlecht:
    Guten Morgen Timm,

    hab' vielen Dank für deine Nachricht. Gut das du das hier schreibst, ich habe nicht in den Thread des Amazon Pay Moduls geschaut. Das hätte ich sicherlich übersehen.

    Ich denke, dass du recht hast. Der MMLC ist tatsächlich indirekt das Problem, der installiert manchmal ein Modul mit dem Namen "Composer Autoload". (https://module-loader.de/modules/composer/autoload), wenn ein anderes Modul den Autoloader von Composer benötigt. Das Modul wird jedoch nicht immer benötigt. Also trifft dein "unter bestimmten Voraussetzungen" sehr gut zu. Wenn andere externe Module auch Composer mitbringen, kann es (oder wird es sehr wahrscheinlich) zu einem Konflikt/Error kommen.

    Ich (oder man) könnte versuchen in /vendor/composer/ClassLoader.php eine "Weiche" einzubauen, die zuvor prüft, ob es bereits einen anderen ClassLoader (bzw. eine Klasse mit dem Namen ClassLoader im Namespace Composer\Autoload) gibt und dann die Datei nicht mehr laden. Ich müsste vorher aber prüfen was für Seiteneffekte das auf die MMLC Module hätte. Vielleicht gibt es auch noch andere Möglichkeiten.

    Sollte es mit meinem Vorschlag gehen, wird es eine neue Version des Moduls "composer/autoload" im MMLC geben. Das Modul taucht dann unter Updates im MMLC mit auf. Wahrscheinlich sind dann in Version 1.2.2 oder 1.3.0 die entsprechenden Anpassungen gemacht.

    Danke für deine Hilfe. Für weitere Fragen stehe ich gerne zur Verfügung.

    Ich wünsche dir einen schönen Tag und mit besten Grüßen
    Robin

    RobinTheHood

    • Experte
    • Beiträge: 205
    • Geschlecht:
    Nachtrag:

    Ich habe eben noch einmal geschaut, im MMLC in vendor-no-composer/autoload.php wird bereits geprüft, ob es bereits eine Klasse mit dem Namen \Composer\Autoload\ClassLoader gibt. Und der MMLC Composer wird nur geladen, wenn kein anderer Composer gefunden wurde.

    Code: PHP  [Auswählen]
    ...
    $class = '\Composer\Autoload\ClassLoader';
    if (!class_exists($class, false)) {
        require_once DIR_FS_DOCUMENT_ROOT . '/vendor/composer/ClassLoader.php';
    }
    ...

    In diesem Fall müsste das Amazon Modul selbst kontrollieren, ob nicht bereits Composer installiert ist, da dass Amazon Modul wohlmöglich später geladen wird und dann existiert bereits die Klasse. Da auch andere Module abseits des MMLCs hier und da mal Composer mitbringen, könnte es dann auch mit anderen Modulen zu Konflikten kommen, wenn ich keinen Gedankenfehler habe. Hmmm

    Mit besten Grüßen
    Robin

    Timm

    • Fördermitglied
    • Beiträge: 6.343
    Moin Robin

    Ehrlich gesagt hab ich keinen Plan wofür Composer autoload benötigt wird. Scheinbar wird es aber von mehreren Programmen benötigt.

    Idee:
    1) Entweder jedes Modul (nicht nur die im MMLC sondern auch Amazon Pay zb), dass diese Erweiterung nutzt, überprüft, ob es schon von einer anderen Erweiterung geladen wurde. Dann müssten alle Entwickler ihre Module dahingehend anpassen, wenn nicht schon integriert.

    Eventuell ist solch eine Prüfung standardmäßig aber schon Pflicht und wurde bei dem angesprochenen Videomodul oder dem Amazon Pay Modul nicht berücksichtigt.

    Ich hab von einem Entwickler ein my_sql_tool Ordner im root, dass auch solch einen /vendor Ordner hat mit Composer und autoload etc, was aber auch in Verbindung mit Amazon Pay keine Probleme macht. Vielleicht liegt es also nur an dem Videomodul, dass man im MMLC runterladen kann.

    2) Andere Idee wäre gewesen einen festgelegten Ordner für diese Dateien vorzugeben. Dann hätte man den Composer nur einmal auf dem Server und alle Module müssten sich den dann von dort holen. Gibt aber wieder Kompatibilitätsprobleme wenn die Module unterschiedliche Versionen des Composers nutzen. Das wird aber auch nicht umsetzbar sein, da etliche Drittanbietermodule ihre eigenen /vendor Ordner haben und kein Entwickler das extra anpassen möchte, um sie im Modifiedshop zu nutzen.

    Gruß Timm

    Timm

    • Fördermitglied
    • Beiträge: 6.343
    Ich frage mal beim Entwickler des Amazon Pay Moduls nach, ob das Modul prüft, ob die Klasse schon geladen wurde.

    Danke dir.

    EDIT:
    Könnte es sein, dass das Videomodul diese Klasse nochmal aufruft? Ich hatte mir, um eine Antwort im Amazon Pay thread zu schreiben mal den MMLC direkt auf Platte gezogen. Dort gibt es den /vendor Ordner bereits im Ordner /ModifiedModuleLoaderClient. Wenn das Videomodul nun noch im root des Shops diesen Ordner erstellt, dann gibt es ihn zweimal. Vielleicht ist das das Problem.
    Modulshop - Eine große Auswahl an neuen und hilfreichen Modulen für die modified eCommerce Shopsoftware
    32 Antworten
    6006 Aufrufe
    06. Oktober 2020, 21:18:31 von p3e
    2 Antworten
    2680 Aufrufe
    06. November 2012, 05:52:49 von Spegeli
    106 Antworten
    52056 Aufrufe
    06. März 2021, 19:27:04 von awids