it-swarm.dev

Struttura delle cartelle corretta per il componente personalizzato

Sto cercando di usare i joomlatools joomla-console in un nuovo progetto. Tuttavia, non posso usare la funzionalità symlink a causa della mia struttura di directory.

In passato ho sempre costruito componenti con un semplice

administrator/
    controllers
    models
    views
    etc
site
    controllers
    models
    views
    etc

struttura e funziona benissimo quando lo comprimi/lo installi.

Joomlatools dice che dovresti usare

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

struttura.

Cosa usi e quale è "giusto"?

6
user101289

Non esiste un modo giusto o sbagliato per strutturare il codice, tuttavia esistono sicuramente modi migliori.

Perché

La struttura che utilizziamo in Joomlatools nasce dalla necessità di avere una struttura standardizzata per gli sviluppatori. Non ci piace reinventare la ruota, quindi la scelta più logica è usare la struttura di Joomla.

Il symlinker è creato per gli sviluppatori che desiderano collegare in modo simbolico il codice da un repository Git a un'installazione Joomla. Lo usiamo per tutto lo sviluppo del nostro componente Joomla, mantiene sincronizzato il nostro codice, ci consente di cambiare ramo, mentre lavoriamo direttamente nel repository Git.

Il problema con rsync è che per mantenere il codice sincronizzato è necessario risincronizzarlo manualmente ogni volta che viene apportata una modifica poiché rsync deve copiarle. Questo è meno utile durante lo sviluppo.

Benefici

L'uso di questa struttura offre i seguenti vantaggi:

  • Puoi usare il symlinker che fa parte del nostro Joomla Console per collegare facilmente il tuo codice da un repository Git locale a un'installazione Joomla che ti consente di mantenere sincronizzati automaticamente le cose.

  • Puoi lavorare con pacchetti complessi. Le nostre estensioni di Joomlatools includono non solo un componente, ma includono anche moduli, plugin, librerie, ecc. Tutto ciò deve far parte di un pacchetto per impedire ai nostri utenti di installare tutto separatamente.

     amministratore /
     componenti /
     com_foo/
     controller 
     modelli 
     visualizza 
     moduli /
     mod_bar 
     site /
     componenti /
     com_foo/
     controller 
     modelli 
     visualizza 
     moduli/
     mod_bar 
     plugins /
     foo /
     bar /
    

Un ottimo esempio di questa struttura è disponibile nel nostro componente Todo di esempio Joomlatools . Segue la struttura di Joomla e come puoi vedere include moduli, plug-in ecc.

Creare il tuo link simbolico

Infine, se desideri utilizzare rsync utilizzando la console Joomla o se desideri creare la tua soluzione symlinker che segue la tua struttura preferita, puoi prendere in considerazione la creazione di un plug-in console.

Con il rilascio della versione 1.3 della Console ora puoi creare i tuoi plugin, distribuirli usando Packagist e installarli usando $ joomla plugin:install.

Buona programmazione!

4
Johan Janssens

Nessuna struttura è sbagliata, la cosa bella di Joomla è che non ti costringe. Il tuo primo aspetto, essendo strutturato all'interno di un archivio installabile, direi che è il più vicino allo standard. Alcuni sviluppatori preferiscono tutto in una directory, altri preferiscono 2-3 cartelle ben suddivise. Alcuni potrebbero anche avere una cartella per ogni file, alla fine nulla è errato poiché tutto "funziona". Anche se personalmente, anche se non ho esperienza con joomlatools, se quella struttura è pensata per l'archivio di installazione sembra piuttosto "eccessiva", nessuna vera ragione per 2 dei livelli di cartella.

Questa parte successiva non è direttamente correlata alla domanda

Anche per symlink non penso che possa mai funzionare davvero, se un file fa riferimento a un altro file lo cercherà in base al file "reale" (quindi se hai root/installabile/file.php che va in root/joomla /file.php presume che tu sia in root/installabile). Potrebbe esserci un modo per aggirare questo, ma ho trovato un'alternativa migliore che non ha tanti potenziali problemi, rsync. Ovviamente hai bisogno della riga di comando, ma ho questo lavoro su un host condiviso anche con accesso ssh limitato.

#!/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/

Ci è riuscito un po ', ma puoi vedere che con qualsiasi struttura di cartelle puoi mappare i file nella cartella corretta, devi solo installarlo una volta per ottenere i record del database (e di nuovo se cambi qualcosa). Potresti anche essere in grado di utilizzare solo CP, ma questo ha funzionato per me, quindi non avevo motivo di cambiare (e ho la capacità di lavorare su più server).

Anche se questo deve essere eseguito ogni volta che si esegue un aggiornamento, ma non troppo difficile una volta capito. Puoi anche farlo al contrario e invece modificarlo direttamente sul tuo sito di sviluppo per il componente (di nuovo potrebbe esserci un modo per aggirare questo, semplicemente non ci hai ancora lavorato).

2
Jordan Ramstad

Dipende tutto dalle preferenze personali e da ciò che specifichi nel tuo file manifest.

Vedi i file Manifest (dove dici a Joomla la struttura dei tuoi file in Zip) https://docs.joomla.org/Manifest_files

Se imposti il ​​tuo progetto con un file di build di Phing specifico per l'estensione, lo imposterai una volta e non ti occuperai più poiché lo Zip viene creato automaticamente. https://github.com/akeeba/buildfiles/blob/master/phing/README.md

0
Walt Sorensen