it-swarm-eu.dev

Come utilizzare i dati da un'altra tabella a mio avviso?

Sto lottando per imparare Joomla 3.x e sono confuso su come unire il mio record a un'altra tabella e usare i dati uniti nella mia vista/modulo. Ho familiarità con i componenti che usano qualcosa di simile a questo: (ho incluso solo frammenti parziali perché l'approccio con cui ho familiarità sembra abbastanza comune tra gli altri componenti e i miei risultati su Google)

modelli/mymodel.php

// JOIN and retrieve the data I'm interested in:
function getData()
    $query = $db->getQuery(true);
    $query->select('a.name, b.lastvisitDate FROM #__mytable AS a')
          ->innerJoin('#__users AS b ON a.created_by = b.id');

vista\myview\tmpl\default.php

// The data from the joined data is available for display something like this
echo "<span>" . $this->item->lastvisitDate. "</span>"

Ora, con Joomla 3, vedo una serie di funzioni come prepareTable, getTable, getForm, loadFormData e getItem.

Per quanto posso dire, utilizza moduli/XML predefiniti, campi e tali che descrivono la tabella principale in modo molto dettagliato. Sono in grado di modificare i dati in getItem che mostrano nella vista, ma non ho idea di come ottenere dati utilizzabili dal secondo tavolo!

Qual è il modo migliore per unire la mia tabella principale a un'altra ed essere in grado di visualizzare tali informazioni con la vista. ( ad es. JOIN myTable.created_by su #__ users.id per ottenere qualcosa come la data dell'ultima visita.)

5
Al Knight

Non sono sicuro se questo è il modo migliore per farlo (per favore commenta se c'è un modo migliore), o è esattamente quello che stai cercando, ma ecco il mio approccio usando un articolo di Joomla come esempio:

File di interesse

  • componenti\com_content\vista\articolo\view.html.php
  • componenti\com_content\modelli\article.php

Modifica view.html.php

Nella parte superiore di public function display($tpl = null), vedrai una linea come questa:

$this->item = $this->get('Item');

Ottiene i dati dell'articolo dalla funzione getItem che si trova in models\article.php

Duplica quella linea in qualcosa del genere:

$this->item = $this->get('Mydata');

Modifica article.php

Ora devi aggiungere la funzione per ottenere i dati che ti interessano con questo blocco di codice: (chiamato in base a come lo chiami, preceduto da 'get')

 public function getMydata($pk = null)
{
    $myItemObj = new stdClass();
    $myItemObj->something = 'something you need';

    $db    = JFactory::getDbo();
    $query = $db->getQuery(true);
    $query->select('*')
    ->from($db->quoteName('#__users'))
    ->where($db->quoteName('id') . ' = 467');
    $db->setQuery($query);
    $myItemObj->MydbObj = $db->loadObject();

    return $myItemObj;
}

A tuo avviso, ora puoi accedere a questi dati in questo modo:

echo "<span>". $this->myData->something ."</span>";
echo "<span>". $this->myData->MydbObj->username ."</span>";

Potresti voler controllare so di più modelli in un componente MVC se hai bisogno di una soluzione più completa.

7
GDP