Как переопределить свойства и методы модели в OctoberCMS? - PullRequest
1 голос
/ 07 октября 2019

Я хочу расширить плагин 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?
  • И как я могу расширить / переопределить область или метод?

Спасибо.

...