List
This guide explains how to generate a page with a list of information. List with standard filters and pagination.
Basic list
Generate a simple list with standard filters.
For example, we have state and county tables in our database.
- JSON
- PHP
{
"action": "state",
"column": {
"id": "id",
"title": "text",
"country-title": "join",
"status": "status"
},
"title": {
"country-title": "Country Name"
}
}
public function state(): string
{
$conf['action'] = 'state';
$conf['column'] = [
'id' => 'id',
'title' => 'text',
'country-title' => 'join',
'status' => 'status',
];
$conf['title'] = [
'country-title' => $this->app->language('country_name')
];
return $this->addons->direction->listing($conf);
}

Advanced list
Without filters
Generate a simple list without filters.
- JSON
- PHP
{
"action": "state",
"column": {
"id": "id",
"title": "text",
"country-title": "join",
"status": "status"
},
"title": {
"country-title": "Country Name"
},
'quick_filter' => false
}
public function state(): string
{
$conf['action'] = 'state';
$conf['column'] = [
'id' => 'id',
'title' => 'text',
'country-title' => 'join',
'status' => 'status',
];
$conf['title'] = [
'country-title' => $this->app->language('country_name')
];
$conf['quick_filter'] = false;
return $this->addons->direction->listing($conf);
}
Default status
Description:
Sets the default filtering behavior for the status field when no specific filter is applied.
- If set to
true, only records withstatus > 0are shown (e.g., "Active"). - If set to a
stringvalue (e.g.,'1','active'), only records matching that exact status will be shown by default.
- JSON
- PHP
{
"default_status": true
}
// or
{
"default_status": "1"
}
$params['default_status'] = true;
// or
$params['default_status'] = '1';
Default filtered
Generate a simple list with already filtered result.
For example, we can generate a filtered result of a list where country_id = 17 and status is active: status = 1
- JSON
- PHP
{
"action": "state",
"column": {
"id": "id",
"title": "text",
"country-title": "join",
"status": "status"
},
"title": {
"country-title": "Country Name"
},
"filtered": {
"country_id": "2",
"status": "1"
}
}
public function state(): string
{
$conf['action'] = 'state';
$conf['column'] = [
'id' => 'id',
'title' => 'text',
'country-title' => 'join',
'status' => 'status',
];
$conf['title'] = [
'country-title' => $this->app->language('country_name')
];
$conf['filtered'] = [
'country_id' => '17',
'status' => '1'
];
return $this->addons->direction->listing($conf);
}

Short title
Description: Optional short labels shown on cards or in compact table views. Key corresponds to column name. When you use shor_title show with tooltips.
- JSON
- PHP
{
"action": "state",
"column": {
"id": "id",
"title": "text",
"country-title": "join",
"status": "status"
},
"short_title": {
"country-title": "Cnt"
}
"title": {
"country-title": "Country Name"
}
}
public function state(): string
{
$conf['action'] = 'state';
$conf['column'] = [
'id' => 'id',
'title' => 'text',
'country-title' => 'join',
'status' => 'status',
];
$conf['short_title'] = [
'country-title' => $this->app->language('short_country_name') // Cnt
];
$conf['title'] = [
'country-title' => $this->app->language('country_name') // Country name
];
return $this->addons->direction->listing($conf);
}
List button
List buttons: Controls the visibility of action buttons on each row in the list view. Available options:
'edit'– Show or hide the edit button.'copy'– Show or hide the duplicate/copy button.'details'– Show or hide the view/details button.'delete'– Show or hide the delete button.
You can navigate to the pages from the list by clicking this icon.

To use the delete function, the user must not only have permission to delete the data, but also have root permission.
You can custom any HTML
Available options:
'before'– Show HTML before list buttons'before_button'– Show HTML after<div class="tc">before list buttons'after'– Show HTML after list buttons'after_button'– Show HTML before</div>after list buttons
Custom condition:
You can use any condition $conf['list_button']['edit_condition'] = '<any_condition_using_in_if>';
For example, I want to not show the edit button where id is 11
$conf['list_button'] = ['edit' => true, 'details' => true];
$conf['list_button']['edit_condition'] = '$row["id"] != 11';
$conf['list_button']['details_condition'] = '$row["registration_date"] < "2025-06-01"';
- JSON
- PHP
{
"list_button": {
"edit": true,
"copy": false,
"details": true,
"delete": true
}
}
$conf['list_button'] = [
'edit' => true,
'copy' => false,
'details' => true,
'delete' => true
];
Excel
$conf['export_excel'] = [];

You can choose custom columns, for example:
$conf['export_excel'] =
[
'id' => 'id',
'organization_legal_form-title' => 'join',
'legal_address' => 'text',
'state-country-title' => 'join'
];
Export excel as default connected to AVRO EXCEL MICROSERVICE "It can handle huge volumes. And it's work fast."
Options
- Bulk actions
- Custom link inks on list elements
- Custom top button
- Custom list button
Advanced filter
Advanced filter with all parameters Custom data in list
This is an example of an advanced filter and custom data merged with database data: 'advanced_filter' and '<my_key>' => 'list|id'
- JSON
- PHP
{
"action":"cases",
"column":{
"id":"id",
"code":"text",
"title":"text",
"start_date":"date",
"end_date":"date",
"first__category-object-title":"join",
"status":"custom| `cases_status`"
},
"list":{
"category":{
"11":"A","12":"B","13":"C"
},
"field_of_work":{
"11":"Energetic","12":"Finance","13":"Education"
},
"subfield_of_work":{
"11": "Site selection, construction, operation, and decommissioning of facilities important from the perspective of nuclear energy safety",
"12": "Site selection, construction, operation, and decommissioning of facilities important from the perspective of nuclear energy safety",
"13": "Site selection, construction, operation, and decommissioning of facilities important from the perspective of nuclear energy safety"
},
"join_html":{
"company-title":"text",
"company-firstname":"text",
"company-lastname":"text",
"company-tin":"text",
"company-passport":"text",
"company-psn":"text"
},
"quick_filter":false,
"advanced_filter":{
"id":"id",
"code":"text",
"title":"text",
"start_date":"date",
"end_date":"date",
"first__category-object-title":"join",
"region-title":"join",
"marz-title":"join",
"address":"text",
"category":"list|id",
"field_of_work":"list|id",
"subfield_of_work":"list|id",
"company-title":"join",
"company-firstname":"join",
"company-lastname":"join",
"company-tin":"join",
"company-passport":"join",
"company-psn":"join",
"x_axis":"text",
"y_axis":"text",
"x_axis_arm":"text",
"y_axis_arm":"text",
"cases_unit_1":"number_range",
"cases_unit_2":"number_range",
"cases_unit_3":"number_range",
"status":"custom| `cases_status`"
},
"advanced_filter_view":{
"id":{"group":1,"element":1},
"title":{"group":1,"element":2},
"start_date":{"group":1,"element":3},
"end_date":{"group":1,"element":4},
"code":{"group":1,"element":5},
"term_of_case":{"group":1,"element":6},
"first__category-object-title":{"group":1,"element":7},
"status":{"group":1,"element":8},
"region-title":{"group":2,"element":1},
"marz-title":{"group":2,"element":2},
"address":{"group":2,"element":3},
"category":{"group":2,"element":4},
"field_of_work":{"group":2,"element":5},
"subfield_of_work":{"group":2,"element":6},
"company-title":{"group":3,"element":1},
"company-firstname":{"group":3,"element":2},
"company-lastname":{"group":3,"element":3},
"company-tin":{"group":3,"element":4},
"company-passport":{"group":3,"element":5},
"company-psn":{"group":3,"element":6},
"x_axis":{"group":4,"element":2},
"y_axis":{"group":4,"element":3},
"x_axis_arm":{"group":4,"element":4},
"y_axis_arm":{"group":4,"element":5},
"cases_unit_1":{"group":5,"element":1},
"cases_unit_2":{"group":6,"element":1},
"cases_unit_3":{"group":7,"element":1}},
"title":{
"code":"Code",
"start_date":"Start",
"end_date":"End",
"first__category-object-title":"Object title",
"region-title":"Region",
"marz-title":"Marz",
"category":"Category",
"field_of_work":"Case group",
"subfield_of_work":"Case subgroup",
"status":"Case status",
"address":"Address",
"company-title":"Company title",
"company-firstname":"Firstname",
"company-lastname":"Lastname",
"company-tin":"TIN",
"company-passport":"Passport",
"company-psn":"SSN",
"x_axis":"X axis ISO",
"y_axis":"Y axis ISO",
"x_axis_arm":"X axis local",
"y_axis_arm":"Y axis local"
},
"custom_status":"cases_status",
"status":{
"-100":"Deleted",
"-2":"Draft",
"-1":"Պասիվ",
"1":"In progress - waiting",
"2":"In progress - rejected",
"3":"In progress - changed",
"100":"Finished"
},
"status_style":{
"-100":"passive-item",
"-2":"passive-item",
"-1":"passive-item",
"1":"mai-item",
"2":"mai-item",
"3":"ot-item",
"100":"active-item"
},
"default_status":true,
"list_button":{
"details":{
"action":"cases_details"
}
}
},
"removing_the_cast_case":"true"
}
$category_1_level = [...]; //Custom array
$category_2_level = [...]; //Custom array
$category_3_level = [...]; //Custom array
$conf['column'] = [
'id' => 'id',
'code' => 'text',
'title' => 'text',
'start_date' => 'date',
'end_date' => 'date',
'first__category-object-title' => 'join',
'status' => 'custom| ' . QD . 'cases_status' . QD
];
$conf['list']['category'] = $category_1_level;
$conf['list']['field_of_work'] = $category_2_level;
$conf['list']['subfield_of_work'] = $category_3_level;
$conf['join_html']['company-title'] = 'text';
$conf['join_html']['company-firstname'] = 'text';
$conf['join_html']['company-lastname'] = 'text';
$conf['join_html']['company-tin'] = 'text';
$conf['join_html']['company-passport'] = 'text';
$conf['join_html']['company-psn'] = 'text';
$conf['quick_filter'] = false;
$conf['advanced_filter'] = [
'id' => 'id',
'code' => 'text',
'title' => 'text',
'start_date' => 'date',
'end_date' => 'date',
'first__category-object-title' => 'join',
'region-title' => 'join',
'marz-title' => 'join',
'address' => 'text',
'category' => 'list|id', //category_1_level_title
'field_of_work' => 'list|id', //category_2_level_title
'subfield_of_work' => 'list|id', //category_3_level_title
'company-title' => 'join',
'company-firstname' => 'join',
'company-lastname' => 'join',
'company-tin' => 'join',
'company-passport' => 'join',
'company-psn' => 'join',
'x_axis' => 'text',
'y_axis' => 'text',
'x_axis_arm' => 'text',
'y_axis_arm' => 'text',
'cases_unit_1' => 'number_range',
'cases_unit_2' => 'number_range',
'cases_unit_3' => 'number_range',
'status' => 'custom| ' . QD . 'cases_status' . QD
];
$conf['advanced_filter_view'] = [
'id' => ['group' => 1, 'element' => 1],
'title' => ['group' => 1, 'element' => 2],
'start_date' => ['group' => 1, 'element' => 3],
'end_date' => ['group' => 1, 'element' => 4],
'code' => ['group' => 1, 'element' => 5],
'term_of_case' => ['group' => 1, 'element' => 6],
'first__category-object-title' => ['group' => 1, 'element' => 7],
'status' => ['group' => 1, 'element' => 8],
'region-title' => ['group' => 2, 'element' => 1],
'marz-title' => ['group' => 2, 'element' => 2],
'address' => ['group' => 2, 'element' => 3],
'category' => ['group' => 2, 'element' => 4],
'field_of_work' => ['group' => 2, 'element' => 5],
'subfield_of_work' => ['group' => 2, 'element' => 6],
'company-title' => ['group' => 3, 'element' => 1],
'company-firstname' => ['group' => 3, 'element' => 2],
'company-lastname' => ['group' => 3, 'element' => 3],
'company-tin' => ['group' => 3, 'element' => 4],
'company-passport' => ['group' => 3, 'element' => 5],
'company-psn' => ['group' => 3, 'element' => 6],
'x_axis' => ['group' => 4, 'element' => 2],
'y_axis' => ['group' => 4, 'element' => 3],
'x_axis_arm' => ['group' => 4, 'element' => 4],
'y_axis_arm' => ['group' => 4, 'element' => 5],
'cases_unit_1' => ['group' => 5, 'element' => 1],
'cases_unit_2' => ['group' => 6, 'element' => 1],
'cases_unit_3' => ['group' => 7, 'element' => 1],
];
$conf['title'] = [
'code' => $this->language('code'),
'start_date' => $this->language('start_date'),
'end_date' => $this->language('end_date'),
'first__category-object-title' => $this->language('object_title'),
'region-title' => $this->app->language('region'),
'marz-title' => $this->app->language('marz'),
'category' => $this->language('category'),
'field_of_work' => $this->language('field_of_work'),
'subfield_of_work' => $this->language('subfield_of_work'),
'status' => $this->language('cases_status'),
'address' => $this->language('address'),
'company-title' => $this->app->language('title'),
'company-firstname' => $this->language('firstname'),
'company-lastname' => $this->language('lastname'),
'company-tin' => $this->language('tin'),
'company-passport' => $this->language('passport'),
'company-psn' => $this->language('psn'),
'x_axis' => $this->language('x_axis'),
'y_axis' => $this->language('y_axis'),
'x_axis_arm' => $this->language('x_axis_arm'),
'y_axis_arm' => $this->language('y_axis_arm')
];
$conf['custom_status'] = 'cases_status';
$conf['status'] = $get_statuses['status'];
$conf['status_title'] = $get_statuses['status'];
$conf['status_style'] = $get_statuses['status_style'];
$conf['default_status'] = true;
$conf['list_button']['details']['action'] = 'cases_details';
$conf['removing_the_cast_case'] = 'true';
return $this->addons->direction->listing($conf);
