如何在启用 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,在那里包含所有逻辑。
希望对您有所帮助!
我正在使用 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,在那里包含所有逻辑。
希望对您有所帮助!