Joomla.it Forum

Non solo Joomla... => Sviluppo => : Francesco_94 07 May 2013, 12:55:51

: Override save(?) method
: Francesco_94 07 May 2013, 12:55:51
Buongiorno a tutti!
 
 È da un po' di tempo che sto diventando matto per fare una cosa.
 
 Sto scrivendo un mio componente personalizzato (è la mia tesina d'esame). In pratica è un gestionale per la mia parrocchia. La versione di Joomla è la 2.5

Ho bisogno che nel salvataggio di alcuni record (con viste funzionanti) ci siano delle operazioni intermedie prima di salvare (in particolare devo salvare su altre tabelle dei valori contenuti nel form di invio dati). Come posso fare?

Ho trovato alcune risorse in rete ma non trovo quella giusta. Alcuni dicono di sovrascrivere il metodo save(), altri il metodo save($array), altri il metodo save($key = null, $urlVar = null).
Empiricamente sono riuscito a capire (perchè mi da una pagina bianca se faccio errori di sintassi) la funzione save($array) che arrangio in questo modo:

:
function save($array) {
        //Altro
        parent::save($array);
    }

Il problema è che in questa funzione NON posso: chiamare altre funzioni: mi restituisce una pagina bianca con URL sitojoomla.com/administrator/index.php

Non posso nemmeno vedere quali sono i dati che sono stati inviati dal form (la variabile $array sembra che sia vuota). Ho provato anche con
:
$POST = JRequest::get('post'); ma niente da fare. Nono riesco.

Come faccio a farmi mandare dei dati per una funzione personalizzata?

Ringraziando tutti in anticipo, spero in una vostra risposta dato che ho posto una domanda simile nel forum internazionale e ancora nessuno ha saputo rispondermi...  :(
: Re:Override save(?) method
: mau_develop 07 May 2013, 17:36:13
quando finisci in qs problemi solitamente è perchè sbagli logica nel db e nelle relazioni tra tabelle... o vuoi "agganciarti" a qualcosa che già esiste in un modo sbagliato
: Re:Override save(?) method
: Francesco_94 07 May 2013, 17:55:30
quando finisci in qs problemi solitamente è perchè sbagli logica nel db e nelle relazioni tra tabelle... o vuoi "agganciarti" a qualcosa che già esiste in un modo sbagliato
Provo a spiegare meglio la situazione magari mi puoi dare qualche consiglio per evitare il problema:


Situazione tabelle: (mandria è il nome del mio componente nonchè il nome della mia parrocchia)
#__mandria_spese
#__mandria_oggetti
#__mandria_oggetti_spesa
#__mandria_magazzino
#__mandria_oggetti_magazzino
#__mandria_progetti

È una relazione molti a molti... Abbastanza elaborata....

Ogni progetto un magazzino (due progetti possono condividere lo stesso).
In ogni magazzino ci sono più oggetti.
Gli oggetti sono "fissi" (inserisco io gli oggetti "catalogabili" perchè così posso tenere conto delle caratteristiche tecniche).
Ogni oggetto può essere presente in nessuno o più magazzino (e la tabella oggetti_magazzino tiene conto della quantità)
Ogni spesa è associata ad un progetto, e ha degli articoli (zero o più).
Ogni articolo di una spesa è un'oggetto, salvato insieme alla quantità e al prezzo pagato (la stessa lampadina può essere pagata 2euro oggi e 3euro domani, ma in magazzino sempre lampadina è!).

Il mio problema comincia a venir fuori nella vista delle spese. Non riesco a far inserire gli articoli.
Ho provato in tutti i modi, ma non riesco a trasmettere i miei dati di un form ad un controller oppure ad un model.

Le operazioni in "eccesso" che avrei da fare sono quelle di salvataggio degli oggetti nella spesa, quelle di aggiunta nel magazzino del progetto il quantitativo di oggetti acquistati.
: Re:Override save(?) method
: mau_develop 07 May 2013, 18:44:19
e perchè hai bisogno di caricare su tabelle diverse?
se sono in relazione basta che in un form  inserisci una select con la foreign key "parlante" dell'altra tabella che compilerai in altro form.

Perchè tu non riesca a salvare non so, un semplicissimo helloworlds salva quindi basta seguire quello "schema" se invece come dicevi sopre vuoi salvare in più tabelle insieme probabilmente devi costruire anche il relativo controller e model
: Re:Override save(?) method
: Francesco_94 07 May 2013, 19:09:09
e perchè hai bisogno di caricare su tabelle diverse?
se sono in relazione basta che in un form  inserisci una select con la foreign key "parlante" dell'altra tabella che compilerai in altro form.
C'ho provato anche questo: non riesco a farlo tutto nella stessa vista... Ma se anche riuscissi a farlo, avrei comunque da fare altre cose durante il salvataggio (incrementare la quantità nel magazzino)....

Perchè tu non riesca a salvare non so, un semplicissimo helloworlds salva quindi basta seguire quello "schema" se invece come dicevi sopra vuoi salvare in più tabelle insieme probabilmente devi costruire anche il relativo controller e model
Ma io nella vista spesa riesco a salvare benissimo i dettagli riguardanti la spesa (chi l'ha fatta, dove, lo scontrino, eccetera...) Quello che non riesco a salvare sono gli articoli comprati nella spesa (perchè, appunto, mi necessita di poter sovrascrivere il metodo save e capire il flusso delle informazioni che giro fa...

In ogni caso se hai dei consigli su una nuova struttura da proporre ben venga...

Comunque non so se si era capito, ma non ho bisogno del semplice helloworld  ::)

La cosa paradossale è che col PHP me la cavo e a progettare l'intera struttura da capo funzionante senza appoggiarmi a Joomla sarei pure capace (e probabilmente ci metterei anche meno!) ma il bello è questo! Voglio portare questo programma dentro il sito perchè dopo sarà lo stesso sito del patronato (oltre ad avere anche a disposizione molti strumenti di protezione e classi HTML già fatte comodissime)...

Nel caso dovessi riprogettare il controller ed il model (secondo me basta sovrascrivere il metodo save in modo da poter fare delle cose intermedie prima di richiamare quello originale...) come potrei fare?
: Re:Override save(?) method
: mau_develop 07 May 2013, 20:22:24
Ma se anche riuscissi a farlo, avrei comunque da fare altre cose durante il salvataggio (incrementare la quantità nel magazzino)....
-------------------------------------------------------
quello lo puoi fare nella table, prima di venire salvati ci sono un bind check e poi store

Comunque non so se si era capito, ma non ho bisogno del semplice helloworld
-------------------------------------------------------------------------------------------------------------
allora parti dal componente weblink e segui quello ma non vedo molta differenza... il concetto è quello

e a progettare l'intera struttura da capo funzionante senza appoggiarmi a Joomla sarei pure capace (e probabilmente ci metterei anche meno!)
-----------------------------------------
beh, non credo... altrimenti è masochista farlo con joomla

secondo me basta sovrascrivere il metodo save
---------------------------------------------------------------
dipende dalle classi che usi, dovresti riuscire a capire la differenza tra usare ivari model, quello per i form quello per le liste etc e così i controller. etc... non tutti hanno gli stessi metodi e non tutte funzionano allo stesso modo.
: Re:Override save(?) method
: Francesco_94 07 May 2013, 21:03:11
Potresti per cortesia mandarmi qualche link di documentazione/tutorial per queste classi?

A scuola abbiam giá svolto rsercitazioni di qursto tipo e sono lunghe e con tutto il tempo che ho impiegto fin'ora  forse avrei giá finito..
Certo con qualità minore peró ...

Purtroppo ho già spulciato questi compomenti ma non sono riusvito a trovare info utili... puoi spiegarmi o dirmi dove trovare documentazione su queste funzioni?
: Re:Override save(?) method
: mau_develop 07 May 2013, 21:07:14
conosci l'inglese abbastanza bene?
: Re:Override save(?) method
: Francesco_94 07 May 2013, 21:28:20
Si :)
: Re:Override save(?) method
: mau_develop 07 May 2013, 22:09:05
mandami la mail in pvt
: Re:Override save(?) method
: mau_develop 07 May 2013, 22:28:21
Se vuoi vedere come poter fare cose un po' strane e simili a ciò che ti serve puoi guardare anche il componente amministrativo dell'IDS che ho pubblicato oggi nella sezione esperimenti e test. Anche quello ha viste non proprio consuete.
: Re:Override save(?) method
: simone83 08 May 2013, 09:50:49
Ciao, ricorda che la funzione save del model in genere è richiamata dalla funzione save del controller che se non riscritta prende i dati inviati e li valida in funzione del file xml associato, quindi suppongo che le tue chiavi esterne saranno multiple e dovranno appartenere ad un array key1 ad es questo nome di array deve comparire nel file xml come campo semplice, anche <field name="key1" label="key1"  /> per far si che non sia eliminato in fase di validazione.