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.)
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
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.