0

我想知道dwij/laraadmin包是否已经实现了隐藏模块列表中的列的功能。因为我找不到复选框或切换器来隐藏/显示模块设置中的模块列。

我想要这个的原因是因为一列中有很多文本,并且在模块列表中不能很好地查看。

4

2 回答 2

0

我不太清楚为什么我的问题被否决了,因为我认为这是一个非常简单的问题(甚至可以用是或否来回答)。所以我认为它不需要太多解释。但尽管如此,这是我的答案:

后端选项中没有选项可以从模块的索引视图中隐藏特定列

如果您仍想从模块的索引视图中删除一列,您需要做两件事。

  • 在模块控制器的动态 ajax 请求方法中取消设置要删除的列的数据。( dtajax())
  • index.blade.php在您正在编辑的模块的视图中删除列的 html 表头元素

取消设置数据: 在模块控制器中找到 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]);
            }
            //
            //********************
        }
        ...
    }
    ...
}

在这里,我选择删除描述值。我已将此添加到嵌套的 for 循环中:

//********************
// 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 的 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>

编辑模块的控制器和视图后,模块的列表将从this变成this

如您所见,它释放了很多空间。

于 2017-11-11T22:52:42.840 回答
0

嗨罗德里克·拉斯特霍夫,

有一种非常简单的方法可以从模块列表页面中隐藏大数据字段。

在每个模块控制器中都有一个公共变量“public $listing_cols”,其中所有列名以逗号分隔,您只需删除所有不想在列表页面中显示的列名。

例如:在我的情况下 public $listing_cols = ['id', 'title', 'short_intro', 'long_description']; 而且我不想显示 long_description 所以我删除了就像 public $listing_cols = ['id', 'title', 'short_intro']; 并且它工作得很好。

于 2018-01-24T14:43:43.593 回答