Quero criar uma exibição com filtros e paginação para o Joomla 3.x, mas não tenho certeza sobre o que tenho que incluir e onde.
Por enquanto, meu modelo estende JModelList
e comecei a usar o método getListQuery()
para buscar os dados:
<?php
defined('_JEXEC') or die;
class smartModelProducts extends JModelList{
protected function getListQuery(){
// Initialize variables.
$db = JFactory::getDbo();
$query = $db->getQuery(true);
// Create the base select statement.
$query->select('*')
->from($db->quoteName('#__smart_products'));
return $query;
}
}
Meu view.html.php fica assim:
<?php
defined('_JEXEC') or die;
class smartViewProducts extends JViewLegacy{
function display($tpl=null){
$app=JFactory::getApplication();
$jinput = $app->input;
$option = $jinput->get('option', null, null);
$user=JFactory::getUser();
// Get data from the model
$this->state = $this->get('State');
$this->items = $this->get('Items');
$this->pagination = $this->get('Pagination');
parent::display($tpl);
}
}
O que tenho que adicionar ao meu modelo e minha visão? O que tenho que incluir no meu default.php para que os filtros e a paginação funcionem?
Siga os passos abaixo:
1) Certifique-se de adicionar todos os seus campos filtráveis no construtor de modelos
public function __construct ($config = array())
{
if (empty($config['filter_fields']))
{
$config['filter_fields'] = array(
'id', 'a.id',
'catid', 'a.catid',
....
....
);
}
parent::__construct($config);
}
2) Preencha os valores de filtro em seu modelo (products.php) para usar como abaixo
protected function populateState ($ordering = null, $direction = null)
{
$search = $this->getUserStateFromRequest($this->context . '.filter.search', 'filter_search');
$this->setState('filter.search', $search);
$authorId = $app->getUserStateFromRequest($this->context . '.filter.author_id', 'filter_author_id');
$this->setState('filter.author_id', $authorId);
$published = $this->getUserStateFromRequest($this->context . '.filter.published', 'filter_published', '');
$this->setState('filter.published', $published);
$categoryId = $this->getUserStateFromRequest($this->context . '.filter.category_id', 'filter_category_id');
$this->setState('filter.category_id', $categoryId);
// and so on .....
}
3) Adicione seu arquivo xml de filtro com os campos de filtro obrigatórios definidos em models/forms/filter_products.xml
See administrator/components/com_content/models/forms/filter_articles.xml
4) Obtenha e defina filtros no seu view.html.php
$this->filterForm = $this->get('FilterForm');
$this->activeFilters = $this->get('ActiveFilters');
5) Exibir filtros na exibição de lista views/products/tmpl/default.php
<?php echo JLayoutHelper::render('joomla.searchtools.default', array('view' => $this));?>
1) Obtenha paginação do modelo em seu view.html.php
$this->pagination = $this->get('Pagination');
2) Exiba no seu views/products/tmpl/default.php
<?php echo $this->pagination->getListFooter(); ?>
Sugiro que você consulte o componente Artigos do Joomla (com_content) para qualquer desenvolvimento de componentes do Joomla MVC. É o melhor recurso/documentação disponível até o momento.
Os códigos acima destinam-se ao componente admin. Para o componente front-end, a maioria das etapas é mais ou menos a mesma, mas você precisa ajustá-las conforme sua necessidade.