Autocompletamento per drupal in gedit

 

Parlando sul forum di drupalitalia su quale fosse il miglior IDE per sviluppare su drupal ognuno proponeva la sua soluzione, personalmente utilizzo PSPad quando mi trovo su sistemi windows mentre su Linux utilizzo gedit, un programma che di base è molto scarno, ma che grazie ai plugin riesce a diventare uno strumento potentissimo.

Innanzitutto diciamo che non voglio scatenare guerre di religione, che non c'è l'IDE perfetto e che ognuno usa quello che conosce meglio e che ritiene migliore, ma se siete qui credo che gedit sia il vostro IDE (o uno dei vostri IDE preferiti).

Un IDE deve fornire almeno:

  1. l'evidenziazione della sintassi
  2. visualizzazione dei numeri di riga
  3. autocompletamento della sintassi
  4. elencazione delle funzioni presenti

Per i primi due punti la cosa è praticamente già pronta e perfettamente integrata in gedit, basta andare in Edit, Preferences e quindi spuntare la casella Display line numbers (io uso anche Higlight current line, per non impazzire con linee lunghe, e Highlight matching bracket per evidenziare le parentesi che corrispondono, ma non è necessario).

Per il primo punto andiamo ad configurare il programma per usare come evidenziazione della sintassi il codice PHP, quindi View, Highlight mode e quindi Scripts, infine selezioniamo PHP.

l'autocompletamento della sintassi può essere attivato utilizzando il plugin snippet, per fare questo dobbiamo installarlo, con ubuntu e simili è sufficente utilizzare:

sudo apt-get install gedit-plugins

e fargli terminare l'installazione; a questo punto andiamo sempre nell'interfaccia di configurazione Edit, Preferences ed entriamo nella scheda Plugins (l'ultima della lista), infine andiamoad abilitarle il plugin Snippet. A questo punto nel momento in cui andiamo ad aprire un file PHP e stiamo scrivendo del codice è sufficiente andare ad insere alcune sigle predefinite per attivare l'autocompletamento, per esempio per inserire un costrutto select-case è sufficiente scrivere:

<?php
switch
?>

e premere il pulsante tab per ottenere:

<?php
switch (variable)
{
    case
'value':
       
# code...
   
break;
    default:
       
# code...
   
break;
}
?>

come si può vedere la cosa è molto comoda e veloce, ma non ci fermiamo qui. premiamo il tasto di tabulazione, vederemo che ogni volta il nostro cursore evidenzia una parte predefinita dello statement inserito, così da velocizzare la creazione di codice.

Tutto questo è comodissimo per scrivere codice PHP, ma a noi serve qualche cosa di più potente che ci permetta di creare rapidamente codice di moduli per drupal, in particolare vogliamo che vengano aggiunti velocemente i diversi hook senza doverceli ricordare a memoria o doverli cercare ogni volta su Drupal API (che comunque rimane sempre la nostra guida di riferimento), la struttura completa dei moduli (module, info e install), le chiamate alle funzioni del database e le Form API.

Come prima cosa scarichiamo i pacchetti che trovate in allegato a questo articolo; in funzione di cosa vogliamo andare a visualizzare nell'autocompletamento sceglieremo i file opportuni, fatto questo andiamo in Tools, Manage snippets... e quindi su Import snippets (la cartella che trovate in basso a sinistra). Importiamo i pacchetti che ci servono, a questo punto il nostro sistema funzionerà senza problemi. Vediamo alcuni esempi.

Inserimento di HOOK

Iniziamo a scrivere hook all'interno del nostro documento nel punto in cui vogliamo andare ad inserire l'hook, digitiamo la parola hook e quindi premiamo il tasto TAB; automaticamente ci comparirà un menu a tendina in cui potremo scegliere l'hook che ci serve (o potremmo scrivere il nome dell'hook che ci interessa).
Interfaccia di selezione degli hook

Fatto questo preimiamo invio e automaticamente il fiel verrà popolato con il testo dell'hook che abbiamo scelto, in alcuni casi ci sarà molto più di quello che ci serve, sarà sufficiente andare a rimuovere quello che non ci serve.
Hook inserito

Da notare che una volta inseriti i vari snippet premento il pulsante TAB si passerà alle parti di codice da customizzare e in alcuni casi l'editazione di una sola parte di codice modifica automaticamente quelle correlate ad essa.

Gli hook inseriti non sono tutti quelli presenti ma solo i principali e sono (in ordine alfabetico):

  • hook_access
  • hook_block
  • hook_comment
  • hook_cron
  • hook_delete
  • hook_filter
  • hook_form_alter
  • hook_form
  • hook_help
  • hook_insert
  • hook_install
  • hook_link
  • hook_menu
  • hook_nodeapi
  • hook_perm
  • hook_schema
  • hook_search
  • hook_taxonomy
  • hook_theme
  • hook_uninstall
  • hook_update
  • hook_update_N
  • hook_user
  • hook_validate

Inserimento di FAPI

L'inserimento di form generati tramite FAPI segue lo stesso principio di quello che abbiamo appena visto per gli hook, è sufficiente scrivere fapi em premere TAB per avere l'elenco delle FAPI disponibili (anche qui non è la lista completa, ma solo quelli più utilizzati).
Interfaccia di selezione delle FAPI

Scegliendo la FAPI necessaria automaticamente viene inserito l'array degli elemento scelto, con la maggior parte delle impostazioni configurabili, che in alcuni casi potrebbero non essere necessarie.
FAPI inserita

Le FAPI inserite riguardano (in ordine alfabetico):

  • button
  • checkbox
  • checkboxes
  • date
  • fieldset
  • file
  • hidden
  • markup
  • password
  • radios
  • select
  • textarea
  • textfield

Creazione modulo

La creazione di moduli richiede, in fase iniziale, la scrittura di una serie di elementi molto standard, quindi risulta comodo automatizzare anche la procedura di creazione, dei file principali, per fare questo utilizziamo la stessa procedura seguita per gli hook e le FAPI, usando i comandi:

info
Crea la parte riguardante le informazioni relative al modulo.
install
Crea la parte riguardante le informazioni relative all'installazione modulo, inserendo anche gli hook principali necessari.
module
Crea l'initestazione del modulo, andando ad aggiungere in maniera automatica alcuni elementi, quali autore, data, ...

Funzioni DB

L'interazione con il database è una di quelle operazioni che si effettua spesso, quindi le funzini si ricordano praticamente sempre, ma avere un meccanismo che iniserisca automaticamente le funzioni è sicuramente utile, per inserire le funzioni relative al database è sufficiente scrivere db e premere TAB per fare in modo che automaticamente appaiano le tre funzioni principali, ovvero:

  • db_query
  • db_fetch_array
  • db_fetch_object

Il codice è stato provato, ma potrebbero esservi errori o imprecisioni, pertanto se ne trovate e me le segnalerete sarò ben felice di correggerle; invece se avete tempo e voglia di estendere questi script aggiungendo le parti mancanti sarò ben lieto di aggiungerle.

Elenco delle funzioni

Per l'elencazione della sintassi all'interno di gedit utilizzeremo il plugin symbol browser, che funziona in concomitanza con ctags, il quale si occupa di estrarre una serie di informazioni dai file aperti, quali le funzioni, le variabili, le classi, etc presenti. Un esempio del risultato finale lo potete vedere nell'immagine seguente:
Esempio di elenco funzioni per il file aperto

Per effettuare l'installazione iniziamo installando ctag, in particolare:

sudo apt-get install exuberant-ctags

e facciamo in modo che anche i file *.module e *.install vengano interpretati come file con codice PHP, quindi aggiungiamo le direttive al file .ctags o più velocemente:

echo '--langmap=php:+.module.install' >> ~/.ctags

A questo punto scarichiamo il plugin per gedit dal sito del progetto, se non sono disponibili i binari per la vostra configurazione potete provare a vedere se nella vostra distribuzione sono già presenti o dovrete conmpilarveli manualmente; fiortunatamente nel mio caso i binari per AMD64 sono disponibili, quindi mi limito a scaricarli, decomprimerli e caricarli nella cartella dei plugin:

wget http://kent.dl.sourceforge.net/sourceforge/symbol-browser/gedit-symbol-b...
tar -xzf gedit-symbol-browser-plugin-bin-ubuntu-AMD64-0.1.tar.gz
sudo mv plugins/* /usr/lib/gedit-2/plugins/
mv symbols ~/.gnome2/gedit

Ora è sufficiente andare nella scheda di configurazione di gedit e abilitare il plugin, nella parra laterale veranno visualizzate le informazioni relative alle funzioni disponibili nei file aperti (e salvati).

AllegatoDimensione
Pacchetto per il database315 byte
Pacchetto per le Form API806 byte
Pacchetto per gli hook2.89 KB
Pacchetto per creazione moduli1.16 KB
Pacchetto cumulativo (database, fapi, hook, moduli)4.04 KB

Altri contenuti che potrebbero interessarti

  • Tabella paginata e ordinabile
    Nella realizzazione di interfaccie di report può capitare di dover creare delle tabelle che visualizziino una serie di informazioni. Spesso, se i dati sono molti, è necessario ricorrere alla creazione di tabelle paginate. In altri casi, o in aggiunta a questo, può essere necessario andare a...
  • Precedentemente avevo scritto una patch per views che pemetteva di andare ad indicare delle classi specifiche alle singole righe delle views. Considerato che modificare il codice di un modulo lo considero una delle cose più pericolose nonché sbagliate, e in considerazione del fatto dell'enorme...
  • Interfaccai di presentazione della documentazione delle API di Drupal in gedit
    Non sono ancora riuscito a convincervi ad usare gedit, nonostante i fantastici snippet? vediamo se ques'altra estensione per Drupal vi invonglierà a tentare il passaggio. Cosa serve ad uno sviluppatore? Sicuramente poter accedere alla guida del sitema che sta usando velocemente, e quindi cosa cè di...
  • Caricamento di un form tramite ajax
    Nella creazione di form può essere necessario procede con passi successivi in una serie di scelte, questo comporta una perdita di tempo per gli utenti e quindi è molto comodo sfruttare le potenzialità offerte da ajax per effettuare questi passaggi in cascata senza dover andare a ricaricare la...

Commenti

Ritratto di Fabio

Gedit per Drupal

Mi sono fatto una bella scorpacciata dei vari articoli pubblicati sull'argomento e non posso che ringraziarti per aver messo a disposizione uno strumento di questo tipo. Viste le potenzialità dello strumento pur essendo un utente windows (in precedenza ti avevo chiesto se era possibile un'installazione per questo s.o.) ho approntato un'installazione di ubuntu ed ho iniziato ad utilizzare i tuoi snippet/plugin. L'unico intoppo che ho riscontrato è nell'utilizzo del plugin symbol browser, ho seguito pedestremente le tue indicazioni ma quando cerco di attivare il plugin lo stesso si disabilita diventando grigio. Ho provato a cercare in rete e sembra che il problema sia comune a diversi utenti alcuni dei quali hanno risolto togliendo tutte le copie del plugin dalla cartella /usr/lib/gedit-2/plugins/ ed inserendola in ~/.gnome2/gedit, per me questa soluzione non ha funzionato e continuo ad ottenere lo stesso effetto.
Hai qualche suggerimento per rimediare?

Ritratto di mavimo

Sinceramente non mi è

Sinceramente non mi è capitato e non mi ha mai dato problemi, ti posso solo consigliare di dare un occhio ai commenti di http://www.micahcarrick.com/gedit-symbol-browser-plugin.html , ma immagino tu l'abbia già fatto.

Puoi dirmi che funzione di OS stai usando?

Ritratto di Fabio

Risolto Symbol Browser

Avevo già letto i commenti ma mi era sfuggita questa indicazione
"FYI, If you are installing it on freshly installed Ubuntu, it may not work because of missing 'libgnomeprintui'. Thanks to VR for posting this tip in his blog - http://oracology.net/2010/01/gedits-symbol-browser-caveat/

Run this to install both the dependencies for this plugin:
sudo apt-get install exuberant-ctags libgnomeprintui2.2-0"

Aggiungendo "libgnomeprintui2.2-0" ho risolto il problema. Scusa l'estrema ignoranza ma cosa intendi per "funzione di OS"?

Ritratto di mavimo

Erroraccio mio, intendevo

Erroraccio mio, intendevo versione di OS (operating system, sistema operativo)

Ritratto di renan

gedit

Da un pò di tempo mi sono interessato a Drupal ed ho comincato a lavorarci in locale sotto windows.
Per creare un ambiente più adatto ad una collocazione in rete mi sono fatto installare dal fornitore anche ubuntu, ci ho scaricato drupal.
Per crearmi un ambiente di sviluppo per PHP su linux, ho seguito le indicazioni di MAVIMO orientadomi su gedit.
Scaricato il pacchetto, a fine installazione mi segnala che 'intiltool' è obsoleto e devo installare la versione 0.40.0 o superiore.

Scarico intltool (0.40.6) ma nella installazione mi dice

'GNU gettext tools not found; required for intltool'

scarico 'gettex' da synaptic reninstallo intltool e mi segnala

configure: error: Enchant library not found or too old. Use --disable-spell to build without spell plugin.

estraggo 'enchant-1.5.0' ma a fine installazione mi segnala

No package 'glib-2.0' found
No package 'gmodule-2.0' found
Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix.
Alternatively, you may set the environment variables ENCHANT_CFLAGS
and ENCHANT_LIBS to avoid the need to call pkg-config.
See the pkg-config man page for more details.

A questo punto sarò grato a chiunque mi darà qualche dritta.
grazie.

Ritratto di daniele

symbol browser e file remoti

Ciao, ti ringrazio moltissimo per queste guide che pubblichi sono davvero comode ed interessanti...
Ho aggiunto gli snippets e il symbol-browser in gedit e devo dire che è davvero tutta un'altra storia. ho solo un piccolo problema, forse potevi aiutarmi. Le funzioni nel browser vengono visualizzate solo se si aprono file locali e non per quelli remoti, via ftp o sftp...

Idee??'

Grazie.ciao

Ritratto di mavimo

Potresti provare a aprire la

Potresti provare a aprire la directory remota con anutilus, in modo che il sistema la percepisca come directory locale e quindi passare su quello, sinceramente non mi capita di lavorare direttamente su file remoti, quindi non saprei darti altri consigli.

Ritratto di mavimo

Potresti provare a aprire la

Potresti provare a aprire la directory remota con anutilus, in modo che il sistema la percepisca come directory locale e quindi passare su quello, sinceramente non mi capita di lavorare direttamente su file remoti, quindi non saprei darti altri consigli.

Ritratto di daniele

...con nautilus

Si è proprio così che faccio... apro la directory remote con il classico sftp://user@server/path e purtroppo non funziona, se invece copio i file in locale symbol browser fa il suo lavoro... Per ora sposto il file ad ogni salvataggio. se trovo la soluzione la posto.
Ciao e grazie.

Ritratto di daniele

RISOLTO

Ho trovato... Il problema sta nel fatto che nautilus monta la cartella remote sotto ~/.gvfs/remote_folder. Se apriamo con gedit i file con tale percorso il plugin symbol browser non lo riconosce e non funziona; ma se apriamo i file con il percorso classico: sftp://user@host/path_to_file/modulo.module allora il plugin funziona...
Per aprire i file con il giusto percorso e non quello montato in locale si può usare il pannello Open di gEdit oppure semplicemente trascinare il file dalla finestra nautilus (della cartella remota) a gEdit.

Spero di essere stato di aiuto... io ho risolto così

Ciao.

Ritratto di mavimo

Grazie della soluzione...

...sicuramente tornerà utile anche ad altri!

Ritratto di maurizio

allegati

ho provato sulla mia ubuntu intrepid, ma i pacchetti allegati mi vengono rifiutati da gedit dicendomi che non è un pacchetto snippet valido.
ciao grazie

Ritratto di mavimo

Ti consiglio di prendere le

Ti consiglio di prendere le ultime versioni disponibili direttamente dal repository, dove troverai tutte le aggiunte e le correzioni fatte. L'indirizzo del repository è

e puoi trovare maggiori informazioni nel wiki (è in inglese, ma dovrebbe essere abbastanza semplice e comprensibile).

In ogni caso grazie di averlo provato e fammi sapere le tue impessioni; a brevissimo anche un video di presentazione delle potenzialità di questo strumento :)

Ritratto di mavimo

risolto grazie!

risolto grazie!

Invia nuovo commento





  • Elementi HTML permessi: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <img> <h2> <h3> <h4> <table> <thead> <tbody> <tr> <th> <td>
  • You may post code using <code>...</code> (generic) or <?php ... ?> (highlighted PHP) tags.
  • Linee e paragrafi vanno a capo automaticamente.
  • Indirizzi web o e-mail vengono trasformati in link automaticamente

Maggiori informazioni sulle opzioni di formattazione.



Condividi contenuti