Filtraggio errore quando si utilizza la raccolta oggetto Varien personalizzato nella griglia di amministrazione
-
16-10-2019 - |
Domanda
Ho creato una collezione oggetto Varien personalizzato per il mio modulo di amministrazione (perché i dati non è da un db) e ce l'ho con successo a mostrare in una griglia di amministrazione. Ho costruito la collezione utilizzando il seguente codice:
$collection = new Varien_Data_Collection();
All'interno del ciclo:
$object = new Varien_Object();
$object->setFileName($filename);
$collection->addItem($object);
E 'tutto perfettamente funzionante tranne quando cerco di utilizzo del filtro alla griglia di sistema di filtraggio, restituisce questo errore:
Fatal error: Chiama per metodo non definito Varien_Data_Collection :: addFieldToFilter () in /data/www/vhosts/adammoss.co.uk/httpdocs/magento/app/code/core/Mage/Adminhtml/Block/Widget/Grid. php on line 472
So che addFieldToFilter()
viene utilizzato solo su oggetti EAV, che la mia collezione ha ovviamente nessuna. La mia domanda è se qualcuno sa di qualsiasi modo per aggirare questo?
Posso aggiungere che il metodo per il mio oggetto in un modo o avrei dovuto creare un modello per questo al lavoro?
****** AGGIORNAMENTO 08/02/2012 ******
OK, quindi ho un po 'cambiato il mio modo di fare questo. Sto ancora usando il mio classe personalizzata che è un esatto duplicato di Filesystem.php
La mia collezione griglia ora assomiglia a questo:
protected function _prepareCollection()
{
$collection = new MyNamespace_MyModule_Model_Csv_Collection();
$collection->addTargetDir('my/target/path');
$this->setCollection($collection);
return parent::_prepareCollection();
}
Si carica in tutti i miei file nella rete come previsto, ed ora Numera le pagine! Tuttavia, per qualche motivo ancora non sarà filtrare o ordinare, anche se sto letteralmente appena usando la stessa classe come Filesystem.php
.
Vado a controllare classe Mage_Backup
come lei ha suggerito.
Soluzione
Il problema non nelle entità basate EAV. Metodo addFieldToFilter()
è disponibile solo in Varien_Data_Db_Collection
, che i modelli ORM serie EAV ed estendere. Se si desidera avere il vostro modulo griglia di amministrazione a lavorare con la vostra collezione nello stesso modo in quanto funziona con la collezione DB, è necessario implementare due metodi:
-
addFieldToFilter($filterName, $conditionArray)
-
setSort($fieldName, $direction)
Esempio di tale attuazione collezione personalizzata che si può trovare in classe Varien_Data_Collection_Filesystem
che utilizza FS collezioni basate. Questo tipo di raccolta, per esempio, utilizzato nel modulo Mage_Backup
per mostrare griglia con i file di backup.
Cordiali saluti, Ivan