Back to top

Autore Topic: fare un update di tutti i records dalla vista generale del backend  (Letto 3578 volte)

Offline kassandra

  • Esploratore
  • **
  • Post: 60
  • Sesso: Femmina
    • Mostra profilo
spero che l'oggetto sia chiaro, comunque adesso provo a spiegarmi meglio   8)

premetto che è la prima volta che provo a sviluppare un componente, utilizzando diversi dei links consigliati qui. Fino ad ora bene o male sono riuscita a cavarmela ed imparare via via, ma adesso mi sono arenata e vi chiedo aiuto.

Il componente gestisce l'organigramma di un ufficio: sezioni, reparti, responsabili, sedi.
Il problema nasce sulla gestione delle sedi: l'ufficio ha molte sedi, una sola però è quella centrale. Nella tabella ho inserito un campo booleano 'centrale'. Devo ovviamente fare in modo che solo uno dei records ce l'abbia settato a true.

Per questo motivo ho abbandonato l'idea di aggiornare questo campo come tutti gli altri nella view della singola sede: riuscivo senza problemi a settare a 'sì' il campo "centrale" nella form, ma come fare ad intervenire sulla sede che precedentemente era quella centrale e settare 'centrale' a false?
Non mi sembrava neanche conforme alla logica della struttura dei componenti MCV (per come l'ho capita!) ed allora ho deciso di provare a fare l'operazione dalla view generale, dove sono elencate le diverse sedi. Ho aggiunto un input radio button e vorrei che, modificando lì la selezione venga aggiornata di conseguenza tutta la tabella, cioè settato 'centrale' a true in quel record e a false in tutti gli altri.

La prima cosa che ho fatto è stato aggiungere al pulsante radio un "onclick" che selezionasse tutti i check button, seguendo la stessa logica con la quale si può pubblicare/non pubblicare tutti i record selezionandoli tutti.
... e poi mi sono bloccata!!!

Questo è il codice del default.php della view "sedi":
Codice: [Seleziona]
<?php
$k 0;
$n=count($this->items);

for($i=$i $n$i++) {
$row =& $this->items[$i];
// codice HTML per checkbox
$checked JHTML::_('grid.id'$i$row->idSed );
// codice HTML per radiobutton 'sede principale'
$centrale $row->centrale "checked" "";

// Crea link per editare il record
$link JRoute::_'index.php?option=com_organiz&controller=sede&task=edit&cid[]='$row->idSed );
$id = (int)$row->idSed;
$nome= (string)$row->nomSed;
?>

<tr class="<?php echo "row$k"?>">
<td>
<?php echo JHTML::link($link$id); ?>
</td>
<td>
<?php echo $checked?>
</td>
<td>
<?php echo JHTML::link($link$nome); ?>
</td>
<td>
<input type="radio" name="centrale" value="<?php echo $row->idSed?>" <?php echo $centrale?> onclick="javascript:checkAll_button('<?php echo count$this->items )-1?>', 'centrale')" />
</td>
<td>
<?php echo $row->idSed?>
</td>
</tr>

Adesso???  :-[

Ho fatto tante ipotesi e mi imbarazzo anche un po' ad esporle perché ho il serio dubbio che siano tutte cavolate, vista la mia inesperienza. Per questo vi chiedo aiuto: vorrei partire col piede giusto e non fare semplicemente qualcosa di pasticciato che però funziona ma qualcosa di integrato con la logica del componente, sfruttando al meglio il framework... Carneade!
Ecco le mie ipotesi, comunque: sostituire checkAll_button con submitForm a cui passare un task che creo ad hoc, poi inserire una funzione nel file model corrispondente, a cui passare l'array dei cid e ciclandoli fare un update per ciascuno. Oppure utilizzare i metodi bind e store della classe Table.

insomma poche idee e tanto confuse...
grazie a chiunque voglia darmi un suggerimento e/o un aiuto.

viviana
ci sedemmo dalla parte del torto, visto che tutti gli altri posti erano occupati

mau_develop

  • Visitatore
Re:fare un update di tutti i records dalla vista generale del backend
« Risposta #1 il: 30 Nov 2010, 18:56:29 »
mmmhhh, ...aspetta, con calma :)

Se vuoi ti do una mano ma partiamo dall'inizio e con una logica.

-------------------------------------------------------------------------------------------------------------
Il componente gestisce l'organigramma di un ufficio: sezioni, reparti, responsabili, sedi.
-------------------------------------------------------------------------------------------------------------
cosa vuol dire? gestisce come? che componente? frontend? backend?

vediamo... cosa vuol dire gestire un organigramma? cosa hai bisogno di fare?

esempio:

un utente ....  guest / autenticato /autenticato come
... deve poter vedere ...   in uno spazio della pagina / premendo un bottone / in un popup
...una pagina con l'organigramma...  rappresentato come elenco / rappresentato come albero

... con queste funzionalità...  più view : per sede, per carica, per reparto


dopodichè si vede cosa occorre e come farlo, magari basta un modulo, in un secondo tempo svilupperai un componente amministrativo che lo modifica.... o magari è corretto il componente solo che bisogna dargli una struttura.

Offline mmleoni

  • Global Moderator
  • Instancabile
  • *****
  • Post: 5547
  • Sesso: Maschio
  • Just another *nix coder/sysadmin...
    • Mostra profilo
Re:fare un update di tutti i records dalla vista generale del backend
« Risposta #2 il: 30 Nov 2010, 21:40:45 »
Citazione
aggiornare questo campo come tutti gli altri nella view
... forse sarebbe meglio nel model  ;)

non incasinare le cose semplici: tieni tutto nella gestione della singola sede.
quando ricevi i dati verifica se il campo form centrale è true (se esiste in caso di checkbox); in tal caso lancia una query che setti a false il campo db ove è true, e poi salva i dati.

data la convenzione di coding di joomla devi scrivere il codice aggiuntivo nell'override del metodo store della classe derivata da JTable per gestire le tabella della sede. alla fine dell'azzeramento delle altre sedi richiami il medoto store originario (cioè quello di JTable) per salvare i dati. così è conforme a MVC ed a Joomla!.

ciao,
marco
mmleoni web consulting - creazione siti web aziendali ed e-commerce avanzati - sviluppo moduli e componenti Joomla

Offline kassandra

  • Esploratore
  • **
  • Post: 60
  • Sesso: Femmina
    • Mostra profilo
Re:fare un update di tutti i records dalla vista generale del backend
« Risposta #3 il: 01 Dic 2010, 10:48:34 »
innanzitutto grazie a tutti e due delle risposte, non speravo in un aiuto così rapido!  :)

... forse sarebbe meglio nel model  ;)
ops! claro que sì  :-[

ho capito! ...credo... adesso provo con l'override e vi faccio sapere

comunque spiegarmi bene e con ordine non è il mio forte, hai ragione mau! Ci provo di nuovo, abbi pazienza: quello che sto cercando di fare è un componente che permetta in frontend a tutti gli utenti la sola consultazione della struttura organizzativa di un ufficio, presentando nella colonna centrale ('content' del sito) l'elenco delle sezioni dell'Ufficio, con breve descrizione e sede. Il nome della sezione è il link che porta alla pagina della singola sezione, con responsabile, riferimenti ed elenco dei reparti, i cui nomi sono a loro volta links che portano ciascuno alla pagina del singolo reparto (che tra le altre info riporta il nome del responsabile e i suoi riferimenti).

Dal backend un utente manager deve poter aggiornare i dati relativi.

Per ora sto realizzando il backend, che comprende una view per le sezioni, una per i reparti, una per le sedi e una per i responsabili, ciascuna delle quali porta ad un'altra view per l'edit del singolo record.
Per ogni elemento ho creato i files per le classi controller, table, model e view, più il default.php, raggruppati in cartelle come "da copione", che seguono abbastanza pedissequamente gli esempi che ho studiato, senza grandi personalizzazioni.

Fino a qui è filato tutto liscio, seguendo un paio di tutorial (citati anche qui in "link utili") praticamente non ho dovuto scrivere nulla, ho utilizzato le classi di joomla, compresa la creazione di una generic.list per selezionare l'ufficio di appartenenza di ogni sezione con una combo. Questo della 'sede centrale' unica è stato il primo ostacolo, perché usciva un po' dal "binario".

Fino ad ora ho creato o siti da zero in php (ma senza usare le classi) o con joomla o drupal, ma senza "metterci le mani dentro". Adesso questo progettino mi sta facendo scoprire cosa c'è "sotto la pelle" di joomla e più ci guardo più mi piace, per questo ci tengo a seguire le convenzioni di joomla e a realizzare un componente conforme, per quanto banale, per questo ogni suggerimento e critica è moooolto benvenuto.
ci sedemmo dalla parte del torto, visto che tutti gli altri posti erano occupati

mau_develop

  • Visitatore
Re:fare un update di tutti i records dalla vista generale del backend
« Risposta #4 il: 01 Dic 2010, 16:58:41 »
stasera guardo con più attenzione ciò che hai scritto, nel frattempo se vuoi costruire una struttura di test puoi usare il tutorial in qs sezione che avevo fatto su jquery e le googlemaps.

Marco inoltre aveva fatto un bel tool per costruire le strutture di sviluppo.

M.

Offline mmleoni

  • Global Moderator
  • Instancabile
  • *****
  • Post: 5547
  • Sesso: Maschio
  • Just another *nix coder/sysadmin...
    • Mostra profilo
Re:fare un update di tutti i records dalla vista generale del backend
« Risposta #5 il: 01 Dic 2010, 22:59:19 »
il mio tool, anche se un poco abbandonato per ragioni di servizio, fa ancora il suo dovere  ;D

se hai scritto il codice per le table sai dove intervenire!

ciao,
marco
« Ultima modifica: 01 Dic 2010, 23:02:19 da mmleoni »
mmleoni web consulting - creazione siti web aziendali ed e-commerce avanzati - sviluppo moduli e componenti Joomla

Offline kassandra

  • Esploratore
  • **
  • Post: 60
  • Sesso: Femmina
    • Mostra profilo
Re:fare un update di tutti i records dalla vista generale del backend
« Risposta #6 il: 02 Dic 2010, 14:52:06 »
caro  marco, ma è bello assai!

Sono contenta di aver scritto tutto a manina santa per la prima volta, così ho avuto modo di capire meglio la logica, però adesso non potrei chiedere di meglio. Grazie di aver condiviso questo lavoro, nei prossimi giorni ci "giocherò" parecchio.

stasera guardo con più attenzione ciò che hai scritto, nel frattempo se vuoi costruire una struttura di test puoi usare il tutorial in qs sezione che avevo fatto su jquery e le googlemaps.
veni, vidi, legi  8)
ci sedemmo dalla parte del torto, visto che tutti gli altri posti erano occupati

 



Web Design Bolzano Kreatif