Запись настроек в файл

Общие вопросы по использованию фреймворка. Если не знаете как что-то сделать и это про Yii, вам сюда.
bohdantheone
Сообщения: 135
Зарегистрирован: 2012.08.19, 14:31

Запись настроек в файл

Сообщение bohdantheone »

Здравствуйте товарищи форумчане =). Делаю настройки сайта с сохранением в файл. Можно ли как-нибудь сделать проверку, были ли сделаны изменения полей перед отправкой формы и те которые пользователь изменил - перезаписать, а остальные не трогать? И еще одно: все комментарии из файла удаляются, как этого избежать?
Аватара пользователя
futbolim
Сообщения: 2051
Зарегистрирован: 2012.07.08, 19:28

Re: Запись настроек в файл

Сообщение futbolim »

записывать в базу )
У Вас сразу 2 проблемы отпадут.
Аватара пользователя
Ghost_nsk
Сообщения: 825
Зарегистрирован: 2012.01.01, 00:45
Откуда: Новосибирск
Контактная информация:

Re: Запись настроек в файл

Сообщение Ghost_nsk »

bohdantheone писал(а):Здравствуйте товарищи форумчане =). Делаю настройки сайта с сохранением в файл. Можно ли как-нибудь сделать проверку, были ли сделаны изменения полей перед отправкой формы и те которые пользователь изменил - перезаписать, а остальные не трогать? И еще одно: все комментарии из файла удаляются, как этого избежать?
а чем запись в базу не подходит? :)
bohdantheone
Сообщения: 135
Зарегистрирован: 2012.08.19, 14:31

Re: Запись настроек в файл

Сообщение bohdantheone »

способом хранения, например в файле есть:
'rezols' =>
array (
1600 => 1200,
1440 => 900,
1024 => 768,
),
Можно конечно парсить из базы обратно в массив, но нужно тогда все переделать.
Аватара пользователя
futbolim
Сообщения: 2051
Зарегистрирован: 2012.07.08, 19:28

Re: Запись настроек в файл

Сообщение futbolim »

id |key |value
1 |rezols |{"1600" : "1200", "1440" : "900", "1024" : "768"}
Аватара пользователя
timlar
Сообщения: 1382
Зарегистрирован: 2009.09.19, 17:49
Откуда: Украина, Днепропетровск
Контактная информация:

Re: Запись настроек в файл

Сообщение timlar »

bohdantheone писал(а):Можно конечно парсить из базы обратно в массив, но нужно тогда все переделать.
Лучше тратить время на изобретение велосипеда, чем один раз взять и переделать? :) Переделывание - это неотъемлемая часть программирования. Не нужно этого бояться.
Twitter: @timlar_ua
bohdantheone
Сообщения: 135
Зарегистрирован: 2012.08.19, 14:31

Re: Запись настроек в файл

Сообщение bohdantheone »

просто хранить настройки в БД более трудоемко нежели в файле, если например имеется так з 20 различных опций, а вообще рекомендуют в INI файлах.
Аватара пользователя
timlar
Сообщения: 1382
Зарегистрирован: 2009.09.19, 17:49
Откуда: Украина, Днепропетровск
Контактная информация:

Re: Запись настроек в файл

Сообщение timlar »

bohdantheone писал(а):просто хранить настройки в БД более трудоемко нежели в файле, если например имеется так з 20 различных опций, а вообще рекомендуют в INI файлах.
А в ini-файлах не трудоемко? Как минимум потеря быстродействия (постоянный парсинг ini-файла). На одном файле, скорее всего, будет незаметно, но на большом количестве очень заметно. Был у меня проект, который был написан на Zend фреймворке, там было много конфигов и все они были в ini-файлах. Тормозило нереально. Прогнал профайлером - 70% времени тратилось на парсинг ini-файлов. После перевода на обычные php-массивы проект стал просто летать.

Как по мне, идеальный вариант хранить пользовательские настройки в базе и кэшировать их. При изменении настроек сбрасывать кэш и кэшировать заново.
Twitter: @timlar_ua
bohdantheone
Сообщения: 135
Зарегистрирован: 2012.08.19, 14:31

Re: Запись настроек в файл

Сообщение bohdantheone »

Как по мне, идеальный вариант хранить пользовательские настройки в базе и кэшировать их. При изменении настроек сбрасывать кэш и кэшировать заново.
Вот это ближе к "телу". А где-то можно увидеть реализацию последнего? Проверять на isNewREcord, сбрасывать кеш, сохранять и вновь в кеш? :?
Аватара пользователя
timlar
Сообщения: 1382
Зарегистрирован: 2009.09.19, 17:49
Откуда: Украина, Днепропетровск
Контактная информация:

Re: Запись настроек в файл

Сообщение timlar »

Поищи по форуму. Я когда-то давно поднимал такую же тему. Там же приводил свою реализацию (в последствии переписанную немного иначе), а так же еще несколько человек приводили свои варианты.
Twitter: @timlar_ua
bohdantheone
Сообщения: 135
Зарегистрирован: 2012.08.19, 14:31

Re: Запись настроек в файл

Сообщение bohdantheone »

Вот нашел в теме viewtopic.php?f=3&t=797&start=30
товарищ pegas1981 описалне плохой вариант, только вот я правильно понял, у него в БД, что только id и param?
Аватара пользователя
timlar
Сообщения: 1382
Зарегистрирован: 2009.09.19, 17:49
Откуда: Украина, Днепропетровск
Контактная информация:

Re: Запись настроек в файл

Сообщение timlar »

Бегло посмотрел код. Это реализация сохранения параметров для каждого пользователя. Сами параметры сериализуются и пишутся в одно поле. Я бы на его месте не сериализовал, а писал в JSON-формате. И редактировать проще (в случае чего) и по скорости быстрее.
Twitter: @timlar_ua
bohdantheone
Сообщения: 135
Зарегистрирован: 2012.08.19, 14:31

Re: Запись настроек в файл

Сообщение bohdantheone »

тогда уже лучше твой вариант попробую, а то что-то сильно мудрено с одним полем
bohdantheone
Сообщения: 135
Зарегистрирован: 2012.08.19, 14:31

Re: Запись настроек в файл

Сообщение bohdantheone »

Что-то я не могу разобраться с логикой. Например есть в таблице записи:
Изображение
Вот контроллер:

Код: Выделить всё

<?php
    
class OptionsController extends Controller
{
    public function accessRules()
    {
        return array(
            
            array('allow', // allow admin user to perform actions
                'actions'=>array('index'),
                'roles'=>array('2'),
            ),
            
        );
    }
    
    public function actionIndex()
    {
        $model = new Options;
        $this->pageTitle = 'Настройки сайта '.$model->name;
            
            if(isset($_POST['Options']))
            {                       
                $model->attributes = $_POST['Options'];
                $model->save();                       
            
                if($model->save())
                     Yii::app()->user->setFlash('success', "Настройки успешно сохранены!");
            }
                                      
            $this->render('index', array(
                'model' => $model
            ));    
    }
      
} 
Все остальное, как ты описывал.
Как в представлении правильно добраться до записей в БД?
param(name) - это обращение к файлу с настройками, а сохранить то как тогда, чтобы в БД произошли изменения? запутался что-то я :?
Аватара пользователя
anton44eg
Сообщения: 2716
Зарегистрирован: 2012.01.25, 13:37
Откуда: Киев

Re: Запись настроек в файл

Сообщение anton44eg »

я делаю компонентом
примерно так, вносил потом еще изменения, но исходников нет под рукой
viewtopic.php?f=3&t=8141#p48661
ну а редактирование - в БД табличным вводом
Аватара пользователя
slavcodev
Сообщения: 3134
Зарегистрирован: 2009.04.02, 21:42
Откуда: Valencia
Контактная информация:

Re: Запись настроек в файл

Сообщение slavcodev »

Не читал всю тему, но не увидел решения с CConfiguration, оно не подходит?

Код: Выделить всё

$file = Yii::getPathOfAlias('application.configs') . 'test.php';
// load
$config = new CConfiguration($file);
// access and setup
$config['myOption'] = 'value';
echo $config['mySecondOption'];
// save
file_put_contents($config->saveAsString());
 
Жду Yii 3!
bohdantheone
Сообщения: 135
Зарегистрирован: 2012.08.19, 14:31

Re: Запись настроек в файл

Сообщение bohdantheone »

нужно сначала 1 метод попробовать, чтобы переходить к другому. С табличным вводом разобрался - в базу сейвит. Не сейвит в файл:

Код: Выделить всё

public static function initOptions() {
        $model = Yii::app()->cache->get('optionsModel');
        if($model === false) {
            $model = Options::model()->findAll();
            Yii::app()->cache->set('optionsModel', $model, 5184000);
        }
        foreach ($model as $data) {
            if($data->state == 'true') $data->state = true;
            elseif($data->state == 'false') $data->state = false;
            Yii::app()->params[$data->name] = $data->state;
        }
    }
}
bohdantheone
Сообщения: 135
Зарегистрирован: 2012.08.19, 14:31

Re: Запись настроек в файл

Сообщение bohdantheone »

mc-bear писал(а):Не читал всю тему, но не увидел решения с CConfiguration, оно не подходит?

Код: Выделить всё

$file = Yii::getPathOfAlias('application.configs') . 'test.php';
// load
$config = new CConfiguration($file);
// access and setup
$config['myOption'] = 'value';
echo $config['mySecondOption'];
// save
file_put_contents($config->saveAsString());
на этот вариант ошибочка:
"Карта должна быть представлена массивом или объектом, реализующим интерфейс Traversable."
bohdantheone
Сообщения: 135
Зарегистрирован: 2012.08.19, 14:31

Re: Запись настроек в файл

Сообщение bohdantheone »

Товарищи знатоки, скажите будет ли эффективным такой метод?

Код: Выделить всё

public static function initOptions() {
                
        $model = Yii::app()->cache->get('Options');
        if($model === false) {
            $model = Options::model()->findAll();
            Yii::app()->cache->set('Options', $model, 3600*60*24);
        }
           $params = array();
           foreach ($model as $data) {
                $params[$data->name] = $data->description;
           }
            
           file_put_contents(
                        Yii::getPathOfAlias('application.config.test') . '.php',
                        '<?php return ' . var_export($params, true) . ';'                                      
                        );
    } 
Аватара пользователя
slavcodev
Сообщения: 3134
Зарегистрирован: 2009.04.02, 21:42
Откуда: Valencia
Контактная информация:

Re: Запись настроек в файл

Сообщение slavcodev »

А ты отдаешь себе отчет, что если одновременно кто-то больше чем один, захочет записать настройки в файл, будут проблемы?
Жду Yii 3!
Ответить