Метод реализации наследования параметров

 

Всем доброго времени суток. Мы продолжаем работать над наследованием в CMS RS-MINI. Контроллеры теперь умеют перемещаться из одного объекта класса page.class.php в другой подобный объект. Осталось сделать приблизительно тоже самое и для параметров этих самых контроллеров.

Отвечать за слияние параметров будет метод unionParams() набросок которого сейчас уже существует в классе controller.class.php. Давайте немного поговорим о логике этого метода, а то в данной статье совсем не будет текста Улыбаюсь

Поведение метода unionParams()

Если у контроллера нет параметров

Вообще такое бывает очень редко, так как будет принято для каждого подключенного контроллера вписывать хотя бы один системный параметр (это я про параметр active). Но все же у нас должен быть предусмотрен и такой вариант развития ситуации.

В этом случая в свойство paramList, копии объекта контроллера, будет помещен присланный, через параметры метод unionParams(), массив без всяких проверок.

Если у контроллера есть параметры

В задачу метода будет входить поиск присланного параметра среди уже существующих параметров контроллера. Если поиск увенчается успехом, то параметр не будет переписан. Если же параметр не будет найден, то он сохранится в свойстве paramList текущего контроллера.

Реализация метода unionParams()

Вставляем тестовые данные

Для того что бы проверить работу нашего нового метода (код которого чуть ниже) нам понадобится для второй нашей страницы (страницы с псевдонимом test_alias) подключить тот же самый контроллер, но уже с измененными параметрами.

В статье «Наследования контроллеров» я приводил пример в котором на главной странице у контроллера pub.test.intro были вот такие параметры:

  • active: enable
  • param1: value1
  • param2: value2

А у страницы /about/ (она же test_alias) был тот же самый контроллер но вот с такими параметрами:

  • active: enable
  • param2: value3

В общем вот sql запрос на подключение того же контроллера но с другими параметрами

INSERT INTO
    `rs_connect`
    (
        `connect_id`,
        `map_id`,
        `connect_value`,
        `controller_id`,
        `connect_block`,
        `connect_inherit`,
        `connect_position`
    )
    VALUES
    (
        NULL,
        '2',
        'active: enable\nparam2: value3',
        '1',
        'top',
        'true',
        '1'
    )
;

Код метода unionParams()

Теперь давайте в файле controller.class.php напишем вот такой код: (файл лежит в папке /rs-mini/core/)

    /*
     * метод перезаписывает существующие параметры
     *
     * @access - public
     *
     * @param array params - массив с унаследованными параметрами
     */
    
    public function unionParams($params)
    {
        // если параметров у контроллера нет
        if (empty($this->paramList)) {
            // просто сохраняем то что прислали
            $this->paramList = $params;
            return;
        }
        
        // если параметры есть, то листаем присланные
        foreach($params as $inheritName => $inheritValue) {
            
            // переменная для определения есть ли уже такой параметр
            // у контроллера
            $found = FALSE;
            
            // листаем параметры контроллеров и сравниваем имена
            foreach ($this->paramList as $name => $value)
                // если имена равны
                if ($inheritName == $name)
                    // переключаем переменную в состояние "найдено"
                    $found = TRUE;
                    
            // если присланный параметр небыл найден у контроллера
            if ($found == FALSE)
                // сохраняем его
                $this->paramList[$inheritName] = $inheritValue;
        }
    }

Заключение

Теперь если перейти на страницу http://mini.test.ru/about/ то мы увидим вот такую картинку:

результат насделования параметров

Я отобразил лишь кусочек дампа, а именно список контроллеров второй страницы. Обратите внимание на свойство paramList. Ключ param2 теперь имеет значение value3 вместо значения value2 (как на главной странице). Это говорит нам о том, что объединения параметров работает как надо, и на второй странице у нас, помимо существующих параметров (взятых из базы данных), теперь есть параметр param1 перекочевавший с главной страницы. По идеи мы теперь получаем возможность переписывать параметры наследуемых контроллеров + создавать новые параметры для этих контроллеров.

Если у Вас есть какие-либо вопросы, пишите их в комментариях. Результат работы можно скачать в конце статьи.

Всего Вам наилучшего, на сегодня все!

Прикрепленные файлы

 

Возможно Вам будут интересны следующие заметки

Комментарии (5)

Ваше имя *
Сайт
Ваш E-mail *
Ваше сообщение *
 
Анатолий, 04 Сентября 2015 г. 11:28 пишет:
Гость

Какие то сложные вещи пошли))))

Алексей, 04 Сентября 2015 г. 12:31 пишет:
Автор
Сложные в смысле не понятные?
Ответ для пользователя: Анатолий
Анатолий, 05 Сентября 2015 г. 11:04 пишет:
Гость

Сложные, значит интересные) все интересное новое, а значит и сложное_)))))) Алексей, а макет магазина будет как всегда минималистичен?) или придумали уже что то интересное?)

Алексей, 05 Сентября 2015 г. 13:56 пишет:
Автор
а макет магазина будет как всегда минималистичен?
Макет в смысле дизайн? Если да, то я пока не думал об этом.
Ответ для пользователя: Анатолий
Алексей, 05 Сентября 2015 г. 14:03 пишет:
Автор
Вы пишите с почты которая заканчивается на "@ail.ru", это так и надо (очень в этом сомневаюсь, поэтому и спрашиваю) или Вы хотели написать "@mail.ru"?
Ответ для пользователя: Анатолий