CSS Datei gegen andere im Override austauschen

  • Das hängt auch davon ab, wie denn die CSS-Datei überhaupt geladen wird. Verwendet das Template eine joomla.asset.json? Kannst du eine solche verwenden, ohne, dass sie bei jedem Template-Update wieder gelöscht wird? Um welche CSS-Datei handelt es sich? Wird sie vom Joomla-Core geladen oder kommt sonstwo her?


    Usw. usf.


    Jedenfalls wäre in Joomla 4 die eigene joomla.asset.json die "einfachste" Variante Ladepfade umzubiegen, wenn denn die Bedinh´gungen gegeben sind.

  • Danke für die Antwort. Das habe ich mir auch schon angeschaut.


    Aber das Laden mit der joomla.asset.json funktioniert bei mir irgendwie nicht. Wenn ich

    $wa->registerAndUseStyle('mycss', mypath);

    verwende geht es. Also dachte ich, dass ich einen Schritt weiter bin. Aber:

    $wa->disableStyle('mycss');

    im Override bringt mir den Fehler, dass das nicht geladen ist :(

  • Versteh nicht so ganz, warum du da so ein Geheimnis draus machst, um was für Dateien es eigentlich geht und wer die eigentlich lädt und an welcher Stelle du die eigentlich überschreiben willst ;)


    Core-CSS und -JS sind kreuz und quer in Core-Dateien mit Namen joomla.asset.json verteilt.


    Legt man nun in seinem Template ebenfalls eine joomla.asset.json an, kann man dort die Ladepfade überschreiben oder sogar gänzlich unterdrücken.


    Beispiel: JQuery.


    - In der Core-Datei media/vendor/joomla.asset.json finde ich den Pfad, den Joomla verwendet (hier relativ zum /media/-Ordner (muss aber nicht sein).

    Code
    ...
    {
    "name": "jquery",
    "type": "script",
    "uri": "vendor/jquery/jquery.min.js",
    "package": "jquery",
    "version": "3.6.0"
    }
    ...

    - Wenn ich nun das Laden von JQuery durch den WAM ganz verhindern möchte, trage ich in meine Template joomla.asset.json ein

    Code
    ...
    {
    "name": "jquery",
    "type": "script",
    "uri": ""
    }
    ...

    - Möchte ich eine andere Variante verwenden, trage ich ein:

    Code
    {
    "name": "jquery",
    "type": "script",
    "uri": "plg_system_bs3ghsvs/jquery/jquery.slim.min.js"
    },

    also bei mir aus dem Ordner

    Code
    /media/plg_system_bs3ghsvs/jquery/jquery.slim.min.js

    - oder was komplett anderes, wannimmer der WAM JQuery anfragt:

    Code
    {
    "name": "jquery",
    "type": "script",
    "uri": "komplett/anderer-pfad/komplett-andere-datei.js"
    },

    Das meinte ich mit "einfachen" Overrides.


    Voraussetzung ist natürlich auch, dass der WAM überhaupt ins Spiel gebracht wurde.


    Und natürlich kann man in seiner eigenen Template-joomla.asset.json eigene Ladezeilen einsetzen für eigene Dateien. Im Cassiopeia kann man so was sehen.

    Weil ich aber nichts über dein Szenario weiß, halt nur so als Crash-Kurs ;) Ein paar Haken und Ösen gibt es natürlich trotzdem noch, wenn die Dependencies anderer Assets ins Spiel kommen.

  • Aber das Laden mit der joomla.asset.json funktioniert bei mir irgendwie nicht. Wenn ich

    $wa->registerAndUseStyle('mycss', mypath);


    verwende geht es. Also dachte ich, dass ich einen Schritt weiter bin. Aber:

    Wenn du registerAndUse verwendest, brauchst du kein json file, Name des Styles muss eindeutig sein, der Pfad muss existieren

    $wa->disableStyle('mycss');

    warum zuerst laden und dann disablen? Verstehe ich nicht..

  • Einfach mal lesen.

    warum zuerst laden und dann disablen? Verstehe ich nicht..

    Hallo, ich würde gerne in einem Override eine CSS Datei gegen eine andere austauschen.

    Versteh nicht so ganz, warum du da so ein Geheimnis draus machst, um was für Dateien es eigentlich geht und wer die eigentlich lädt und an welcher Stelle du die eigentlich überschreiben willst

  • Sorry. Ich wollte da kein Geheimnis draus machen. Also, das Template habe zum Üben ich selbst geschrieben. Das funktioniert auch fast alles so wie ich mir das vorstelle. Nur beim Frontendediting kann ich keine Bilder einfügen.

    Beim Herumprobieren habe ich herausgefunden. Dass alles zwar nicht schön aussieht, aber funktioniert, wenn die CSS-Datei nicht geladen wird.

    Ich habe den WMA zwar nicht verstanden, aber ich habe es ja geschafft, dass in der index.php per $wa->registerAndUseStyle('mycss', mypath); meine CSS-Datei geladen wird. Das sehe ich im Quelltext. Nun würde ich gerne verstehen, warum im Override vom Frontendeding edit.php $wa->disableStyle('mycss'); nicht klappt.

  • Nun würde ich gerne verstehen, warum im Override vom Frontendeding edit.php $wa->disableStyle('mycss'); nicht klappt

    Wenn dich richtig verstehe funktioniert das nicht, weil ein Override vor dem "eigentlichen" Template aufgerufen wird. Da ist die CSS-Datei noch gar nicht im WebAsset Manager vorhanden.

  • OK. Aber ist es tatsächlich mit Joomla 4 nicht mehr möglich etwas zu deaktivieren? Wofür gibt es denn dann die disableScript und disableStyle Funktion?

    Du arbeitest doch mit einem eigenen Template. Vielleicht ist eine Möglichkeit im Template nur das Passende zu laden?


    Code
    if ($layout !== "edit") {
        $wa->registerAndUseStyle('meinName' , JUri::root() . 'templates/' . $this->template . '/css/nichtimEditLayout.css');
    }
    
    if ($layout == "edit") {
        $wa->registerAndUseStyle('meinName' , JUri::root() . 'templates/' . $this->template . '/css/imEditLayout.css');
    }