Filtraggio errore quando si utilizza la raccolta oggetto Varien personalizzato nella griglia di amministrazione

magento.stackexchange https://magento.stackexchange.com/questions/266

  •  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.

È stato utile?

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a magento.stackexchange
scroll top