[Entity API] Gruppo di Studio

8 contenuti / 0 new
Ultimo contenuto
[Entity API] Gruppo di Studio

Premetto che non ho mai sviluppato con Drupal e sto ancora faticando a capire tutto il giro del fumo.

Al momento sto cercando di capire le Entità e di sfruttare nel mio codice il modulo "Entity API".
A quanto pare è un argomento su cui c'è ancora molta confusione, almeno a vedere i post in giro per la rete.
Ho studiato gli esempi di un paio di manuali e il codice di esempio del modulo "Entity API". Purtroppo, pur capendo che cosa viene fatto, non riesco a fare il "salto" e capire perché. Mi ritrovo davanti ad una serie di pezzi di codice più o meno intellegibbile ma non riesco ad afferrare il quadro d'insieme.

Volevo sapere se c'è qualcun'altro che sta studiando l'argomento così magari da poter ragionare insieme.

Ciao

Intendi il modulo? In teoria (non ho approfondito più di tanto) permette di definire a runtime nuove entity (oltre ai classici nodi, commenti, taxonomy, ...), definisce alcune funzioni di CRUD + Access per la gestione di nuove entity che possono (o meglio, è preferibile che) derivare dalla classe Entity. In questo modo la entity può essere gestita ed estesa esternamente con un modello "unificato".

Se hai domande più specifiche magari qualcuno può darti una mano più nel dettaglio.

Ciao
Marco
--
My blog
Working at @agavee

Il fatto è che so a cosa serve il modulo "Entity API" ma attualmente esiste un solo esempio, contenuto nel modulo stesso, e non riesco a raccapezzarmici. Anche sperimentare risulta difficile perché alla fin della fiera le entità non aggiungono nulla di visibile al sito quindi non ci sono modi semplici per fare dei riscontri.

Speravo che qualcuno stesse, come me, studiando il codice. Di domande specifiche non ne ho, proprio perché non so esattamente da che parte girarmi

A livello "generico" Entity API per ora fornisce solo un modo "comodo" di operare con le entity esistenti, ed eventualmente creare nuove entity da inserire all'interno del sistema. Un utilizzo pratica (ad esempio) è fatto dal modulo http://drupal.org/project/restws

Personalmente ritengo che il miglior modo per "studiare" sia di doverlo applicare ad un caso concreto, in modo da utilizzarlo veramente, se proprio non hai casi d'uso inventatene uno, non dovrebbe essere troppo complesso ;)

Ciao
Marco
--
My blog
Working at @agavee

Il caso di studio ce l'ho. sto costruendo un modulo che necessita di due tipi di strutture dati, una che preveda uno "storico" stile revisioni e un altro gruppo che devono essere create e distrutte on the fly.
Per il tutto posso usare anche i semplici nodi, ma creando entità mie potevo evitare di avere altri moduli, tipo comment, che andassero ad interferire.

Sui manuali di drupal spiegano come creare una nuova entità e come aggiungere le varie feature, quello che non capivo era come invece sfruttare il modulo Entity API
Ad esempio, al momento riesco a creare le mie entità, (versionable, versioanble_type, disposable, disposable_type) poi voglio andare ad aggiungere dei disposable_type, io riesco a farlo nel seguente modo

$type = entity_create(tipoentità, $valori);
entity_save(tipoentità, $type);

mentre negli esempi che ho spulciato (profile2 ad esempio) usano

$type = entity_create(tipoentità, $valori);
$type->save();

Ora la differenza non è molta, però immagino che nel tempo il modulo Entity API diventerà più potente, al contrario del modulo core che dovrebbe rimanere statico per un paio di anni, quindi mi piacerebbe imparare a sfruttare questo modulo.
gli esempi nella ducumentazione si fermano alla creazione e poi rimandano agli esempi e ad altri moduli come profile2, che per me sono troppo complicati perché in un unico modulo ho tutto, e non riesco ad isolare i singoli mattoncini di codice rispetto a cosa servono

Anche io sto facendo delle prove con le entità, seguo il capitolo 6 di "Drupal 7 Module Development", tu?

Non ho ben chiaro cosa volevi evidenziare con il codice ma mi pare siano la stessa cosa

function entity_create($entity_type, array $values) {...}
function entity_save($entity_type, &$entity) {
...
    return $entity->save();
...
}

Anche io sto seguendo quel libro, insieme a Pro Drupal 7 Development, che però non ha il capitolo sulle entità.
Lo trovo molto ben fatto, sono a circa metà del capitolo 6, conta che non ho mai sviluppato con Drupal, e ogni volta devo sperimentare per capire il motivo delle fuzioni e il loro effetto.

i due codici che ho scritto sopra sono identici, solo che il secondo non funzionava nel mio esempio, ed ero costretto a ripiegare sul primo, mentre vedevo tutti gli esempi usare il secondo, poi ho capito che mi bastava impostare

hook_entity_info()
    ...
    'entity class' => 'Entity'
    ...

nel hook_entity_info ed ero in grado di sfruttare anche il secondo codice

Seguendo il libro al momento sono in grado di definire
.install
hook_schema con le mie entità:
- bg_match
- bg_disposable
- bg_match_type
- bg_disposable_type

hook_install. per inserire alcuni esempi di bg_disposable_type, con fields e instances

hook_uninstal, per pulire i fields
penso che in futuro dovrò aggiungere anche la ricerca delle entità aggiunte manualmente ma per ora va bene così

.module
hook_help e hook_permission, ho capito cosa fanno, ho impostato una bozza che poi andrò a sistemare

hook_entity_info
anche questo l'ho capito abbastanza, ma guardando gli esempi (ad esempio "profile2") ho notato alcune differenze nelle proprietà che puoi definire:
'entity class', come detto sopra
'label callback' (che non ho capito a cosa serva), e 'uri callback' che credo permetta di evitare di scrivere la funzione uri callback come scritto nel libro
'module' e 'bundle of' che sto cercando di capire esattamente a cosa servano
'admin ui' a quanto pare qui si definiscono delle proprietà per far creare le pagine di amministrazione senza dove definire tutto hook_menu a manina come nel libro

hook_entity_info_alter
negli esempi che ho trovato usano questo alter per evitare una ricorsione sui bundle, nel libro invece inbroglia un po' perché definisce i bundle nella funzione che li dovrebbe caricare

hook_menu, questo è piuttosto semplice, creare i form e i vari menu, non ho ancora completato il tutto, ma a quanto pare c'è modo di evitare di scrivere tutta la parte amministrativa utilizzando il modulo Entity API

Se per 'uri callback' specifichi 'entity_class_uri' dell'Entity API allora dovresti sovrascrivere il metodo defaultUri -vedi il docblock della classe Entity.
Ho trovato la documentazione per le nuove proprietà in entity.api.php.