如何在启用 ajax table 时更改每个 crud 条目的颜色?

how to change the color of each crud entry when ajax table is enabled?

我正在使用 laravel 背包并且最近在我的 crud 中启用了 $this->crud->enableAjaxTable(); 因为有很多数据要显示。

但是现在我无法像以前那样通过覆盖 list.blade.php 来根据 expiry_date 为我的 crud 条目着色:

@if (!$crud->ajaxTable())
            @foreach ($entries as $k => $entry)

            <?php
            use Carbon\Carbon;
            $today_date = Carbon::now();


            $data_difference = $today_date->diffInDays(Carbon::parse($entry->expiry_date), false);
            if($data_difference <= 7 && $data_difference >= 0) {
              $color="#FF9900";  
            } elseif($data_difference < 0) {
              $color="#EA2C12";
            } elseif($data_difference > 7) {
              $color="#539E05";
            }
            ?>

            <tr data-entry-id="{{ $entry->getKey() }}" style="color: {{$color}}">

可能是因为这个:

@if (!$crud->ajaxTable())

我尝试使用此 link 自定义 AjaxTable.php 搜索查询,但没有成功。这是我通过覆盖 ajax:

的搜索查询在我的 ExampleCrudController 中尝试的代码
        public function search()
{
    $this->crud->hasAccessOrFail('list');

    // create an array with the names of the searchable columns
    $columns = collect($this->crud->columns)
                ->reject(function ($column, $key) {
                    // the select_multiple, model_function and model_function_attribute columns are not searchable
                    return isset($column['type']) && ($column['type'] == 'select_multiple' || $column['type'] == 'model_function' || $column['type'] == 'model_function_attribute');
                })
                ->pluck('name')
                // add the primary key, otherwise the buttons won't work
                ->merge($this->crud->model->getKeyName())
                ->toArray();

    // structure the response in a DataTable-friendly way
    $dataTable = new \LiveControl\EloquentDataTable\DataTable($this->crud->query, $columns);

    // make the datatable use the column types instead of just echoing the text
    $dataTable->setFormatRowFunction(function ($entry) {


        $today_date = Carbon::now();

        $data_difference = $today_date->diffInDays(Carbon::parse($entry->expiry_date), false);

            if($data_difference <= 7 && $data_difference >= 0) {
              $color="#FF9900";  
            } elseif($data_difference < 0) {
              $color="#EA2C12";
            } elseif($data_difference > 7) {
              $color="#539E05";
            }

        // get the actual HTML for each row's cell
        $row_items = $this->crud->getRowViews($entry, $this->crud, $color);

        // add the buttons as the last column
        if ($this->crud->buttons->where('stack', 'line')->count()) {
            $row_items[] = \View::make('crud::inc.button_stack', ['stack' => 'line'])
                            ->with('crud', $this->crud)
                            ->with('entry', $entry)
                            ->render();
        }

        // add the details_row buttons as the first column
        if ($this->crud->details_row) {
            array_unshift($row_items, \View::make('crud::columns.details_row_button')
                            ->with('crud', $this->crud)
                            ->with('entry', $entry)
                            ->render());
        }

        return $row_items;
    });

    return $dataTable->make();
}

所以我的问题是,当 laravel 背包中启用 ajaxtable 时,如何根据 expiry_date 为我的 crud 条目着色?

使用 AjaxDataTables 时,行不再直接从数据库中获取并输出为 HTML,而是通过调用 AJAX 从数据库中获取。恐怕你以前的代码不起作用。

我能想到的实现相同目标的最佳方法是 use a custom view 用于此 CRUD 面板,其中 $this->crud->setListView('your-view');。这将允许您在该文件中设置一些自定义 JavaScript,修改 DataTables.js 以在将它们放入 table.

之前为行着色

如果您使用的是 Backpack\CRUD 3.2+,一个更简洁的替代方案是 customize the list.js file,在那里包含所有逻辑。

希望对您有所帮助!