#php #laravel #laravel-5 #voyager
#php #laravel #laravel-5 #voyager
Вопрос:
Я пытаюсь отобразить некоторые конкретные заголовки столбцов при просмотре, я настроил контроллер и модель, а также внес некоторые изменения index()
внутри моего настроенного контроллера.
public function index(Request $request)
{
// GET THE SLUG, ex. 'posts', 'pages', etc.
$slug = $this->getSlug($request);
// GET THE DataType based on the slug
$dataType = Voyager::model('DataType')->where('slug', '=', $slug)->first();
// Check permission
$this->authorize('browse', app($dataType->model_name));
$getter = $dataType->server_side ? 'paginate' : 'get';
$search = (object) ['value' => $request->get('s'), 'key' => $request->get('key'), 'filter' => $request->get('filter')];
$searchable = $dataType->server_side ? array_keys(SchemaManager::describeTable(app($dataType->model_name)->getTable())->toArray()) : '';
$orderBy = $request->get('order_by', $dataType->order_column);
$sortOrder = $request->get('sort_order', null);
$usesSoftDeletes = false;
$showSoftDeleted = false;
$orderColumn = [];
if ($orderBy) {
$index = $dataType->browseRows->where('field', $orderBy)->keys()->first() 1;
$orderColumn = [[$index, 'desc']];
if (!$sortOrder amp;amp; isset($dataType->order_direction)) {
$sortOrder = $dataType->order_direction;
$orderColumn = [[$index, $dataType->order_direction]];
} else {
$orderColumn = [[$index, 'desc']];
}
}
// Next Get or Paginate the actual content from the MODEL that corresponds to the slug DataType
if (strlen($dataType->model_name) != 0) {
$model = app($dataType->model_name);
if ($dataType->scope amp;amp; $dataType->scope != '' amp;amp; method_exists($model, 'scope' . ucfirst($dataType->scope))) {
$query = $model->{$dataType->scope}();
dd($query);
} else {
// $query = $model::select('*');
$query = $model::select('id', 'owner_name');
}
// Use withTrashed() if model uses SoftDeletes and if toggle is selected
if ($model amp;amp; in_array(SoftDeletes::class, class_uses($model)) amp;amp; app('VoyagerAuth')->user()->can('delete', app($dataType->model_name))) {
$usesSoftDeletes = true;
if ($request->get('showSoftDeleted')) {
$showSoftDeleted = true;
$query = $query->withTrashed();
}
}
// If a column has a relationship associated with it, we do not want to show that field
$this->removeRelationshipField($dataType, 'browse');
if ($search->value != '' amp;amp; $search->key amp;amp; $search->filter) {
$search_filter = ($search->filter == 'equals') ? '=' : 'LIKE';
$search_value = ($search->filter == 'equals') ? $search->value : '%' . $search->value . '%';
$query->where($search->key, $search_filter, $search_value);
}
if ($orderBy amp;amp; in_array($orderBy, $dataType->fields())) {
$querySortOrder = (!empty($sortOrder)) ? $sortOrder : 'desc';
$dataTypeContent = call_user_func([
$query->orderBy($orderBy, $querySortOrder),
$getter,
]);
} elseif ($model->timestamps) {
$dataTypeContent = call_user_func([$query->latest($model::CREATED_AT), $getter]);
} else {
$dataTypeContent = call_user_func([$query->orderBy($model->getKeyName(), 'DESC'), $getter]);
}
// Replace relationships' keys for labels and create READ links if a slug is provided.
$dataTypeContent = $this->resolveRelations($dataTypeContent, $dataType);
} else {
// If Model doesn't exist, get data from table name
$dataTypeContent = call_user_func([DB::table($dataType->name), $getter]);
$model = false;
}
// Check if BREAD is Translatable
if (($isModelTranslatable = is_bread_translatable($model))) {
$dataTypeContent->load('translations');
}
// Check if server side pagination is enabled
$isServerSide = isset($dataType->server_side) amp;amp; $dataType->server_side;
// Check if a default search key is set
$defaultSearchKey = $dataType->default_search_key ?? null;
$view = 'voyager::bread.browse';
if (view()->exists("voyager::$slug.browse")) {
$view = "voyager::$slug.browse";
}
return Voyager::view($view, compact(
// dd($dataType),
'dataType',
'dataTypeContent',
'isModelTranslatable',
'search',
'orderBy',
'orderColumn',
'sortOrder',
'searchable',
'isServerSide',
'defaultSearchKey',
'usesSoftDeletes',
'showSoftDeleted'
));
}
Я изменил запрос модели $query=$model::select('id','owner_name');
, который дает мне правильные данные с одним столбцом при просмотре, но все равно все заголовки столбцов отображаются при просмотре.
Ниже thead
приведен код просмотра.
<thead>
<tr>
@can('delete',app($dataType->model_name))
<th>
<input type="checkbox" class="select_all">
</th>
@endcan
@foreach($dataType->browseRows as $row)
<th>
@if ($isServerSide)
<a href="{{ $row->sortByUrl($orderBy, $sortOrder) }}">
@endif
{{ $row->display_name }}
@if ($isServerSide)
@if ($row->isCurrentSortField($orderBy))
@if ($sortOrder == 'asc')
<i class="voyager-angle-up pull-right"></i>
@else
<i class="voyager-angle-down pull-right"></i>
@endif
@endif
</a>
@endif
</th>
@endforeach
<th class="actions text-right">{{ __('voyager::generic.actions') }}</th>
</tr>
</thead>
Ответ №1:
Не уверен, что это может вам помочь или нет, но именно так я это делаю. Сначала вы должны создать базу данных с помощью пользовательского интерфейса Voyager, затем добавить bread. Этот метод вообще не участвует в кодировании. После создания базы данных и добавления bread перейдите в меню tools-> bread, чтобы просмотреть страницу. https://i.stack.imgur.com/bw4tD.png
После этого прокрутите вниз и найдите таблицу, содержащую такой столбец, и нажмите редактировать хлеб. https://i.stack.imgur.com/vAKz4.png
Затем прокрутите вниз, чтобы найти столбец, который вы хотите включить. Если вы хотите, чтобы столбец в данном экземпляре (ID) отображался в заголовке, установите флажок для просмотра в видимости. Если вы не хотите, просто снимите флажок. То же самое относится и к другим столбцам. После того, как вы закончите, прокрутите вниз до нижней части страницы и нажмите Отправить. С помощью этого вы сможете настроить заголовок таблицы. https://i.stack.imgur.com/S0XE5.png
https://voyager.devdojo.com/academy / Это учебное пособие от Voyager. В видео объясняется, как вы можете настроить заголовок таблицы почти в конце. Вы также можете проверить документацию, предоставленную Voyager, чтобы узнать больше. Вы также можете узнать, как создать базу данных и добавить bread в документации.