Lara Admin: скрытие столбца в представлении списка / индекса модуля
Мне было интересно, если dwij/laraadmin
В пакете уже реализована функция скрытия столбца в списке модулей. Поскольку я не могу найти флажок или переключатель, чтобы скрыть / показать столбец модуля в настройках модуля.
Причина, по которой я этого хочу, заключается в том, что в столбце много текста, и он не очень хорошо просматривается в списке модулей.
2 ответа
Привет Родерик Растерхофф,
Существует очень простой способ скрыть большие поля данных со страницы списка модулей.
В каждом контроллере модуля есть открытая переменная "public $list_cols", в которой все имена столбцов перечислены через запятую. Вы просто удаляете все имена столбцов, которые не хотите показывать на странице списка.
Например: в моем случае public $ list_cols = ['id', 'title', 'short_intro', 'long_description']; и я не хочу показывать long_description, поэтому я удалил так же, как public $ list_cols = ['id', 'title', 'short_intro']; и работает отлично.
Я не совсем уверен, почему за мой вопрос проголосовали, так как я думал, что это довольно простая проблема (на которую можно даже ответить "да" или "нет"). Так что я подумал, что не нужно много объяснений. но тем не менее вот мой ответ:
В параметрах серверной части нет возможности скрыть определенный столбец из индексного представления модуля.
Если вы все еще хотите удалить столбец из индексного представления модуля, вам нужно будет сделать 2 вещи.
- сбросьте данные для столбца, который вы хотите удалить в методе динамического запроса ajax контроллера вашего модуля. (
dtajax()
) - удалить элемент заголовка таблицы HTML для столбца в
index.blade.php
вид редактируемого вами модуля
сброс данных: найдите метод dtajax() внутри контроллера вашего модуля, который обычно находится в:app/Http/Controllers/LA/ModuleNameController.php
который выглядит так:
public function dtajax()
{
$values = DB::table('moduleName')->select($this->listing_cols)->whereNull('deleted_at');
$out = Datatables::of($values)->make();
$data = $out->getData();
$fields_popup = ModuleFields::getModuleFields('moduleName');
for($i=0; $i < count($data->data); $i++) {
for ($j=0; $j < count($this->listing_cols); $j++) {
$col = $this->listing_cols[$j];
if($fields_popup[$col] != null && starts_with($fields_popup[$col]->popup_vals, "@")) {
$data->data[$i][$j] = ModuleFields::getFieldValue($fields_popup[$col], $data->data[$i][$j]);
}
if($col == $this->view_col) {
$data->data[$i][$j] = '<a href="' . url(config('laraadmin.adminRoute') . '/moduleName/' . $data->data[$i][0]) . '">' . $data->data[$i][$j] . '</a>';
}
//********************
// Remove description data values
if ($col == "description") {
unset($data->data[$i][$j]);
$data->data[$i] = array_values($data->data[$i]);
}
//
//********************
}
...
}
...
}
Здесь я выбираю для удаления значения описания. Я добавил это во вложенный цикл:
//********************
// Remove description data values
if ($col == "description") {
unset($data->data[$i][$j]);
$data->data[$i] = array_values($data->data[$i]);
}
//
//********************
удаление головок таблиц: головки таблиц можно найти внутри файла индексного блейда модуля, обычно расположенного в: resources/views/la/modulename/index.blade.php
найти цикл foreach, который перебирает $listing_cols as $col
<tr class="success">
@foreach( $listing_cols as $col )
<th>{{ $module->fields[$col]['label'] or ucfirst($col) }}</th>
@endforeach
@if($show_actions)
<th>Actions</th>
@endif
</tr>
Окружите заголовок таблицы оператором if, который проверяет, $col != 'columnName'
, Итак, в моем случае:
<tr class="success">
@foreach( $listing_cols as $col )
@if($col != 'description')
<th>{{ $module->fields[$col]['label'] or ucfirst($col) }}</th>
@endif
@endforeach
@if($show_actions)
<th>Actions</th>
@endif
</tr>
после редактирования контроллера модуля и просмотра, список модуля из этого превратится в этот.
Как видите, это освобождает много места.