it-swarm.com.de

Ordnungsgemäße Ordnerstruktur für benutzerdefinierte Komponente

Ich versuche die joomlatools joomla-console in einem neuen Projekt zu verwenden. Aufgrund meiner Verzeichnisstruktur kann ich die Funktion symlink jedoch nicht verwenden.

In der Vergangenheit habe ich immer Komponenten mit einem einfachen gebaut

administrator/
    controllers
    models
    views
    etc
site
    controllers
    models
    views
    etc

struktur, und es funktioniert gut, wenn Sie es Zip/installieren.

Joomlatools sagt, dass Sie verwenden sollten

administrator/
  components/
    mycomponent/  
      controllers
      models
      views
      etc
site/
  components/
    mycomponent/
      controllers
      models
      views
      etc

struktur.

Was benutzt du und was ist "richtig"?

6
user101289

Es gibt keinen richtigen oder falschen Weg, um Ihren Code zu strukturieren, aber es gibt sicherlich bessere Wege.

Warum

Die Struktur, die wir bei Joomlatools verwenden, ergibt sich aus der Notwendigkeit einer standardisierten, entwicklerfreundlichen Struktur. Wir möchten das Rad nicht neu erfinden, daher ist es die logischste Wahl, die Struktur von Joomla zu verwenden.

Der Symlinker ist für Entwickler gedacht, die Code von einem Git-Repo in eine Joomla-Installation verlinken möchten. Wir verwenden dies für alle unsere Joomla-Komponentenentwicklungen. Es hält unseren Code synchron, ermöglicht uns das Ändern von Zweigen, während wir direkt im Git-Repo arbeiten.

Das Problem bei rsync ist, dass Sie den Code jedes Mal, wenn eine Änderung vorgenommen wird, manuell neu synchronisieren müssen, um ihn synchron zu halten, da rsync die Änderungen kopieren muss. Dies ist beim Entwickeln weniger nützlich.

Leistungen

Die Verwendung dieser Struktur bietet Ihnen folgende Vorteile:

  • Sie können den Symlinker verwenden, der Teil unserer Joomla Console ist, um Ihren Code einfach von einem lokalen Git-Repo in eine Joomla-Installation zu verlinken, sodass Sie die Dinge automatisch synchronisieren können.

  • Sie können mit komplexen Paketen arbeiten. Unsere Joomlatools-Erweiterungen enthalten nicht nur eine Komponente, sondern auch Module, Plugins, Bibliotheken usw. Sie müssen alle Teil eines Pakets sein, damit unsere Benutzer nicht alles separat installieren müssen.

     administrator /
     components /
     com_foo/
     controller 
     models 
     views 
     modules /
     mod_bar 
     site /
     components /
     com_foo/
     controller 
     models 
     views 
     modules/
     mod_bar 
     plugins /
     foo /
     bar /
    

Ein großartiges Beispiel für diese Struktur finden Sie in unserer Joomlatools-Beispiel-Todo-Komponente . Es folgt der Joomla-Struktur und enthält, wie Sie sehen, Module, Plugins usw.

Erstellen Sie Ihren eigenen Symlinker

Wenn Sie rsync über die Joomla-Konsole verwenden oder eine eigene Symlinker-Lösung erstellen möchten, die Ihrer bevorzugten Struktur entspricht, können Sie ein Konsolen-Plugin erstellen.

Mit dem Release der 1.3-Version der Konsole können Sie nun Ihre eigenen Plugins erstellen, mit Packagist verteilen und mit $ joomla plugin:install Installieren.

Viel Spaß beim Codieren!

4
Johan Janssens

Keine Struktur ist falsch, das Schöne an Joomla ist, dass es dich nicht zwingt. Ich würde sagen, dass Ihre erste in dem Aspekt, dass sie in einem installierbaren Archiv strukturiert ist, dem Standard am nächsten kommt. Einige Entwickler bevorzugen alles in einem Verzeichnis, andere bevorzugen 2-3 gut aufgeteilte Ordner. Einige haben sogar einen Ordner für jede Datei, am Ende ist nichts falsch, da alles "funktioniert". Obwohl ich persönlich keine Erfahrung mit Joomlatools habe, scheint diese Struktur für das Installationsarchiv eher "übertrieben" zu sein, kein wirklicher Grund für 2 der Ordnerebenen.

Dieser nächste Teil bezieht sich nicht direkt auf die Frage

Auch für Symlink denke ich nicht, dass es jemals wirklich funktionieren kann, wenn eine Datei auf eine andere Datei verweist, wird sie basierend auf der "echten" Datei gesucht (also wenn Sie root/installable/file.php haben, gehen Sie zu root/joomla /file.php setzt voraus, dass Sie sich in root/installable befinden). Es mag einen Ausweg geben, aber ich habe eine bessere Alternative gefunden, die nicht so viele potenzielle Probleme aufweist, nämlich rsync. Natürlich brauchst du eine Kommandozeile, aber ich habe diese Funktion auf einem gemeinsam genutzten Host auch mit eingeschränktem SSH-Zugriff.

#!/bin/bash

# sync
rsync -r /home/joomla/components/com_component/administrator/* /home/joomla/public_html/administrator/components/com_component/
rsync -r /home/joomla/components/com_component/site/* /home/joomla/public_html/components/com_component/
rsync -r /home/joomla/components/com_component/administrator/language/* /home/joomla/public_html/administrator/language/

Es hat einiges zu bieten, aber Sie können feststellen, dass Sie bei jeder Ordnerstruktur die Dateien dem richtigen Ordner zuordnen können. Sie müssen sie nur einmal installieren, um die Datenbankdatensätze abzurufen (und erneut, wenn Sie etwas ändern). Möglicherweise können Sie auch nur CP verwenden, aber das hat bei mir funktioniert, sodass ich keinen Grund hatte, etwas zu ändern (und die Möglichkeit hat, serverübergreifend zu arbeiten).

Dies muss zwar jedes Mal ausgeführt werden, wenn Sie ein Update durchführen, ist aber nicht zu schwierig, wenn Sie erst einmal den Dreh raus haben. Sie können dies auch in umgekehrter Reihenfolge tun und stattdessen direkt auf Ihrer Entwickler-Site für die Komponente bearbeiten (möglicherweise gibt es auch eine Möglichkeit, dies zu umgehen, aber Sie haben noch nicht daran gearbeitet).

2
Jordan Ramstad

Es ist wirklich alles abhängig von persönlichen Vorlieben und dem, was Sie in Ihrer Manifest-Datei angeben.

Siehe Manifest-Dateien (wo Sie Joomla Ihre Dateistruktur im Zip mitteilen) https://docs.joomla.org/Manifest_files

Wenn Sie Ihr Projekt mit einer erweiterungsspezifischen Phing-Build-Datei einrichten, legen Sie diese einmal fest und kümmern sich nicht mehr darum, da die Zip-Datei automatisch erstellt wird. https://github.com/akeeba/buildfiles/blob/master/phing/README.md

0
Walt Sorensen