【问题标题】:Voyager - Specific Columns to be displayed on browseVoyager - 浏览时显示的特定列
【发布时间】:2019-09-05 02:38:35
【问题描述】:

我正在尝试在浏览时显示一些特定的列标题,我已经自定义了控制器和模型,并且还在我的自定义控制器中对 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 && 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 && $dataType->scope != '' && 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 && in_array(SoftDeletes::class, class_uses($model)) && 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 != '' && $search->key && $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 && 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) && $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>

【问题讨论】:

    标签: php laravel laravel-5 voyager


    【解决方案1】:

    不确定这是否对您有帮助,但我就是这样做的。首先,您必须使用 Voyager UI 创建一个数据库,然后添加面包。这种方法根本不涉及编码。创建数据库并添加面包后,前往工具->面包查看页面。 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 提供的文档以了解更多信息。您还可以在文档中了解如何创建数据库和添加面包。

    【讨论】:

      猜你喜欢
      • 2010-10-18
      • 1970-01-01
      • 2017-03-27
      • 1970-01-01
      • 2013-02-26
      • 2019-04-16
      • 2013-05-27
      • 1970-01-01
      相关资源
      最近更新 更多