Hallo zusammen,
ich habe im Backend meiner Komponente bei einem Test einen Fehler gefunden, den ich mir derzeit nicht erklären kann:
Ich habe eine ganz normale Liste mit Items, welche aus der getListQuery-Methode des Models gewonnen wird. Zudem habe ich einige Filter eingebunden, welche allerdings nach dem Klick auf den jGrid-Button nicht mehr aktiv sind.
Der Filter für die Kategorie wird folgendermaßen erstellt:
<field name = "category_id" type = "category" label = "JOPTION_FILTER_CATEGORY" extension = "com_bestia.items" description = "JOPTION_FILTER_CATEGORY_DESC" onchange = "this.form.submit();" > <option value = "">JOPTION_SELECT_CATEGORY</option></field>
In der view.html.php lade ich die Filter folgendermaßen:
$this->filterForm = $this->get('FilterForm'); $this->activeFilters= $this->get('ActiveFilters');
Diese werden dann im Layout gerendert:
Der Konstruktor des Models sieht folgendermaßen aus:
public function __construct($config = array()) { if (empty($config['filter_fields'])) { $config['filter_fields'] = array( 'id', 'a.id', 'title', 'a.title', 'catid', 'nc.catid', 'category_title', 'state', 'a.state', 'created_by', 'a.created_by' ); } parent::__construct($config);}
Und auch in die populateState()-Methode sollte passen:
/** * populateState function. * * @access protected * @param mixed $ordering (default: null) * @param mixed $direction (default: null) * @return void */protected function populateState($ordering = null, $direction = null) { // Initialise variables. $app = JFactory::getApplication('administrator'); // Load the filter state. $search = $app->getUserStateFromRequest($this->context . '.filter.search', 'filter_search'); $this->setState('filter.search', $search); $published = $app->getUserStateFromRequest($this->context . '.filter.state', 'filter_published', '', 'string'); $this->setState('filter.state', $published); $categoryId = $this->getUserStateFromRequest($this->context . '.filter.catid', 'filter_category_id', ''); $this->setState('filter.catid', $categoryId); // Load the parameters. $params = JComponentHelper::getParams('com_bestia'); $this->setState('params', $params); // List state information. parent::populateState('a.id', 'asc');}
In der getListQuery hole ich mir den Filter wie folgt:
Den Button, der den Fehler hervorruft, binde ich folgendermaßen ein (ist selbst definiert, da ich neben "veröffentlicht" etc. noch einen weiteren Status implementieren musste):
<td class="small"> <?php echo JHtml::_('jgrid.published', $item->state, $i, 'items.', $canChange, 'cb'); ?> </td>
Soweit, so gut. Der Filter funktioniert so lange, bis ich den Button anklicke. Interessant ist aber auch, dass das Filter-Feld selbst nach dem Anklicken blau markiert bleibt, als ob der Filter aktiv sei - dennoch zeigt die Liste alle möglichen Ergebnisse aus verschiedenen Kategorien an.
Ich habe
einmal mit var_dump ausgegeben - sobald ich den Button anklicke ist $categoryId "null". Aber warum?