Back to top

Autore Topic: Settare i valori di una chiave esterna  (Letto 2709 volte)

Offline cvirgili

  • Nuovo arrivato
  • *
  • Post: 16
    • Mostra profilo
Settare i valori di una chiave esterna
« il: 24 Feb 2012, 21:58:43 »
Salve a tutti,
 sto provando a scrivere un piccolo componente per joomla.
Vorrei fare una cosa molto semplice ho due tabelle, con una relazione 1:n, una classica master-details.

In tutti gli esempi che ho visto, la chiave esterna del master viene settata dall'utente sulla tabella detail.
Facciamo un esempio: supponiamo di avere squadra e giocatori.
Creo una squadra (id:s001), se ora voglio aggiungere un giocatore attraverso un bottone "aggiungi giocatore" in cui viene settato automaticamente nella form, il valore id_squadra con s001.
Purtroppo in tutti gli esempi che ho visto fin'ora i passi sono: "aggiungi giocatore" si apre una form  in cui si sceglie la squadra a cui appartiene.

Mi sfugge questo:
 - dalla view chiedo di aggiungere il giocatore (nella squadra s001)
 - dal controller dovrei chiedere al model la form e dirgli di settarmi la chiave esterna il vaore s001
 -  questo punto nella view (edit) dovrei vedere la squadra già settata nel record nuovo...

Corretto?

Fin'ora non sono riuscito a settare questo benedetta chiave esterna. Potete darmi una dritta?

Grazie,
 Cristian




mau_develop

  • Visitatore
Re:Settare i valori di una chiave esterna
« Risposta #1 il: 25 Feb 2012, 08:31:47 »
sai che nn si capisce un tubo :)
nn riuscirei nemmeno a dirti se la tua rappresentazione dell'mvc sia esatta....cmq

o metti un menu a discesa ottenuto da una query sulla tabella che tu chiami master
o ricorri ad ajax scegliendo prima la squadra e poi inserendo il nuovo giocatore
o passi l'id della squadra in un campo hidden quando scegli "aggiungi"

M.

Offline cvirgili

  • Nuovo arrivato
  • *
  • Post: 16
    • Mostra profilo
Re:Settare i valori di una chiave esterna
« Risposta #2 il: 25 Feb 2012, 15:38:30 »
Ciao!
 Si mi rendo conto che sono stato troppo sintetico nella descrizione ed è confusa perchè io sono confuso :)

Tra le tre soluzioni che mi proponi avevo provato a mettere in pratica la terza.

Riporto un po' di codice a beneficio di tutti (spero) :)

Questo è admin/models/forms/team.xml
Codice: [Seleziona]
<?xml version="1.0" encoding="utf-8"?>
<form
    addrulepath="/administrator/components/com_teaman/models/rules"
>
    <fieldset>
        <field
            name="id"
            type="hidden"
        />
       
           
         <field
            name="name"
            type="editor"
            buttons="true"
            hide="pagebreak,readmore"
            filter="safehtml"
            label="COM_TEAMAN_TEAM_NAME_LABEL"
            description="COM_TEAMAN_TEAM_NAME_DESC"
            size="50"
            class="inputbox"
           
            required="false"
            default=""
        /> 
           
    </fieldset>
   

</form>


Questo è admin/models/forms/palyer.xml
 
Codice: [Seleziona]
<?xml version="1.0" encoding="utf-8"?>
 <form
     addrulepath="/administrator/components/com_teaman/models/rules"
 >
     <fieldset>
         <field
             name="id"
             type="hidden"
         />
                 <field
             name="id_team"
             type="hidden"
         />
         
             
          <field
             name="name"
             type="editor"
             buttons="true"
             hide="pagebreak,readmore"
             filter="safehtml"
             label="COM_TEAMAN_PLAYER_NAME_LABEL"
             description="COM_TEAMAN_PLAYER_NAME_DESC"
             size="50"
             class="inputbox"
             required="false"
             default=""
         /> 
             
     </fieldset>
     
 
 </form>
 


Questo è il mio "admin/views/players/default.php"
Codice: [Seleziona]
<?php
// No direct access to this file
defined('_JEXEC') or die('Restricted Access');
 
// load tooltip behavior
JHtml::_('behavior.tooltip');
?>

<form action="<?php echo JRoute::_('index.php?option=com_teaman'); ?>" method="post" name="adminForm" id="adminForm">
    <table class="adminlist">
        <thead><?php echo $this->loadTemplate('head');?></thead>
        <tfoot><?php echo $this->loadTemplate('foot');?></tfoot>
        <tbody><?php echo $this->loadTemplate('body');?></tbody>
    </table>
        <div>
        <a href="<?php $id_team=JRequest::getVar('id','0'); echo JRoute::_('index.php?option=com_teaman&task=player.edit&id_team='.$id_team); ?>">AGGIUNGI GIOCATORE</a>
        <input type="hidden" name="task" value="" />
        <input type="hidden" name="id_team" value="<?php echo JRequest::getVar('id','0');?>" />
        <input type="hidden" name="boxchecked" value="0" />
        <?php echo JHtml::_('form.token'); ?>
    </div>
</form>

Siccome non riuscivo a passare il valore di "id_team" attraverso il bottone "new" della barra di admin(ho provato a metterlo anche come hidden per usarlo attraverso i bottoni della barra di armin ma poi non so come recuperarlo), ho creato il link di "AGGIUNGI GIOCATORE" con il valore che voglio passare.

Supponiamo che id_team sia 2.


Questo è il mio "admin/models/player.php

Codice: [Seleziona]
<?php
// No direct access to this file
defined('_JEXEC') or die('Restricted access');
// import Joomla modelform library
jimport('joomla.application.component.modeladmin');
/**
 * Log Model
 */
class TeamanModelPlayer extends JModelAdmin
{

    public function 
getTable($type 'Palyer'$prefix 'TeamanTable'$config = array())
    {
        return 
JTable::getInstance($type$prefix$config);
    }

    public function 
getForm($data = array(), $loadData true)
    {
        
// Get the form.
        
$form $this->loadForm('com_lawyer.player''player',
        array(
'control' => 'jform''load_data' => $loadData));
        if (empty(
$form))
        {
            return 
false;
        }
        
        return 
$form;
    }
   

    protected function 
loadFormData()
    {
        
// Check the session for previously entered form data.
        
$data JFactory::getApplication()->getUserState('com_teaman.edit.player.data', array());
        if (empty(
$data))
        {
            
$data $this->getItem();
            
        }
        return 
$data;
    }
    
}

Ecco: qui sopra in nessuna funzione (getForm e loadFormData) riesco con una JRequest::getVar('id_team','0') a recuperare il valore della variabile. Come faccio? Nel caso ci riuscissi dove devo settarlo su $data su $form ?
Devo intervenire sul controller player.php (attualmente è solo una extends JControllerForm)?


Spero che ora il mio problema si più chiaro... altrimenti potrei postare il componente d'esempio.

Grazie,
 Cristian




mau_develop

  • Visitatore
Re:Settare i valori di una chiave esterna
« Risposta #3 il: 25 Feb 2012, 19:25:33 »
mmhh no ancora non capisco molte cose, ma non diventare matto, potrebbe tranquillamente essere un limite mio, magari un po' di pazienza e qualcuno che ha più chiaro il problema ti risponderà...

io avrei fatto un form solo, con una select di tipo sql sulla tabella delle squadre. L'id impostato in quella select sarà la chiave esterna nella tabella giocatori.

oppure devi partire con una pre-selezione della squadra, avevo fatto qs tutorial:
http://www.spazioalchimia.it/joomla-framework/38-joomla-17/164-aggiungere-un-filtro-alle-liste

M.
« Ultima modifica: 25 Feb 2012, 19:27:44 da mau_develop »

Offline cvirgili

  • Nuovo arrivato
  • *
  • Post: 16
    • Mostra profilo
Re:Settare i valori di una chiave esterna
« Risposta #4 il: 26 Feb 2012, 08:24:55 »

io avrei fatto un form solo, con una select di tipo sql sulla tabella delle squadre. L'id impostato in quella select sarà la chiave esterna nella tabella giocatori.


Ciao,
 ecco come faccio ad impostare quell'id?

Cerco di spiegarmi ancora meglio e per riagganciarmi all'esempio che mi hai indicato (grazie poichè mi ha chiarito altre cose:)) fai conto di avere una fattura che contiene degli articoli. Quindi seleziono una fattura e vedo gli articoli che contiene. Ecco io vorrei, selezionata la fattura, dire: aggiungi articolo. A questo punto mi compare la maschera di inserimento dei dati dell'articolo in cui c'è già inserito il codice/id della fattura. Quello che non riesco a fare è proprio questa preselezionatura nella fase di editing di un nuovo articolo.

Buona domenica,
 Cristian



 



Web Design Bolzano Kreatif