# 列表行為
### [](https://octobercms.com/docs/backend/lists#extend-list-behavior)擴展列表行為
有時您可能希望修改默認列表行為,并且有幾種方法可以執行此操作。
* [覆蓋控制器動作](https://octobercms.com/docs/backend/lists#overriding-action)
* [覆蓋視圖](https://octobercms.com/docs/backend/lists#overriding-views)
* [擴展列定義](https://octobercms.com/docs/backend/lists#extend-list-columns)
* [注入CSS行類](https://octobercms.com/docs/backend/lists#inject-row-class)
* [擴展過濾范圍](https://octobercms.com/docs/backend/lists#extend-filter-scopes)
* [擴展模型查詢](https://octobercms.com/docs/backend/lists#extend-model-query)
* [自定義列類型](https://octobercms.com/docs/backend/lists#custom-column-types)
### [](https://octobercms.com/docs/backend/lists#overriding-action)覆蓋控制器動作
您可以`index`對控制器中的action方法使用自己的邏輯,然后有選擇地調用List behavior`index`父方法。
~~~
public function index()
{
//
// Do any custom code here
//
// Call the ListController behavior index() method
$this->asExtension('ListController')->index();
}
~~~
### [](https://octobercms.com/docs/backend/lists#overriding-views)覆蓋視圖
該`ListController`行為具有一個主容器視圖,您可以通過`_list_container.htm`在控制器目錄中創建一個特殊文件來覆蓋它。以下示例將向邊欄添加一個邊欄:
~~~
<?php if ($toolbar): ?>
<?= $toolbar->render() ?>
<?php endif ?>
<?php if ($filter): ?>
<?= $filter->render() ?>
<?php endif ?>
<div class="row row-flush">
<div class="col-sm-3">
[Insert sidebar here]
</div>
<div class="col-sm-9 list-with-sidebar">
<?= $list->render() ?>
</div>
</div>
~~~
該行為將調用一個`Lists`小部件,該小部件還包含許多您可以覆蓋的視圖。通過指定[列表配置選項](https://octobercms.com/docs/backend/lists#configuring-list)`customViewPath`中所述的選項,可以實現此目的。小部件將首先在此路徑中查找視圖,然后退回到默認位置。[](https://octobercms.com/docs/backend/lists#configuring-list)
~~~
# Custom view path
customViewPath: $/acme/blog/controllers/reviews/list
~~~
> **注意**:例如`list`,最好使用子目錄以避免沖突。
例如,要修改列表主體行標記,請`list/_list_body_row.htm`在控制器目錄中創建一個名為的文件。
~~~
<tr>
<?php foreach ($columns as $key => $column): ?>
<td><?= $this->getColumnValue($record, $column) ?></td>
<?php endforeach ?>
</tr>
~~~
### [](https://octobercms.com/docs/backend/lists#extend-list-columns)擴展列定義
您可以通過`extendListColumns`在控制器類上調用static方法從外部擴展另一個控制器的列。此方法可以接受兩個參數,**$ list**將代表Lists小部件對象,而**$ model則**代表列表使用的模型。以這個控制器為例:
~~~
class Categories extends \Backend\Classes\Controller
{
public $implement = ['Backend.Behaviors.ListController'];
public $listConfig = 'list_config.yaml';
}
~~~
使用該`extendListColumns`方法,可以將多余的列添加到此控制器呈現的任何列表中。檢查**$ model**的類型正確是一個好主意。這是一個例子:
~~~
Categories::extendListColumns(function($list, $model)
{
if (!$model instanceof MyModel) {
return;
}
$list->addColumns([
'my_column' => [
'label' => 'My Column'
]
]);
});
~~~
您還可以通過覆蓋`listExtendColumns`控制器類內部的方法在內部擴展列表列。
~~~
class Categories extends \Backend\Classes\Controller
{
[...]
public function listExtendColumns($list)
{
$list->addColumns([...]);
}
}
~~~
$ list對象上可以使用以下方法。
| 方法 | 描述 |
| --- | --- |
| **addColumns** | 將新列添加到列表 |
| **removeColumn** | 從列表中刪除一列 |
每種方法都采用類似于[列表列配置](https://octobercms.com/docs/backend/lists#list-columns)的列數組。
### [](https://octobercms.com/docs/backend/lists#inject-row-class)注入CSS行類
您可以通過`listInjectRowClass`在控制器類上添加方法來注入自定義css行類。此方法可以使用兩個參數,**$ record**將代表單個模型記錄,而**$ definition**包含List小部件定義的名稱。您可以返回任何包含行類的字符串值。這些類將添加到行的HTML標記中。
~~~
class Lessons extends \Backend\Classes\Controller
{
[...]
public function listInjectRowClass($lesson, $definition)
{
// Strike through past lessons
if ($lesson->lesson_date->lt(Carbon::today())) {
return 'strike';
}
}
}
~~~
`nolink`即使為List小部件定義了`recordUrl`or`recordOnClick`選項,也可以使用特殊的CSS類來強制行不可單擊。在事件中返回此類將使您使記錄不可單擊-例如,對于軟刪除的行或信息行:
~~~
public function listInjectRowClass($record, $value)
{
if ($record->trashed()) {
return 'nolink';
}
}
~~~
### [](https://octobercms.com/docs/backend/lists#extend-filter-scopes)擴展過濾范圍
您可以通過`extendListFilterScopes`在控制器類上調用static方法從外部擴展另一個控制器的過濾范圍。此方法可以使用參數**$ filter**,它將表示Filter小部件對象。以這個控制器為例:
~~~
Categories::extendListFilterScopes(function($filter) {
// Add custom CSS classes to the Filter widget itself
$filter->cssClasses = array_merge($filter->cssClasses, ['my', 'array', 'of', 'classes']);
$filter->addScopes([
'my_scope' => [
'label' => 'My Filter Scope'
]
]);
});
~~~
> 提供的范圍數組類似于[列表過濾器配置](https://octobercms.com/docs/backend/lists#list-filters)。
您還可以在內部將過濾器作用域擴展到控制器類,只需覆蓋該`listFilterExtendScopes`方法即可。
~~~
class Categories extends \Backend\Classes\Controller
{
[...]
public function listFilterExtendScopes($filter)
{
$filter->addScopes([...]);
}
}
~~~
在$ filter對象上可以使用以下方法。
| 方法 | 描述 |
| --- | --- |
| **addScopes** | 向過濾器小部件添加新范圍 |
| **removeScope** | 從過濾器小部件中刪除范圍 |
### [](https://octobercms.com/docs/backend/lists#extend-model-query)擴展模型查詢
可以通過覆蓋控制器類內部的方法來擴展對列表[數據庫模型](https://octobercms.com/docs/database/model)的查找查詢`listExtendQuery`。通過將**withTrashed**范圍應用于查詢,此示例將確保軟刪除的記錄包括在列表數據中:
~~~
public function listExtendQuery($query)
{
$query->withTrashed();
}
~~~
該[列表篩選](https://octobercms.com/docs/backend/lists#list-filters)模型的查詢,也可以通過重寫擴展`listFilterExtendQuery`方法:
~~~
public function listFilterExtendQuery($query, $scope)
{
if ($scope->scopeName == 'status') {
$query->where('status', '<>', 'all');
}
}
~~~
### [](https://octobercms.com/docs/backend/lists#extend-records-collection)擴展記錄收集
通過覆蓋`listExtendRecords`控制器類內部的方法,可以擴展列表使用的記錄的集合。本示例使用[記錄集合](https://octobercms.com/docs/database/collection)`sort`上的方法來更改[記錄](https://octobercms.com/docs/database/collection)的排序順序。
~~~
public function listExtendRecords($records)
{
return $records->sort(function ($a, $b) {
return $a->computedVal() > $b->computedVal();
});
}
~~~
### [](https://octobercms.com/docs/backend/lists#custom-column-types)自定義列類型
可以使用[Plugin注冊類](https://octobercms.com/docs/plugin/registration#registration-methods)的`registerListColumnTypes`方法在后端注冊自定義列表列類型。該方法應返回一個數組,其中鍵是類型名稱,值是可調用函數。可調用函數接收三個參數,本機,定義對象和模型對象。[](https://octobercms.com/docs/plugin/registration#registration-methods)`$value``$column``$record`
~~~
public function registerListColumnTypes()
{
return [
// A local method, i.e $this->evalUppercaseListColumn()
'uppercase' => [$this, 'evalUppercaseListColumn'],
// Using an inline closure
'loveit' => function($value) { return 'I love '. $value; }
];
}
public function evalUppercaseListColumn($value, $column, $record)
{
return strtoupper($value);
}
~~~
使用自定義列表列類型就像使用`type`選項按名稱調用一樣簡單。
~~~
# ===================================
# List Column Definitions
# ===================================
columns:
secret_code:
label: Secret code
type: uppercase
~~~
- 基本說明
- 基本操作
- October cms 安裝
- 后臺控制器路徑
- 圖標
- 獲取安裝網上的插件/主題
- 插件構造器使用
- 定時任務
- October后臺控制器
- vscode編輯器
- ajax操作
- 使用
- ajax更新組件
- ajax屬性API
- JavaScript API
- ajax綜合使用
- 主題
- 多語言主題
- 安裝市場主題
- 主題程序處理
- 主題
- 頁面
- 部件
- 布局
- 內容
- 組件
- 媒體
- 主題表單操作
- 表單使用
- 表單后端程序處理
- 插件
- 自定義插件
- 插件說明
- 插件導航條
- 插件數據庫設置
- 插件的設置管理
- 插件的配置文件config
- 組件
- app服務
- app容器
- 擴展行為
- 緩存
- Collection類
- Lazy Collections
- Collection方法
- 助手函數
- 數組助手函數
- 路徑助手函數
- 玄樂助手函數
- 其他助手函數
- 錯誤與記錄
- 事件處理
- HTML頁面
- 文件與目錄操作
- 散列和加密
- 郵件
- 郵件內容
- 郵件發送
- 分頁
- 模板解析器
- 動態解析器語法
- 隊列消息
- 請求與輸入
- 響應
- 視圖
- 路由器
- 配置
- 驗證操作
- 處理錯誤消息
- 錯誤消息與視圖
- 可用的驗證規則
- 有條件的驗證規則
- 驗證數組
- 錯誤消息
- 自定義驗證規則
- 模型操作
- 定義模型與其屬性
- 檢索模型
- 插入與更新
- 刪除模型
- 查詢范圍
- 事件操作
- 關聯操作
- 定義關系
- 關系類型
- 多肽關系
- 關系查詢
- 渴望加載
- 插入模型
- 數據庫操作
- 基本用法
- 數據表結構
- 查詢連貫操作
- 結果檢索
- select子句
- 插入更新
- where子句
- 排序,分組,限制和偏移
- 文件附件
- Collection操作
- 屬性操作
- 系列化json
- 數據庫屬性
- 數據庫行為
- 控制器
- 后臺控制器定義
- 后臺頁面
- 后臺組件
- 后臺表單
- 表單組件
- 表單視圖
- 表單行為
- 后臺列表
- 列表行為
- 列表過濾器
- 可用列類型
- 關系行為
- 關系行為類型
- 擴展關系行為
- 列表排序操作
- 導入導出操作
- 用于與權限
- corlate模板修改
- 修改頂部導航
- laravel問題
- 控制器不存在
- 控制器
- 路由組
- laravel筆記
- laravel 安裝
- 偽靜態配置
- 依賴注入 & 控制器
- 中間件
- 路由文件
- 視圖