javascript - 在 GridView 中双重搜索 yii2

标签 javascript arrays yii2

我想在我的应用程序中搜索字段。我有penerimaan_table。有 rm_codequantitybulanprice 字段。

如何像这样显示我的结果:

rm_code            bulan
k123                  7
k123                  4
k123                  5

当我过滤时,我只想显示 bulan 7 和 5

k123                  7
k123                  5

我该怎么做?

这是我的观点:

<?php

use yii\helpers\Html;
use kartik\grid\GridView;
use kartik\export\ExportMenu;

/* @var $this yii\web\View */
/* @var $searchModel backend\models\PenerimaanSearch */
/* @var $dataProvider yii\data\ActiveDataProvider */

$this->title = 'Penerimaan Raw Material';
$this->params['breadcrumbs'][] = $this->title;
?>
<div class="penerimaan-index">

    <h1><?= Html::encode($this->title) ?></h1>
    <?php // echo $this->render('_search', ['model' => $searchModel]); ?>

    <p>
        <?= Html::a('Tambah Penerimaan Raw Material', ['create'], ['class' => 'btn btn-success']) ?>
        <?= Html::a('Import Penerimaan', ['import'], ['class' => 'btn btn-success']) ?>

    </p>

    <p><font color="red">Deskripsi Barang yang kosong merupakan Barang Baru!!</p></font>

    <?php
    echo ExportMenu::widget([
        'dataProvider' => $dataProvider,
        'columns' => [


          //  'id',
            'rm_code',
            'rmCode.deskripsi_barang',

          'saldo_awal',
            'quantity',
            'bulan',
            //'price',

            'total'

            ],
            'showPageSummary' => true,
        ]); ?>
    <?= GridView::widget([
        'dataProvider' => $dataProvider,
        'filterModel' => $searchModel,
        'columns' => [
          ['class' => 'kartik\grid\SerialColumn'],

          //  'id',
            'rm_code',
            'rmCode.deskripsi_barang',

          //  'saldo_awal',
            'quantity',
            'bulan',
            [
                      'attribute' => 'price',
                      'label' => 'Price',
                      'footer' => $myAverage,
                    ],
            //'price',

            [
                        'label' => 'Total',
                        'attribute' => 'total',
                        'pageSummary' => true,
                      //  'pageSummaryOptions' => ['id_layanan' => 'deskripsi'],
                        'value' => function ($model) {
                        if($model)
                            return $model->total ;
                        else
                            return 0;
                        }
                    ],
            ['class' => 'kartik\grid\ActionColumn'],

        ],
         'showPageSummary' => true,
    ]); ?>
    <?php echo"Harga Rata-rata Barang adalah:";
    $myAverage = 0;
    $myTot  =0;
    $myCnt = 0;
    $data = $dataProvider->getModels();

    foreach ($data as $key => $value) {
        $myTot += $value['price'];
        $myCnt++;
    }
    if ($myCnt>0){
      $myAverage = $myTot/$myCnt;
    }
   echo $myAverage;  // your average displayed herre, you can place it wherever you want.
      ?>
    <?php
$this->registerJs("
// 1. Dapatkan handle dari tabel gridview
table = $('div.grid-view > table');

// 2. Hitung kolom tertentu, pada contoh ini menghitung nilai total pada kolom ke 3
var sum = 0;
table.find('tbody').find('tr').each(function() {
sum += parseInt($(this).find('td:nth-child(4)').text());
});

// 3. Tampilkan hasil perhitungan pada tabel baris terakhir kolom ke 3
table.find('tfoot > tr > td:nth-child(4)').text(sum);

");
?>
</div>

enter image description here enter image description here

最佳答案

问题 1:验证器

在您的 PenerimaanSearch 模型中删除 bulan 字段的整数验证器。并添加两个新的,如下:

public function rules() {
    //...
    [['bulan'], 'integer', 'when'=>function($model) {
        return strpos($model->bulan, '&') === false;
    }],
    [['bulan'], 'string', 'when'=>function($model) {
        return strpos($model->bulan, '&') !== false;
    }],
    //...
}

这只会在不存在 & 时将您的字段验证为整数。否则它将使用字符串验证器。最佳方法是使用 regex-v& onle,但我相信您会弄清楚如何做到这一点。

问题 2:搜索模型中的功能

再次在 BulanSearch 中,您可以找到 search() 方法,该方法负责按属性过滤结果。删除与 bulan 字段相关的所有操作,并改为使用以下内容:

public function search($params)
{
    //...
    if (!empty($this->bulan)) {
        if (strpos($this->bulan, '&') !== false) {
            $bulan = $this->bulan;
        } else {
            //filter with int
            $bulan = explode('&', $this->bulan);
        }
        $this->andFilterWhere(['bulan'=>$bulan]);
    }
    //...
}

这应该可以解决问题。 andFilterWhere 自行决定是使用 IN 条件(多个值)还是常规比较(单个值)。

这应该可以解决问题!但是,如果您有问题,请告诉我。我很乐意提供帮助!

关于javascript - 在 GridView 中双重搜索 yii2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40078084/

相关文章:

页面加载时 JavaScript 触发

java - 创建新的 int[] 数组或使用循环将每个索引设置为 0? java

javascript - React,在添加新项目时更新数组总计数状态

javascript - 如何在 Yii 中绑定(bind)到 AJAX 加载表单上的 beforeSubmit 事件?

php - Yii2 中的 model->attributes 总是有 NULL 值

javascript - 那么如何对来自 React Redux 的数组中所有对象中的所有值求和呢?

javascript - Jssor slider 停留在第一张图片上,直到我单击它

c++ - 使用 std::allocator 解除分配

php - Yii2 dosamigos Ckeditor 语言方向

Javascript 一个线性范围数组