Snippets für das Retten von Originaldateien vor der Installation eines Package oder auch einer komponente

  • Ich musste die Core Dateien für bootstrap selbst übersetzen, weil ich andere Maße brauchte. Damit ich diese Dateien etwas organisiert auf Webseiten einspielen kann, habe ich mir ein Package gemacht. Das Einkopieren darüber geht problemlos, allerdings bräuchte ich bei Deinstallation wieder die Originaldateien ;-)


    Wie macht man das bei Joomla am geschicktesten?


    Der Code kommt natürlich in die Methode uninstall(). Wahrscheinlich müsste ich ein Verzeichnis in media/jui anlegen und die Originaldateien dort hinein schieben - bis zur Deinstallation des Package, oder?


    Danke vorab schon für Hinweise oder bewährte Wege :-)

  • Zitat

    Ich musste die Core Dateien für bootstrap selbst übersetzen, weil ich andere Maße brauchte.


    Wie meinst du das? Die Übersetzung von Joomla kommt von jgerman.de? Für Sprachstrings gibt es die Update sichereren Overrides (BE -> Sprachen -> Overrides -> Neu)


    Wenn du CSS Änderungen meinst würde ich dir eine Custom.css mit den Änderungen vorschlagen. Dazu dann ein Custom CSS Plugin (z.B. das von mir JCCSS)


    Dabei legst du unter /templates/"templatename"/css oder administrator/templates/"templatename"/css eine neue Datei mit dem Namen custom.css an. Diese wird dann nach allen anderen CSS Dateien geladen und kann so alle Änderungen überschreiben.


    Das Änderungen vor Core Dateien kann ich nie empfehlen und das ist immer mit Risiken verbunden z. B. dem Überschreiben durch ein Joomla Core Update. Die custom.css ist Update sicher da Sie vom Updater nicht angefasst wird ;)

  • Um Himmels Willen! Das macht man nicht!


    In Joomla lässt sich alles auf korrektem Wege lösen. Das was Du da machst ist ein No-Go.


    Stell dir vor, der Benutzer deiner Extension macht ein Joomla Update und die "gesicherten" Core-Files werden aktualisiert. Nun deinstalliert er die Extension - dann wird der alte Mist wieder aktiv?!?


    Gerade bei CSS ist es doch sehr einfach, die Standards zu erweitern / anzupassen...

    • Hilfreich

    Du kannst JUI mit diversen Plugins aus dem Template rauswerfen, u.a. JCH oder JS CSS Control. Erst dann bindest du sauber dein eigenes Bootstrap ein.


    Vorbereitung:


    Dafür ziehst du dir die Entwickler-Version von Bootstrap runter (die less-Dateien) und lässt diese über ein less-Plugin nach CSS kompilieren oder bindest einen phpless-Compiler in dein Template ein, der gleiches tut.


    Nachbereitung:


    Nun ist es sinnvoll, zuerst die Datei variables.less abzuändern, diese enthält viele Werte. Leider kann man dort nicht einstellen, welche Elemente man von Bootstrap ausschließen möchte, z.B. Pill-Menüs, Buttons. Um Bootstrap-Elemente auszuschließen, kommentiert man die include-Dateien in der bootrap.less aus oder auch nur Elemente innerhalb der Dateien. Und schließlich wird man - wahrscheinlich - auch noch den dreckigen Weg gehen, und Bootstrap teilweise dann noch in einer CSS-Datei überschreiben.


    Es geht auch mit weniger Aufwand, klar, aber auf diesem Weg ist man sehr flexibel.

  • Erst mal vielen Dank für Eure Gedanken und Vorschläge, da stecken viele gute Ideen drin :-)


    In der Tat hatte mein eigenes Konzept einige Schwächen. Hier ein kurzer Abriss, falls noch jemand mit solchen Gedanken spielt.


    Hatte ein file-Package gemacht und in der preFlight einen Ordner für die Originale angelegt und die Originaldateien einkopiert. Als Ort habe ich administrator/manifests/files genommen, da hier eh ein Ordner fürs package angelegt wird. Konnte allerdings ein Reihenfolgeproblem beim Deinstallieren nicht lösen:


    uninstall ist die einzige Methode, die ich benutzen kann. Sie wird jedoch "vor" den Aufräumarbeiten von Joomla ausgeführt - mit der Folge, daß ich die Originaldateine tatsächlich restaurieren kann, jedoch diese anschließend von Joomla gelöscht werden, was leider ein völlig korrektes Verhalten ist.


    Damit entfällt auch die Idee einen anderen Ordnerort zu wählen.


    Ok, wie geht es weiter?


    Eure Ideen mit den nachrangig ladbaren css Dateien ist tatsächlich der bessere Ansatz. Ich geh also in diese Richtung. Dazu erstmal eine prinzipielle Frage aus der Sicht, daß ich selbst ja das Template entwickeln will und deshalb andere bootstrap Inhalte brauche:


    Ich kann ja dadurch bestimmen, welche css Dateien ich inkludiere. In meinem Fall geht es nur um die Maße im Zusammenhang mit den Spalten. Es würde daher genügen, wenn ich nur bootstrap.css und bootstrap-responsive.css ersetzen würde (hoffe ich ;-) ).


    Was ich nicht recht weiss, ist: Kann es zu einer Situation kommen, in der Komponenten oder Module sich trotzdem die Dateien aus media/jui holen und damit alles durcheinander gerät?


    Oder bin ich auf einer sauberen Seite, wenn ich in der Template index.php einmal festgelegt habe, welche css Dateien benutzt werden sollen?


    Ich weiß, daß sind schon sehr spezielle Fragen, aber viellleicht habt ihr ja trotzdem ein paar Ideen oder Erfahrungen dazu :-)

  • Zitat

    Was ich nicht recht
    weiss, ist: Kann es zu einer Situation kommen, in der Komponenten oder
    Module sich trotzdem die Dateien aus media/jui holen und damit alles
    durcheinander gerät?


    Jede Menge und Konflikte garantiert.


    Also:
    Du legst in deinem Template Overrides an für Jquery, Bootstrap. Das geht sowohl für JS als auch CSS im media/jui/


    Bspw.
    Die eigene "bootstrap.min.js" (muss exakt so heißen, egal was drin ist) also in den Ordner
    /templates/DEINTEMPLATE/js/jui/bootstrap.min.js


    Ebenso für
    jquery-noconflict.js, jquery-migrate.min.js usw. usf.


    Oder
    plumpe Varaiante, nicht ganz schön. Su lässt die obigen Overrides LEER
    und fügst deine eigenen Sachen "ganz normal" im Template ein. Leer
    bedeutet, die Komponenten binden sie zwar via Joomla-Framework ein, aber
    tun halt nix.


    Noch vergessen. Das mit den Overrides klappt dann, wenn man in seinem Template oder andere Erweiterung joomlakonform mit Zeilen arbeitet wie

    Code
    1. // Add JavaScript Frameworks
    2. JHtml::_('bootstrap.framework');