Я хочу расширить плагин Blog, изменив свойство $allowedSortingOptions
, а также scopeListFrontEnd()
scope .
Свойство определяет доступные параметры сортировкии я хочу добавить некоторые другие варианты. Исходное значение от Блог Post.php:
public static $allowedSortingOptions = [
'title asc' => 'rainlab.blog::lang.sorting.title_asc',
'title desc' => 'rainlab.blog::lang.sorting.title_desc',
'created_at asc ' => 'rainlab.blog::lang.sorting.created_asc',
'created_at desc' => 'rainlab.blog::lang.sorting.created_desc',
'updated_at asc' => 'rainlab.blog::lang.sorting.updated_asc',
'updated_at desc' => 'rainlab.blog::lang.sorting.updated_desc',
'published_at asc' => 'rainlab.blog::lang.sorting.published_asc',
'published_at desc' => 'rainlab.blog::lang.sorting.published_desc',
'random' => 'rainlab.blog::lang.sorting.random'
];
Я также хочу расширить логику области. Оригинальный метод из Блог Post.php:
public function scopeListFrontEnd($query, $options)
{
// Code ...
return $query->paginate($perPage, $page);
}
В своем плагине я попробовал несколько способов сделать это внутри файла Plugin.php.
private function extendModel()
{
// Code ...
PostModel::extend(function ($model) {
// Code ...
// This does not work
// I want to override $setAllowedSortingOptions here and add other options
$model::$allowedSortingOptions = [
// My Options
];
// This does not work either
$model->addDynamicProperty('allowedSortingOptions', $MyOptions);
// I want to retrieve the result query of the scope ListFrontEnd to change it
Event::listen('backend.filter.extendQuery', function($filterWidget, $query, $scope) {
if ($scope->scopeName == 'listFrontEnd') {
// Change the $query order here
}
});
});
}
- Итак, как я могу переопределить свойство Class?
- И как я могу расширить / переопределить область или метод?
Спасибо.