扩展后端列表对象
Extending backend lists object
如何扩展后端显示的列表项?
我正在尝试使用这个功能:
listExtendRecords($records)
问题是我需要重新创建相同的对象 $records,但我想向其中添加自定义数据。例如我的记录是来自 JK Shop 插件的订单。我需要的是从这些订单中取出所有产品,并将每个产品作为不同的列表项。
我可以在这个函数中做这些改变,只是 return $records,但是我怎么能在这里创建一个新的项目对象呢?我尝试使用:
$new = new Production();
return $new;
但我明白了:
Call to undefined method October\Rain\Database\QueryBuilder::currentPage()
我怎样才能创建一个可以 return 编辑到后端列表的新工作对象?
嗯,根据你的问题,你想展示related items
(订单产品)under the
订单记录,
it seems its not possible using extension or may be it become more hard/complex if we use that thing
我们可以使用 small trick
我们将 override partial
用于 list
该特定列表,为此我们可以使用其 config_list.yaml
使用 order
列表配置添加此附加选项
....
toolbar:
buttons: list_toolbar
search:
prompt: 'backend::lang.list.search_prompt'
recordUrl: 'hardiksatasiya/demotest/demo/update/:id'
// add customViewPath
customViewPath: $/hardiksatasiya/demotest/controllers/demo/list_override
现在我们覆盖 2 个部分(我从 modules\backend\widgets\lists\partials
复制了它们)
_list_body_rows.htm
_list_body_row.htm
我修改那里的内容
_list_body_rows.htm
<?php foreach ($records as $record): ?>
<?= $this->makePartial('list_body_row', [
'record' => $record,
'treeLevel' => $treeLevel,
'custom' => isset($custom) ? true : false])
?>
<?php endforeach ?>
_list_body_row.htm
<?php
$expanded = $showTree ? $this->isTreeNodeExpanded($record) : null;
$childRecords = $showTree ? $record->getChildren() : null;
$treeLevelClass = $showTree ? 'list-tree-level-'.$treeLevel : '';
?>
<tr class="<?= $treeLevelClass ?> <?= $this->getRowClass($record) ?>">
<!-- we are using that custom variable here we dont want to show check box for our products-->
<?php if ($showCheckboxes && $custom == false): ?>
<?= $this->makePartial('list_body_checkbox', ['record' => $record]) ?>
<?php endif ?>
<?php if ($showTree): ?>
<?= $this->makePartial('list_body_tree', [
'record' => $record,
'expanded' => $expanded,
'childCount' => $record->getChildCount()
]) ?>
<?php endif ?>
<!-- we are using that custom variable here
and make our row seperatly as we need
for all item/product record this partial executed so
we code it for single row it will be repeated through all product items automatically-->
<?php if($custom): ?>
<td> <!-- checkbox column we make it blank--> </td>
<!--
colspan based on requirement
you can fully customize your td tags from here
-->
<td colspan="<?= count($columns) ?>"> <a href="/backend/products/edit/<?= $record->id ?>"> <?= $record->name ?> </a></td>
<?php else: ?>
<?php $index = $url = 0; foreach ($columns as $key => $column): ?>
<?php $index++; ?>
<td class="list-cell-index-<?= $index ?> list-cell-name-<?= $column->getName() ?> list-cell-type-<?= $column->type ?> <?= $column->clickable ? '' : 'nolink' ?> <?= $column->cssClass ?>">
<?php if ($column->clickable && !$url && ($url = $this->getRecordUrl($record))): ?>
<a <?= $this->getRecordOnClick($record) ?> href="<?= $url ?>">
<?= $this->getColumnValue($record, $column) ?>
</a>
<?php else: ?>
<?= $this->getColumnValue($record, $column) ?>
<?php endif ?>
</td>
<?php endforeach ?>
<?php endif; ?>
<?php if ($showSetup): ?>
<td class="list-setup"> </td>
<?php endif ?>
</tr>
<?php if ($showTree && $expanded): ?>
<?= $this->makePartial('list_body_rows', ['records' => $childRecords, 'treeLevel' => $treeLevel+1]) ?>
<?php endif ?>
<!-- you can customise this condition basde on your order have items or not
i used simple relation condition here -->
<?php if ($record->relation): ?>
<?php $childRecords = is_array($record->relation) ? $record->relation : [$record->relation]; ?>
<?php
// currently as $childRecords i used relation but you can create your own model array
// and pass here it will be received in next iteration
// notice we are passing $custom variable and we also override
// _list_body_rows.htm and it will loop through all records and pass
// $custom variable and it will be true based on its existance
// if we pass custom variable it will pass it also with true other wise
// it will pass it false
?>
<?= $this->makePartial('list_body_rows', ['records' => $childRecords, 'treeLevel' => $treeLevel+1, 'custom' => true]) ?>
<?php endif ?>
it will give you output like this
我也有added comments
在new paritals
如何使用它们如果你需要更多信息请评论。
如何扩展后端显示的列表项?
我正在尝试使用这个功能:
listExtendRecords($records)
问题是我需要重新创建相同的对象 $records,但我想向其中添加自定义数据。例如我的记录是来自 JK Shop 插件的订单。我需要的是从这些订单中取出所有产品,并将每个产品作为不同的列表项。
我可以在这个函数中做这些改变,只是 return $records,但是我怎么能在这里创建一个新的项目对象呢?我尝试使用:
$new = new Production();
return $new;
但我明白了:
Call to undefined method October\Rain\Database\QueryBuilder::currentPage()
我怎样才能创建一个可以 return 编辑到后端列表的新工作对象?
嗯,根据你的问题,你想展示related items
(订单产品)under the
订单记录,
it seems its not possible using extension or may be it become more hard/complex if we use that thing
我们可以使用 small trick
我们将 override partial
用于 list
该特定列表,为此我们可以使用其 config_list.yaml
使用 order
列表配置添加此附加选项
....
toolbar:
buttons: list_toolbar
search:
prompt: 'backend::lang.list.search_prompt'
recordUrl: 'hardiksatasiya/demotest/demo/update/:id'
// add customViewPath
customViewPath: $/hardiksatasiya/demotest/controllers/demo/list_override
现在我们覆盖 2 个部分(我从 modules\backend\widgets\lists\partials
复制了它们)
_list_body_rows.htm
_list_body_row.htm
我修改那里的内容
_list_body_rows.htm
<?php foreach ($records as $record): ?>
<?= $this->makePartial('list_body_row', [
'record' => $record,
'treeLevel' => $treeLevel,
'custom' => isset($custom) ? true : false])
?>
<?php endforeach ?>
_list_body_row.htm
<?php
$expanded = $showTree ? $this->isTreeNodeExpanded($record) : null;
$childRecords = $showTree ? $record->getChildren() : null;
$treeLevelClass = $showTree ? 'list-tree-level-'.$treeLevel : '';
?>
<tr class="<?= $treeLevelClass ?> <?= $this->getRowClass($record) ?>">
<!-- we are using that custom variable here we dont want to show check box for our products-->
<?php if ($showCheckboxes && $custom == false): ?>
<?= $this->makePartial('list_body_checkbox', ['record' => $record]) ?>
<?php endif ?>
<?php if ($showTree): ?>
<?= $this->makePartial('list_body_tree', [
'record' => $record,
'expanded' => $expanded,
'childCount' => $record->getChildCount()
]) ?>
<?php endif ?>
<!-- we are using that custom variable here
and make our row seperatly as we need
for all item/product record this partial executed so
we code it for single row it will be repeated through all product items automatically-->
<?php if($custom): ?>
<td> <!-- checkbox column we make it blank--> </td>
<!--
colspan based on requirement
you can fully customize your td tags from here
-->
<td colspan="<?= count($columns) ?>"> <a href="/backend/products/edit/<?= $record->id ?>"> <?= $record->name ?> </a></td>
<?php else: ?>
<?php $index = $url = 0; foreach ($columns as $key => $column): ?>
<?php $index++; ?>
<td class="list-cell-index-<?= $index ?> list-cell-name-<?= $column->getName() ?> list-cell-type-<?= $column->type ?> <?= $column->clickable ? '' : 'nolink' ?> <?= $column->cssClass ?>">
<?php if ($column->clickable && !$url && ($url = $this->getRecordUrl($record))): ?>
<a <?= $this->getRecordOnClick($record) ?> href="<?= $url ?>">
<?= $this->getColumnValue($record, $column) ?>
</a>
<?php else: ?>
<?= $this->getColumnValue($record, $column) ?>
<?php endif ?>
</td>
<?php endforeach ?>
<?php endif; ?>
<?php if ($showSetup): ?>
<td class="list-setup"> </td>
<?php endif ?>
</tr>
<?php if ($showTree && $expanded): ?>
<?= $this->makePartial('list_body_rows', ['records' => $childRecords, 'treeLevel' => $treeLevel+1]) ?>
<?php endif ?>
<!-- you can customise this condition basde on your order have items or not
i used simple relation condition here -->
<?php if ($record->relation): ?>
<?php $childRecords = is_array($record->relation) ? $record->relation : [$record->relation]; ?>
<?php
// currently as $childRecords i used relation but you can create your own model array
// and pass here it will be received in next iteration
// notice we are passing $custom variable and we also override
// _list_body_rows.htm and it will loop through all records and pass
// $custom variable and it will be true based on its existance
// if we pass custom variable it will pass it also with true other wise
// it will pass it false
?>
<?= $this->makePartial('list_body_rows', ['records' => $childRecords, 'treeLevel' => $treeLevel+1, 'custom' => true]) ?>
<?php endif ?>
it will give you output like this
我也有added comments
在new paritals
如何使用它们如果你需要更多信息请评论。