Filtro filter_condition_callback con json

Robert30

Nuevo usuario
Hola a toda la comunidad; el motivo de esta consulta es porque quiero agregar un filtro de búsqueda en una columna del grid view de las ordenes en el admin panel.

El caso es que tengo está columna "Final Customer"

filtro_final_customer.png

Ahora bien, como he agregado esa columna con los siguientes functions

PHP:
class FFV_Myadminhtml_Block_Sales_Order_Renderer_Delivery
    extends Mage_Adminhtml_Block_Widget_Grid_Column_Renderer_Abstract
{
    public function render(Varien_Object $row)
    {
        //load first item of the order
        $orderItem = Mage::getResourceModel('sales/order_item_collection')
                        ->addFieldToFilter('order_id', $row->getId())
                        ->getFirstItem()
                        ;
        $orderItemOptions = $orderItem->getProductOptions();
        //if product doesn't have options stop with rendering
        if (!array_key_exists('options', $orderItemOptions)) {
            return '';
        }
        $orderItemOptions = $orderItemOptions['options'];
        //if product options isn't array stop with rendering
        if (!is_array($orderItemOptions)) {
            return '';
        }
        foreach ( $orderItemOptions as $orderItemOption) {
        $label = $orderItemOption['label'];
            if ($label === 'Driver\'s Name and Surname:' ||
                $label === 'Nombres y Apellidos del Conductor:' ||
                $label === 'Nome e cognome del conducente:' ||
                $label === 'Nome e cognome del autista:' ||
                $label === '1- Apellidos / Nombre(s):' ||
                $label === '1- Surname / Name(s):' ||
                $label === '1- Cognome / Nome(i):' ||
                $label === 'Name:' ||
                $label === 'Name' ||
                $label === 'Nombre(s) y Apellido(s):' ||
                $label === 'Apellidos / Nombre(s):' ||
                $label === 'Name(s) and Surname(s):' ||
                $label === 'Name and Surname:' ||
                $label === 'Surname / Name(s):' ||
                $label === 'Nombre:') {
                if (array_key_exists('value', $orderItemOption)) {
                    return $orderItemOption['value'];
                }
            }
        }
        //if product options doesn't have Delivery Date custom option return void
        return '';
    }
}
En dicha función capturo el valor de que tiene los label con los nombre que necesito verificar.

En el Grid.php los muestro de la siguiente manera...


PHP:
$this->addColumn('final_customer', array(
      'header' => Mage::helper('sales')->__('Final Customer'),
      'index' => 'entity_id',
      'type'  => 'text',
      'renderer'  => 'FFV_Myadminhtml_Block_Sales_Order_Renderer_Delivery',
      //'filter_condition_callback' => array($this, '_customerFilter'),
    ));

Lo que pasa es que ahora quiero añadir una búsqueda mediante la condicion "filter_condition_callback" pero aún no he dado con el tema ya que todos los ejemplos que me aparecen en internet son con columnas sencillas y aqui tengo que extraer solo un dato de un json.

He hecho una function que me permite optener ese dato, pero lo que no se ahora es como agregarle la condicion para que pueda ser verificada por el filter_condition_callback. Aqui está mi function.

PHP:
public function getFinalCustomer($orderRowData){
        $product_options = unserialize($orderRowData['product_options']);
        //print_r($product_options); die();
        $options = $product_options['options'];
        foreach ($options as $option){
            $label = $option['label'];
            switch ($label){
                case (preg_match('/(Nome e cognome del cond)|(Nome e cognome del aut)|(Surname / Name(s):)/', $label) ? true : false):
                    $result['final_customer'] = $option['value'];
                    break;
                case (preg_match('/(1- Apellidos / Nombre(s):)|(1- Surname / Name(s):)|(1- Cognome / Nome(i):)/', $label)? true: false):
                    $result['final_customer'] = $option['value'];
                    break;
                case (preg_match('/(Nombres y Apellidos del Con)|(Driver\'s Name and Surn)|(Nombre(s) y Apellido(s):)/', $label)? true : false):
                    $result['final_customer'] = $option['value'];
                    break;
                case (preg_match('/(Apellidos / Nombre(s):)|(Name(s) and Surname(s):)|(Name and Surname:)|(Nombre:)/', $label)? true : false):
                    $result['final_customer'] = $option['value'];
                    break;
            }
        }
        return $result;
De esta manera yo optengo el dato que quiero.....pero no consigo hacer que funcione el filter_condition_callback


Alguien me puede ayudar o dar alguna idea al respecto..


Salu2 y muchas gracias
Roberto
 
Arriba