Хотелось бы рассказать как я решил проблему сохранения параметров системы для своей CMS -- TEngine (её я пока публично доступной не делаю -- слишком сыра). Описываю свое решение т.к. новички могут искать хоть какие-то способы... а мои поиски в интернете какихто вразумительных ответов не дали.
В системе CodeIgniter есть удобное средство для работы с параметрами -- класс Config.
Как с ним работать -- хорошо изложено в руководстве. Там указывается что можно получать значение и записывать его. НО. Запись работает только для текущей сессии работы скрипта. Возник вполне резонный вопрос -- как как можно удобнее сохранять свои параметры дабы не править текстовый конфиг в ручную и тем более не писать парсер на php'шный конфиг.
Решение нашлось быстро и оказалось элегантно красивым и многофункциональным. О многофункциональности я рассказывать не буду -- здесь уже каждый будет выдумывать сам. А вот саму идею выскажу. В любом случае -- она витает в воздухе...
Я храню все параметры системы (именно своего кода, но не самого фреймвёрка) в БД... Не хочу объяснять выбор этого места хранения -- речь не об этом.
Для их чтения я написал модель, например, myconfig. У которой в конструкторе прописал чтение таблицы параметров из БД (кстати, никто не мешает использовать и файл -- кому что удобней) и запись этих параметров в класс Config. Записал модель в автозагрузку и все. Теперь при загрузке системы параметры автоматически считываются и используются.
В админке, производиться обработка этих параметров. Как их обрабатывать -- каждый решает сам. Там же и можно вызвать дополнительный метод который будет записывать параметры в базу.
- Сохранение параметров системы

2008-12-01 15:37 (UTC)
проще имхо тогда хранить в yaml и парсер писать не надо и сохраняется легко в обе стороны, ну а если сессия, так вообще в отдельный класс например вынести и сериализованный хранить его в сессии и всё
2008-12-01 15:49 (UTC)
Изначально просили наглядную структуру конфига, вплоть до ручной правки без админки.
Это просто вариант работы со своими конфигами. В моём варианте, в таблице, для каждого параметра хранилась еще строка пояснения о параметре, которая выводилась в админке, там же хранилась группа к которой относиться параметр -- на этапе разработки в разы удобней хранить все это в БД... а перед релизом чуток видоизменить для работы с файлами...
2008-12-01 16:11 (UTC)
ну вот к примеру мой кусок кода конфига от cms на codeigniter
чем не наглядность и простота редактирования без админки, обычные коментарии для наглядности и так же разделение на блоки
а их уже себе и забираем куда и как хотим
$this->config->load('core');
$this->settings['site'] = $this->config->item('site');
$this->settings['theme'] = $this->config->item('theme');
и поехал работать
имхо не стоит вопрос даже каких-то нестандартных решений
2008-12-02 07:38 (UTC)
2008-12-02 07:51 (UTC)
2008-12-02 08:07 (UTC)
После окончания разработки системы, один раз вписывается код который считав весь массив записей из базы серриализует его в файл и переделывается загрузчик конфига. Фактически, меняется строк 10 кода и в результате я получаю хранение конфига в файле. В случае, если нужно добавить параметры или удалить или подправить, комментарии строки работающие с базой, и пересохраняем конфиг из файла в базу, правим, и отправляем обратно в файл.
Мне показалось это вполне приемлемым...