Плагин OctoberCMS расширяет фильтр поиска с помощью пользовательского запроса

Я создал один плагин, называемый «Property», и в котором в листинге я показываю несколько полей адреса в одном столбце, который объединит несколько полей адреса, таких как почтовый индекс, тип улицы, номер улицы и т. Д.

И я могу показать их в листинге. Ниже приведено то, что я сделал, чтобы достичь этого.

плагины \ technobrave \ свойства \ модели \ Свойство \ columns.yaml

columns:
id:
label: Property Address
type: property_address
searchable: true
sortable: false

плагины \ technobrave \ свойства \ plugin.php

public function registerListColumnTypes()
{

return [
// A local method, i.e $this->evalUppercaseListColumn()
'property_address' => [$this, 'evalPropertydDetailsListColumn'],
];
}

public function evalPropertydDetailsListColumn($value, $column, $record)
{$property_array_data = array();
$current_property = Property::where('id', $record->id)->first();

if($current_property)
{
if( ($current_property->lot != NULL) || ($current_property->lot != '') )
{
$property_array_data[] = $current_property->lot;
}

if( ($current_property->unit != NULL) || ($current_property->unit != '') )
{
$property_array_data[] = $current_property->unit;
}

if( ($current_property->street_number != NULL) || ($current_property->street_number != '') )
{
$property_array_data[] = $current_property->street_number;
}if( ($current_property->po_box != NULL) || ($current_property->po_box != '') )
{
$property_array_data[] = $current_property->po_box;
}if( ($current_property->street != NULL) || ($current_property->street != '') )
{
$property_array_data[] = $current_property->street;
}if( ($current_property->street_type_id != NULL) || ($current_property->street_type_id != '') )
{
$get_street_type_data = StreetType::where('id', $current_property->street_type_id)->first();
$property_array_data[] = $get_street_type_data->street_name;
}if( ($current_property->state_id != NULL) || ($current_property->state_id != '') )
{
$get_state_data = State::where('id', $current_property->state_id)->first();
$property_array_data[] = $get_state_data->state_name;
}

if( ($current_property->suburb_id != NULL) || ($current_property->suburb_id != '') )
{
$get_suburb_data = Suburb::where('id', $current_property->suburb_id)->first();
$property_array_data[] = $get_suburb_data->suburb;
}if( ($current_property->post_code != NULL) || ($current_property->post_code != '') )
{
$property_array_data[] = $current_property->post_code;
}$imp_property_data = implode(' ', $property_array_data);return $imp_property_data;
}}

Мне просто нужна помощь, чтобы иметь возможность искать вышеуказанное поле адреса, когда я ищу записи в моем окне поиска ..

Любая идея ?

Спасибо

0

Решение

Вы можете добавить больше столбцов в вашем columns.yaml с invisible: true а также sorteable: true, Так что вам нужно добавить lot, unit, street_number, так далее.

columns:
lot:
label: lot
type: text
searchable: true
invisible: true
unit:
label: unit
type: text
searchable: true
invisible: true

И изменить стратегию поиска в list_config.yaml

(...)
toolbar:
buttons: list_toolbar
search:
prompt: 'backend::lang.list.search_prompt'
mode: 'any'

0

Другие решения

Хорошо, ребята,

В конце концов я придумал что-то для этого.

От плагины \ technobrave \ свойства \ модели \ Свойство \ columns.yaml а также плагины \ technobrave \ свойства \ plugin.php

Я просто поместил приведенный ниже код в мой файл columns.yaml.

плагины \ technobrave \ свойства \ модели \ Свойство \ columns.yaml

columns:
unit:
label: Property Address
type: text
searchable: true
sortable: false
invisible: true
select: CONCAT(COALESCE(`lot`,''),' ',COALESCE(`unit`,''),' ',COALESCE(`street_number`,''),' ',COALESCE(`po_box`,''),' ',COALESCE(`street`,''), ' ', COALESCE( (SELECT technobrave_streets_.street_name FROM technobrave_streets_ WHERE technobrave_streets_.id=street_type_id), ''), ' ', COALESCE( (SELECT technobrave_states_.state_name FROM technobrave_states_ WHERE technobrave_states_.id=state_id), ''), ' ', COALESCE( (SELECT technobrave_suburbs_.suburb FROM technobrave_suburbs_ WHERE technobrave_suburbs_.id=suburb_id), ''), ' ', COALESCE(`post_code`,'') )

Как вы видите в приведенном выше коде, теперь я получаю адрес собственности через SELECT сам запрос с помощью CONCAT а также положить searchable как true чтобы сделать его доступным для поиска.

Надеюсь это поможет.

0

По вопросам рекламы [email protected]