Filtros en barra horizontal superior

Versión 1 (Guillermo Zdanowicz, 23/03/2016 00:05)

1 1 Guillermo Zdanowicz
h1. Filtros en barra horizontal superior
2 1 Guillermo Zdanowicz
3 1 Guillermo Zdanowicz
4 1 Guillermo Zdanowicz
Referencia: http://yii2enespanol.com/2016/02/
5 1 Guillermo Zdanowicz
6 1 Guillermo Zdanowicz
en seccion required del composer
7 1 Guillermo Zdanowicz
8 1 Guillermo Zdanowicz
<pre>
9 1 Guillermo Zdanowicz
“kartik-v/yii2-date-range”: “dev-master”
10 1 Guillermo Zdanowicz
</pre>
11 1 Guillermo Zdanowicz
12 1 Guillermo Zdanowicz
13 1 Guillermo Zdanowicz
en models/comprasSearch.php
14 1 Guillermo Zdanowicz
15 1 Guillermo Zdanowicz
<pre>
16 1 Guillermo Zdanowicz
Allí, deberemos agregar una nueva propiedad pública:
17 1 Guillermo Zdanowicz
</pre>
18 1 Guillermo Zdanowicz
*$public $rango_fecha;*
19 1 Guillermo Zdanowicz
<pre>
20 1 Guillermo Zdanowicz
Estamos declarando la variable que contendrá el rango de fechas a partir del cual realizaremos la búsqueda.
21 1 Guillermo Zdanowicz
22 1 Guillermo Zdanowicz
Recordemos, que para que este nuevo atributo pueda ser usado en las búsquedas, debemos declararlo como “safe”.
23 1 Guillermo Zdanowicz
</pre>
24 1 Guillermo Zdanowicz
25 1 Guillermo Zdanowicz
<pre>
26 1 Guillermo Zdanowicz
    public function rules()
27 1 Guillermo Zdanowicz
28 1 Guillermo Zdanowicz
  [['descripcion', 'fecha_factura', 'fecha_recepcion', 'imputacion_compra', 'comprobante', 'modo_pago', 'rango_fecha', 'fecha_desde', 'fecha_hasta'], 'safe'],
29 1 Guillermo Zdanowicz
</pre>
30 1 Guillermo Zdanowicz
31 1 Guillermo Zdanowicz
en /views/compras/index.php
32 1 Guillermo Zdanowicz
33 1 Guillermo Zdanowicz
<pre>
34 1 Guillermo Zdanowicz
use kartik\daterange\DateRangePicker;
35 1 Guillermo Zdanowicz
36 1 Guillermo Zdanowicz
</pre>
37 1 Guillermo Zdanowicz
<pre>
38 1 Guillermo Zdanowicz
[
39 1 Guillermo Zdanowicz
            'attribute' => 'rango_fecha',
40 1 Guillermo Zdanowicz
            'value' => 'fecha',
41 1 Guillermo Zdanowicz
            'format'=>'raw',
42 1 Guillermo Zdanowicz
            'options' => ['style' => 'width: 25%;'],
43 1 Guillermo Zdanowicz
            'filter' => DateRangePicker::widget([
44 1 Guillermo Zdanowicz
                'model' => $searchModel,
45 1 Guillermo Zdanowicz
                'attribute' => 'rango_fecha',
46 1 Guillermo Zdanowicz
                'useWithAddon'=>false,
47 1 Guillermo Zdanowicz
                'convertFormat'=>true,
48 1 Guillermo Zdanowicz
                'pluginOptions'=>[
49 1 Guillermo Zdanowicz
                    'locale'=>['format'=>'Y-m-d']
50 1 Guillermo Zdanowicz
                ],
51 1 Guillermo Zdanowicz
            ])
52 1 Guillermo Zdanowicz
        ],
53 1 Guillermo Zdanowicz
</pre>
54 1 Guillermo Zdanowicz
55 1 Guillermo Zdanowicz
<pre>
56 1 Guillermo Zdanowicz
Estos atributos, ya cumplen su propósito de realizar el filtrado, gracias a las siguientes líneas que ya están presentes en nuestro método:
57 1 Guillermo Zdanowicz
58 1 Guillermo Zdanowicz
$query->andFilterWhere(['>=', 'fecha', $this->fecha_desde]);
59 1 Guillermo Zdanowicz
$query->andFilterWhere(['<=', 'fecha', $this->fecha_hasta]);
60 1 Guillermo Zdanowicz
61 1 Guillermo Zdanowicz
Lo único que resta hacer, entonces, es agregar arriba de esas líneas la lógica para asignar las partes de rango_fecha a fecha_desde y fecha_ hasta.
62 1 Guillermo Zdanowicz
63 1 Guillermo Zdanowicz
Hagámoslo de la siguiente manera:
64 1 Guillermo Zdanowicz
65 1 Guillermo Zdanowicz
66 1 Guillermo Zdanowicz
if (isset($this->rango_fecha) && !empty($this->rango_fecha)) {
67 1 Guillermo Zdanowicz
list($this->fecha_desde, $this->fecha_hasta) = explode(' - ', $this->rango_fecha);}
68 1 Guillermo Zdanowicz
69 1 Guillermo Zdanowicz
Si ahora seleccionamos un rango de fechas, veremos que el filtro funciona perfectamente. Como estamos asignando valores a fecha_desde y fecha_hasta, dichos valores estarán visibles en el formulario _search.
70 1 Guillermo Zdanowicz
</pre>
Redmine Appliance - Powered by TurnKey Linux