Cześć.
Szukam u was porady do pewnego problemu, zaznaczam że obecna forma działa, lecz jest niedoskonała.
Teraz do sedna.
Problemem jest wykorzystanie kalendarza w komponencie, który stworzyłem. Chodzi o to, że na początku w kodzie mam pobieranie zmiennych zawartych w tym kalendarzu i wykorzystanie ich do pobrania danych z bazy opartych na datetime. Jest również moduł paginacji, który niestety odświeża całą stronę i ponownie pobierane są dane podstawowe z kalendarza. Dane po pierwszym pobraniu zapisuje w sesji, ale odświeżenie powoduje napisanie tych danych. Dodatkowo w obecnej formie miejsca w kalendarzu są puste po odświeżeniu (nie wyświetla tego co mu się wybrało).
Jeśli będzie potrzeba to doprecyzuje jeszcze.
Dzięki za rady.
Plik XML:
Kod:
<?xml version="1.0" encoding="utf-8"?>
<form>
<fields name="filter">
<field
name="date_start"
type="calendar"
label="Select Start date"
description=""
class="input-medium"
required="false"
filter="user_utc"
format="%Y-%m-%d %H:%M:%S"
default="00:00:00"
singleheader="true"
showtime="true"
timeformat="24"
todaybutton="true"
weeknumbers="true"
filltable="true"
minyear="-3"
maxyear="5"
/>
<field
name="date_stop"
type="calendar"
label="Select End date"
description=""
class="input-medium"
required="false"
filter="user_utc"
format="%Y-%m-%d %H:%M:%S"
default="23:59:59"
singleheader="true"
showtime="true"
timeformat="24"
todaybutton="true"
weeknumbers="true"
filltable="true"
minyear="-3"
maxyear="5"
/>
</fields>
</form>
Kod odpowiedzialny za pobieranie danych na obecną chwilę:
Kod PHP:
protected function getListQuery()
{
// Initialize variables.
$db = JFactory::getDbo();
$query = $db->getQuery(true);
// Create the base select statement.
$query->select('*')
->from($db->quoteName('log_php'));
// Filter: like / search
$search = $this->getState('filter.search');
if (!empty($search))
{
$like = $db->quote('%' . $search . '%');
$query->where('content LIKE ' . $like . 'OR err_str LIKE ' . $like . 'OR file LIKE ' . $like);
}
// Filter Published
$published = $this->getState('filter.published');
if (is_numeric($published))
{
$query->where('published = ' . (int) $published);
}
elseif ($published === '')
{
$query->where('(published IN (0, 1))');
}
$session = JFactory::getSession();
$start_date = $db->quote($this->getState('filter.date_start'));
$stop_date = $db->quote($this->getState('filter.date_stop'));
if($stop_date == '\'\''){
$def_stop_date = new DateTime();
$stop_date = $def_stop_date->setTime(23, 59, 59)->format('Y-m-d H:i:s');
}
if($start_date !== '\'\'' && $stop_date !== '\'\''){
$session->set('start_date', $start_date);
$session->set('stop_date', $stop_date);
}
if((empty($session->get('start_date')) && empty($session->get('stop_date'))) || ($session->get('start_date') == '\'\'' && $session->get('stop_date') == '\'\'')) {
$def_start_date = new DateTime();
$def_start_date->setTime(00, 00, 01);
$def_stop_date = new DateTime();
$def_stop_date->setTime(23, 59, 59);
$session->set('def_start_date', $db->quote($def_start_date->format('Y-m-d H:i:s')));
$session->set('def_stop_date', $db->quote($def_stop_date->format('Y-m-d H:i:s')));
$query->where('date_time BETWEEN '.$session->get('def_start_date').' AND ' . $session->get('def_stop_date') );
}else{
$query->where('date_time BETWEEN '. $session->get('start_date') . ' AND ' . $session->get('stop_date') );
}
return $query;
}