За последние 24 часа нас посетил 23921 программист и 1739 роботов. Сейчас ищут 1908 программистов ...

Конфиги для модулей CMS

Тема в разделе "Вопросы от блондинок", создана пользователем Ensiferum, 15 фев 2011.

  1. Ensiferum

    Ensiferum Активный пользователь

    С нами с:
    11 июл 2010
    Сообщения:
    1.292
    Симпатии:
    0
    Адрес:
    из секты поклонников Нео
    В своей CMS решил сделать так, чтобы модули легко настраивались путём легкой смены конфига конкретного модуля. Решил данные конфига хранить в серилизованном виде (выбирал м/у XML, json и сериализацией). Накатал маленький класс для работы с конфигом.

    PHP:
    1. <?php
    2. class config {
    3.     /* Пример работы
    4.    
    5.     $cnf = new config('config.cnf');                // Загрузка конфигурации из файла
    6.    
    7.     $cnf->addValue('param1',3,'');                  // Добавление параметра
    8.     $cnf->setValue('param1',123,'комментарий');      // Изменение параметра
    9.     $cnf->getValue('param1');                       // Получение параметра
    10.     $cnf->delValue('param1');                       // Удаление параметра
    11.    
    12.     $cnf->saveConfig('config.cnf');                 // Сохранение конфигурации в файл
    13.    
    14.     */
    15.    
    16.     public $values = array();   // Массив конфигурации
    17.    
    18.     // Конструктор класса
    19.     public function __construct($val = '') {
    20.         if (is_array($val)) {
    21.             $this->values = $val;
    22.         } elseif (is_file($val)) {
    23.             $this->values = unserialize(file_get_contents($val));
    24.         }
    25.     }
    26.    
    27.     // Сохранение конфига в файл
    28.     public function saveConfig($file) {
    29.         if (!file_exists($file) || is_writeable($file)) {
    30.             @file_put_contents($file, serialize($this->values));
    31.         } else
    32.             return false;
    33.     }
    34.    
    35.     // Добавление нового параметра
    36.     public function addValue($name, $value = '', $comment = '') {
    37.         if (isset($name) && !empty($name))
    38.             $this->values[] = array('name' => $name, 'value' => $value, 'comment' => $comment);
    39.     }
    40.    
    41.     // Удаление параметра по имени
    42.     public function delValue($name) {
    43.         foreach ($this->values as $k=>$v) {
    44.             if ($this->values[$k]['name'] == $name)
    45.                 unset($this->values[$k]);
    46.         }
    47.     }
    48.    
    49.     // Достаём значение параметра по имени
    50.     public function getValue($name) {
    51.         foreach ($this->values as $arr) {
    52.             if ($arr['name'] == $name)
    53.                 return $arr['value'];
    54.         }
    55.     }
    56.    
    57.     // Устанавливаем значение параметра по имени
    58.     public function setValue($name, $value, $comment='') {
    59.         foreach ($this->values as $k=>$v) {
    60.             if ($this->values[$k]['name'] == $name) {
    61.                 $this->values[$k]['value']      = $value;
    62.                 $this->values[$k]['comment']    = $comment;
    63.             }
    64.         }
    65.     }
    66. }
    в index.php перед инклюдингом модуля загружается его конфиг, затем в модуле соответственно юзаются параметры.

    Собственно вопрос - нормальный подход или пойти убиться ап стену?
    Второй вопрос - пнитев направлении правильного оформления кода.
     
  2. pohapecoder

    pohapecoder Активный пользователь

    С нами с:
    16 окт 2010
    Сообщения:
    63
    Симпатии:
    0
  3. iliavlad

    iliavlad Активный пользователь

    С нами с:
    24 янв 2009
    Сообщения:
    1.689
    Симпатии:
    4
    лучше сделать индексы в массивы через 'name'. не надо будет постоянно искать по всему массиву это имя.
    комменты стандартней делать как пхпдок, в описании функции использовать или глаголы, или существительные (что-то одно): Удаление - Достаём.

    как сделаешь, покажи пример модуля с конфигом. интересно посмотреть лёгкость с отсутствием костылей (да-да, каждое значение из конфига надо 100500 раз проверить на корректность).