Ankündigung

Einklappen
Keine Ankündigung bisher.

Erweiterungen - Der beste Weg

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Erweiterungen - Der beste Weg

    Hallo

    viele von euch haben sicher schon mal eine Erweiterung für ein CMS o.Ä. erstellt. Bei manchen ist es recht einfach. Man legt einen Ordner an und darin werden dann alle Dateien für das Modul gespeichert.
    Aber viele Systeme haben eine andere Struktur. So kann es z.B. bei MVC(L) schon so sein, dass man für Admin und Front 8 Pfade hat. Und dann immer alles von Hand zu kopieren ist auch sehr, nun nennen wir es mal langweilig...

    Mir würde spontan nur GIT einfallen, wobei ich nicht weiß, ob man alle Änderungen irgendwie in einen Ordner laden kann.

    Wie macht ihr das?
    Der Unterschied zwischen dem richtigen Wort und dem beinahe richtigen ist derselbe Unterschied wie zwischen dem Blitz und einem Glühwürmchen.


  • #2
    Wenn etwas kompliziert wird, baut man einen Installer.
    [URL="https://gitter.im/php-de/chat?utm_source=share-link&utm_medium=link&utm_campaign=share-link"]PHP.de Gitter.im Chat[/URL] - [URL="https://raindrop.io/user/32178"]Meine öffentlichen Bookmarks[/URL] ← Ich habe dir geholfen ? [B][URL="https://www.amazon.de/gp/wishlist/348FHGUZWTNL0"]Beschenk mich[/URL][/B].

    Kommentar


    • #3
      Für den Fall, dass etwas kompliziert sein kann, bauen die Menschen ein Spezialist.
      NoorAlamShahzad

      Kommentar


      • #4
        Hallöchen,

        ich verstehe die Frage nicht so ganz. Ich schaue mir aktuell OctoberCMS ein wenig genauer an und dort hat man für eigene Plugins genau ein Verzeichnis - /plugins/<vendor>/<plugin>/. Darin befinden sich alle für das Plugin notwendigen Assets, Klassen, Konfigurationen, Sprachdateien, whatever. Über definierte Schnittstellen kann man System-Menüs um eigene Einträge und Konfigurations-Oberflächen erweitern. Alle Aktionen passieren also innerhalb des Plugins. Die spätere Installation erfolgt über den integrierten Installer. It's really that simple.

        Viele Grüße,
        lotti

        Kommentar


        • #5
          Das ist ähnlich eines Bundles in Symfony aufgebaut. Mittels Schnittstellen (Registry, Hooks, ...) kann man ein System bauen, dass sich modifizieren lässt.

          Das Einbauen des Plug-Ins ist auf jeden Fall einfacher als das System dahinter zu bauen, dass das Plug-In akzeptiert und korrekt verarbeitet.
          GitHub.com - ChrisAndChris - RowMapper und QueryBuilder für MySQL-Datenbanken

          Kommentar


          • #6
            Da habt ihr Recht. Nur kann ich wohl schlecht den Entwicklern von System sagen, dass die das ganze System umschreiben müssen, weil ich keine Lust habe Ordner zu kopieren.

            Zu meinem Problem:
            Die Struktur vom System ist z.B.



            Das ist nur /admin. Wenn du mehrere Ebene hast, kann es schnell mal sein, dass du echt verdammt viele Dateien in unterschiedlichen Pfaden hast.
            Bis vor etwa einem Jahr habe ich es wirklich so gemacht, dass ich einen Order "MyModule" erstellt habe und dann jeden Unterordner von Hand erstellt und die Daten kopiert habe.
            Danach konnte man den Ordner auf den FTP laden und das Modul war "eingebaut". Da die Anzahl der Pfade und Ordner immer mehr wurde, habe ich mir ein Script geschrieben, dass mir zumindest ein Grundgerüst der Ordner anlegt. Löschen war ja immer noch schneller als selber zu erstellen und zu benennen. Aber dennoch muss ich die Dateien von Hand kopieren.
            Aber auch das kostet mir einfach noch zu viel Zeit. Bei größeren Erweiterungen sitze ich gut und gerne mal eine Stunde am kopieren und prüfen. Mal davon abgesehen, dass die Arbeit echt Sch... ist, habe ich besseres zu tun als Order und Dateien von Hand zu kopieren.
            Der Unterschied zwischen dem richtigen Wort und dem beinahe richtigen ist derselbe Unterschied wie zwischen dem Blitz und einem Glühwürmchen.

            Kommentar


            • #7
              Mal ganz abstrakt:

              Mache einen Ordner /vendor/ wo du deine Plug-Ins drin hast.
              /vendor/plugin1/
              /vendor/plugin2/
              ...

              Dann überschreibst du den Autoloader so, dass er sich zuerst aus vendor/plugin*/{path} die Datei sucht zu holen und erst wenn das nicht möglich ist unter root/{path} sucht. Somit kannst du einfach Klassen aus dem System überschreiben/erweitern und deine Plug-Ins einbringen.
              GitHub.com - ChrisAndChris - RowMapper und QueryBuilder für MySQL-Datenbanken

              Kommentar


              • #8
                Ich finde diese Lösung auch sehr gut. Aber wie bereits gesagt, geht es hier nicht um meine Systeme. Ich kann doch Anderen nicht vorschreiben, wie sie ihre System gestalten müssen...
                Der Unterschied zwischen dem richtigen Wort und dem beinahe richtigen ist derselbe Unterschied wie zwischen dem Blitz und einem Glühwürmchen.

                Kommentar


                • #9
                  Hallöchen,

                  ergänzend muss man sagen, dass die Ordnerstruktur des von dir verwendeten Systems sub-optimal ist. Spätestens seit einiger großer Projekte weiß ich, dass es sinnvoller ist das Projekt in Features / Komponenten zu gliedern. Damit behält man auch bei einer großen Anzahl an Controllern, Models, usw. recht gut den Überblick.

                  Zitat von SteiniKeule Beitrag anzeigen
                  Ich finde diese Lösung auch sehr gut. Aber wie bereits gesagt, geht es hier nicht um meine Systeme. Ich kann doch Anderen nicht vorschreiben, wie sie ihre System gestalten müssen...
                  Aber du hast die Option das System nicht zu nutzen / dich für ein anderes zu entscheiden. Zumindest hast du bisher nichts gegenteiliges erwähnt. Ansonsten finde ich den Hinweis von ChristianK doch recht nützlich. Ein VCS wäre natürlich auch eine Möglichkeit, aber einen ordentlichen Deployment-Prozess sollte man schon anstreben.

                  Viele Grüße,
                  lotti

                  Kommentar


                  • #10
                    Ich kann doch Anderen nicht vorschreiben, wie sie ihre System gestalten müssen...
                    Ich glaube, Du hast ChristianK nicht richtig verstanden.
                    DU überschreibst den System-Standard für Dein Projekt, nicht der Hersteller/Entwickler des Systems.
                    Competence-Center -> Enjoy the Informatrix
                    PHProcks!Einsteiger freundliche TutorialsPreComposed Packages

                    Kommentar


                    • #11
                      Könnte ich mir mein System aussuchen, wäre ich bei Laravel und wir würden diese Unterhaltung nicht führen
                      Wie das Thema schon sagt, geht es darum Erweiterungen zu erstellen. Ich könnte mit meiner Erweiterung natürlich Änderungen am Core machen. Es war aber immer eines meiner Ziele, dass ich das nicht machen muss. Würde jeder mit seinen Erweiterungen solche Änderungen machen, würde das System bald nicht mehr laufen.

                      Nur um mein Beispiel nochmal auf den Punkt zu bringen. Die Erweiterungen sind nicht für ein spezielles System sondern werden auf der Plattform für alle Nutzer zum Download angeboten. Wie bei Wordpress. Daher kann ich nicht einfach das System umschreiben, nur um 1 Stunde Arbeit zu sparen.
                      Der Unterschied zwischen dem richtigen Wort und dem beinahe richtigen ist derselbe Unterschied wie zwischen dem Blitz und einem Glühwürmchen.

                      Kommentar


                      • #12
                        Nur um mein Beispiel nochmal auf den Punkt zu bringen. Die Erweiterungen sind nicht für ein spezielles System sondern werden auf der Plattform für alle Nutzer zum Download angeboten. Wie bei Wordpress. Daher kann ich nicht einfach das System umschreiben, nur um 1 Stunde Arbeit zu sparen.
                        Es geht hier einfach um das überschreiben des autoloaders, mehr nicht. Das bezeichne ich persönlich noch nicht mal als Core.
                        Du musst doch nur dem Autoloader sagen: Schau bitte erst in Verzeichnis XY, wenn Du eine Klasse laden willst, bevor Du den Standard-Pfad nimmst.

                        Das ist alles und löst Dein Problem. Eine große Veränderung des Systems ist das doch gar nicht!
                        Alle anderen arbeiten mit dem System wie gewohnt weiter!
                        Competence-Center -> Enjoy the Informatrix
                        PHProcks!Einsteiger freundliche TutorialsPreComposed Packages

                        Kommentar


                        • #13
                          Zitat von SteiniKeule Beitrag anzeigen
                          Nur um mein Beispiel nochmal auf den Punkt zu bringen. Die Erweiterungen sind nicht für ein spezielles System sondern werden auf der Plattform für alle Nutzer zum Download angeboten. Wie bei Wordpress. Daher kann ich nicht einfach das System umschreiben, nur um 1 Stunde Arbeit zu sparen.
                          Umso weniger verstehe ich dein Problem

                          PS: Laravel ist kein CMS. OctoberCMS wäre eines das auf Laraval aufbaut.

                          Kommentar


                          • #14
                            Wenn du nach einer Möglichkeit suchst, wie du ein System auf magische Art und Weise veränden kannst ohne eine einzige Berührung (die wäre hier der Autoloader), dann empfehle ich dir eine Zirkusschule mit Fachrichtung Zauberei.

                            Jegliche andere Diskussion (mit dir) ist hier sinnlos und mMn fachlich absolut unterschwellig.
                            GitHub.com - ChrisAndChris - RowMapper und QueryBuilder für MySQL-Datenbanken

                            Kommentar


                            • #15
                              Hogwarts
                              Competence-Center -> Enjoy the Informatrix
                              PHProcks!Einsteiger freundliche TutorialsPreComposed Packages

                              Kommentar

                              Lädt...
                              X