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>

после редактирования контроллера модуля и просмотра, список модуля из этого превратится в этот.

Как видите, это освобождает много места.

Другие вопросы по тегам