Estou lutando para aprender o Joomla 3.xe estou confuso sobre como associar meu registro a outra tabela e usar os dados associados em meu modo de exibição/formulário. Estou familiarizado com componentes que usam algo semelhante a este: (incluí apenas trechos parciais porque a abordagem com a qual estou familiar parece bastante comum em outros componentes e nos resultados do google)
models/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');
visualizações\myview\tmpl\default.php
// The data from the joined data is available for display something like this
echo "<span>" . $this->item->lastvisitDate. "</span>"
Agora, com o Joomla 3, vejo uma série de funções como prepareTable
, getTable
, getForm
, loadFormData
e getItem
.
O melhor que posso dizer é o uso de formulários/XML predefinidos, campos e outros que descrevem a tabela principal em grande detalhe. Consigo alterar dados em getItem
que são exibidos na exibição, mas não tenho noção de como obter dados utilizáveis a partir do segundo tabela!
Qual é a melhor maneira de associar minha tabela principal a outra e poder exibir essas informações com a exibição. (, por exemplo, JOIN myTable.created_by em #__ users.id para obter algo como a data da última visita.)
Não tenho certeza se essa é a melhor maneira de fazê-lo (por favor, comente se existe uma maneira melhor), ou é exatamente o que você está procurando, mas aqui está minha abordagem usando um artigo do Joomla como exemplo:
Arquivos de interesse
Modifique view.html.php
Perto do topo de public function display($tpl = null)
, você verá uma linha como esta:
$this->item = $this->get('Item');
Ele obtém os dados do artigo da função getItem
localizada em models\article.php
Duplique essa linha para algo assim:
$this->item = $this->get('Mydata');
Modifique article.php
Agora você deve adicionar a função para obter os dados de seu interesse com este bloco de código: (nomeado de acordo com a forma como você está chamando, precedido por '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;
}
Na sua opinião, agora você pode acessar esses dados assim:
echo "<span>". $this->myData->something ."</span>";
echo "<span>". $this->myData->MydbObj->username ."</span>";
Você pode verificar sando vários modelos em um componente MVC se precisar de uma solução mais abrangente.