J'ai ajouté une colonne de grille personnalisée en utilisant l'URL du champ dans une base de données personnalisée:
$this->addColumn('url', array(
'header' => Mage::helper('companymodule')->__('Has Website'),
'align' => 'left',
'index' => 'url',
'renderer' => new Company_Module_Block_Adminhtml_Module_Grid_Renderer_HasUrl(),
'type' => 'options',
'options' => Mage::getSingleton('companymodule/hasurl')->getOptionArray(),
));
Et créé ce rendu personnalisé:
class Company_Module_Block_Adminhtml_Module_Grid_Renderer_HasUrl extends Mage_Adminhtml_Block_Widget_Grid_Column_Renderer_Abstract
{
public function render(Varien_Object $row)
{
$value = trim((string)$row->getData($this->getColumn()->getIndex()));
if (empty($value)) {
return 'No';
} else {
return 'Yes';
}
}
}
Ainsi qu'un modèle personnalisé pour le filtre dropdwon:
class Company_Module_Model_Hasurl extends Varien_Object
{
static public function getOptionArray()
{
return array(
'Yes' => Mage::helper('companymodule')->__('Yes'),
'No' => Mage::helper('companymodule')->__('No')
);
}
}
Cela fonctionne bien, sauf si vous essayez de filtrer. Je pense qu'il essaie de faire correspondre la valeur «Oui» à la valeur de $row->getData($this->getColumn()->getIndex())
(le champ URL dans la table de base de données.) Mais au lieu de faire correspondre la valeur du champ URL lui-même, j'essaie essentiellement de filtrer par ((bool)empty($url))
afin que l'utilisateur puisse filtrer si cette entrée de base de données a ou non une URL.
Comment puis-je créer une logique personnalisée pour un filtre comme celui-ci?
'renderer' => Company_Module_Block_Adminhtml_Module_Grid_Renderer_HasUrl