PDA

Zobacz pełną wersję : Wyszukiwanie, paginacja



Craft
13-11-2014, 22:35
Witam,

Od frontendu bez udziwnień jest ok.
Czyli
model - firmy.php


protected function getListQuery() {
// Create a new query object.
$db = JFactory::getDBO();
$query = $db->getQuery(true);

// Select some fields
$query->select('*');

// From the test_firma table
$query->from($db->quoteName('#__test_firma'));
return $query;
}


view.html.php


function display($tpl = null) {
// Assign data to the view
JRequest::setVar('limit', JRequest::getVar('limit', 10, '', 'int'));
JRequest::setVar('limitstart', JRequest::getVar('limitstart', 0, '', 'int'));
$pagination = $this->get('Pagination');
$items = $this->get('Items');

// Check for errors.
if (count($errors = $this->get('Errors'))){
JError::raiseError(500, implode('<br />', $errors));
return false;
};

$this->pagination = $pagination;
$this->items = $items;

// Display the view
parent::display($tpl);
}



widok - default.php


<?php foreach ($this->items as $item) { ... ?>
<?php }; ?>
<div class="pagination">
<?php echo $this->pagination->getPagesLinks(); ?>
</div>



I to jest ok. Wyświetla listę z paginacją.
Ale dodałem formularz wyszukiwania i dokonałem zmiany w modelu.
W sumie główna zmiana to klauzula WHERE




protected function populateState() {

$app = JFactory::getApplication('site');
// Load state from the request.

$szukaj = JRequest::getString('szukaj');
$this->setState('szukaj', $szukaj);
}

protected function getListQuery() {
// Create a new query object.
$db = JFactory::getDBO();
$query = $db->getQuery(true);
// Select some fields
$query->select('*');
// From the test_firma table
$query->from($db->quoteName('#__test_firma'));
$query->where($db->quoteName('nazwa') . ' LIKE ' . $db->quote('%' . $this->getState('szukaj') . '%')
. ' OR ' . $db->quoteName('krotkiopis') . ' LIKE ' . $db->quote('%' . $this->getState('szukaj') . '%')
. ' OR ' . $db->quoteName('opis') . ' LIKE ' . $db->quote('%' . $this->getState('szukaj') . '%')
. ' OR ' . $db->quoteName('nip') . ' LIKE ' . $db->quote('%' . $this->getState('szukaj') . '%')
. ' OR ' . $db->quoteName('krs') . ' LIKE ' . $db->quote('%' . $this->getState('szukaj') . '%')
. ' OR ' . $db->quoteName('regon') . ' LIKE ' . $db->quote('%' . $this->getState('szukaj') . '%')
. ' OR ' . $db->quoteName('pkd') . ' LIKE ' . $db->quote('%' . $this->getState('szukaj') . '%')
. ' OR ' . $db->quoteName('telefon') . ' LIKE ' . $db->quote('%' . $this->getState('szukaj') . '%')
. ' OR ' . $db->quoteName('fax') . ' LIKE ' . $db->quote('%' . $this->getState('szukaj') . '%')
. ' OR ' . $db->quoteName('url') . ' LIKE ' . $db->quote('%' . $this->getState('szukaj') . '%')
. ' OR ' . $db->quoteName('email') . ' LIKE ' . $db->quote('%' . $this->getState('szukaj') . '%')
. ' OR ' . $db->quoteName('nrzezwolenia') . ' LIKE ' . $db->quote('%' . $this->getState('szukaj') . '%')
. ' OR ' . $db->quoteName('wojewodztwo') . ' LIKE ' . $db->quote('%' . $this->getState('szukaj') . '%')
. ' OR ' . $db->quoteName('powiat') . ' LIKE ' . $db->quote('%' . $this->getState('szukaj') . '%')
. ' OR ' . $db->quoteName('gmina') . ' LIKE ' . $db->quote('%' . $this->getState('szukaj') . '%')
. ' OR ' . $db->quoteName('miasto') . ' LIKE ' . $db->quote('%' . $this->getState('szukaj') . '%')
. ' OR ' . $db->quoteName('ulica') . ' LIKE ' . $db->quote('%' . $this->getState('szukaj') . '%')
. ' OR ' . $db->quoteName('kodpocztowy') . ' LIKE ' . $db->quote('%' . $this->getState('szukaj') . '%'));

return $query;
}


I teraz wyświetla się cała lista bez paginacji.
Nie wiem jak ten temat ugryźć.

Może już ktoś coś podobnego robił i jest w stanie coś podpowiedzieć?

Pozdrawiam,
Łukasz

Jola
13-11-2014, 23:51
Chodzi pewnie o brak LIMIT w zapytaniu :).

Craft
14-11-2014, 12:00
A właśnie, że nie :)
Pisałem jeszcze w taki sposób
edycja modelu:



protected function populateState() {

$app = JFactory::getApplication('site');
$config = JFactory::getConfig();
// Load state from the request.

// Get the pagination request variables
$this->setState('limit', $app->getUserStateFromRequest('com_test.limit', 'limit', $config->get('list_limit'), 'uint'));
$this->setState('limitstart', $app->input->get('limitstart', 0, 'uint'));

$szukaj = JRequest::getString('szukaj');
$this->setState('szukaj', $szukaj);
}

protected function getListQuery() {
// Create a new query object.
$db = JFactory::getDBO();
$query = $db->getQuery(true);
// Select some fields
$query->select('*');
// From the test_firma table
$query->from($db->quoteName('#__test_firma'));
$query->where($db->quoteName('nazwa') . ' LIKE ' . $db->quote('%' . $this->getState('szukaj') . '%')
. ' OR ' . $db->quoteName('krotkiopis') . ' LIKE ' . $db->quote('%' . $this->getState('szukaj') . '%')
. ' OR ' . $db->quoteName('opis') . ' LIKE ' . $db->quote('%' . $this->getState('szukaj') . '%')
. ' OR ' . $db->quoteName('nip') . ' LIKE ' . $db->quote('%' . $this->getState('szukaj') . '%')
. ' OR ' . $db->quoteName('krs') . ' LIKE ' . $db->quote('%' . $this->getState('szukaj') . '%')
. ' OR ' . $db->quoteName('regon') . ' LIKE ' . $db->quote('%' . $this->getState('szukaj') . '%')
. ' OR ' . $db->quoteName('pkd') . ' LIKE ' . $db->quote('%' . $this->getState('szukaj') . '%')
. ' OR ' . $db->quoteName('telefon') . ' LIKE ' . $db->quote('%' . $this->getState('szukaj') . '%')
. ' OR ' . $db->quoteName('fax') . ' LIKE ' . $db->quote('%' . $this->getState('szukaj') . '%')
. ' OR ' . $db->quoteName('url') . ' LIKE ' . $db->quote('%' . $this->getState('szukaj') . '%')
. ' OR ' . $db->quoteName('email') . ' LIKE ' . $db->quote('%' . $this->getState('szukaj') . '%')
. ' OR ' . $db->quoteName('nrzezwolenia') . ' LIKE ' . $db->quote('%' . $this->getState('szukaj') . '%')
. ' OR ' . $db->quoteName('wojewodztwo') . ' LIKE ' . $db->quote('%' . $this->getState('szukaj') . '%')
. ' OR ' . $db->quoteName('powiat') . ' LIKE ' . $db->quote('%' . $this->getState('szukaj') . '%')
. ' OR ' . $db->quoteName('gmina') . ' LIKE ' . $db->quote('%' . $this->getState('szukaj') . '%')
. ' OR ' . $db->quoteName('miasto') . ' LIKE ' . $db->quote('%' . $this->getState('szukaj') . '%')
. ' OR ' . $db->quoteName('ulica') . ' LIKE ' . $db->quote('%' . $this->getState('szukaj') . '%')
. ' OR ' . $db->quoteName('kodpocztowy') . ' LIKE ' . $db->quote('%' . $this->getState('szukaj') . '%'));

$db->setQuery($query,$this->getState('limit'),$this->getState('limitstart'));
return $query;
}


I w tym przypadku faktycznie lista miała ograniczoną liczbę elementów ale nadal nie było paginacji. I nie można przejść dalej, do kolejnych wyników.