Русскоязычный форум, посвященный фреймворку Kohana

Все о фреймворке Kohana. Обсуждение уроков, документации.
Текущее время: 29 мар 2024, 00:53

Часовой пояс: UTC + 4 часа [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 13 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: Хранение настроек в БД
СообщениеДобавлено: 06 июн 2012, 09:48 
Не в сети
Новичок

Зарегистрирован: 27 мар 2012, 14:58
Сообщения: 15
Здравствуйте.
Хотел бы хранить все настройки в базе данных, дабы редактировать их из админки.

Имеется таблица setting такого вида:
Код:
CREATE TABLE IF NOT EXISTS `setting` (
  `key` text NOT NULL,
  `value` text NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

Где key - это ключ и value - это значение.

Без использования фреймворка, я бы сделал это так:
Код:
<?php
$sql_settings = mysql_query("SELECT * FROM setting");
while($set = mysql_fetch_assoc($sql_settings)){
$setting[$set['key']] = $set['value'];
}
?>

Подскажите как лучше организовать хранение и вывод всех настроек в базе данных?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Хранение настроек в БД
СообщениеДобавлено: 06 июн 2012, 19:07 
Не в сети
Бывалый
Аватара пользователя

Зарегистрирован: 13 фев 2012, 02:44
Сообщения: 32
Наверное надо получать эти данные в основном контроллере. Ну т.е. в контроллере вызов модели, которая получает эти настройки И в контроллере потом рассовываете.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Хранение настроек в БД
СообщениеДобавлено: 06 июн 2012, 22:35 
Не в сети
Бывалый

Зарегистрирован: 02 июн 2012, 07:14
Сообщения: 69
Ну приведённый вами код с помощью query_builder можно переписать так:
$results = DB::select()->from('settings')->execute();
$settings = $results->as_array('key', 'value');
В результате должен получиться массив с ключами из колонки key и значениями из колонки value.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Хранение настроек в БД
СообщениеДобавлено: 07 июн 2012, 01:16 
Не в сети
Новичок

Зарегистрирован: 27 мар 2012, 14:58
Сообщения: 15
qed писал(а):
Ну приведённый вами код с помощью query_builder можно переписать так:
$results = DB::select()->from('settings')->execute();
$settings = $results->as_array('key', 'value');
В результате должен получиться массив с ключами из колонки key и значениями из колонки value.


Ну с этим то понятно, но где это разместить?
Понимаю, что в модели, но как вызывать эти настройки?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Хранение настроек в БД
СообщениеДобавлено: 07 июн 2012, 01:38 
Не в сети
Бывалый

Зарегистрирован: 02 июн 2012, 07:14
Сообщения: 69
Например, в модели сделать метод, туда поместить эти строки и сделать return $settings;
Из контроллера обратиться к этому методу можно так:
$settings = Model::factory('model_name')->method_name();
Похожая ситуация описывалась в уроках на примере статей, там только другая выборка из базы.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Хранение настроек в БД
СообщениеДобавлено: 07 июн 2012, 02:06 
Не в сети
Новичок

Зарегистрирован: 27 мар 2012, 14:58
Сообщения: 15
qed писал(а):
Например, в модели сделать метод, туда поместить эти строки и сделать return $settings;
Из контроллера обратиться к этому методу можно так:
$settings = Model::factory('model_name')->method_name();
Похожая ситуация описывалась в уроках на примере статей, там только другая выборка из базы.


И в каждом контроллере выбирать настройки?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Хранение настроек в БД
СообщениеДобавлено: 07 июн 2012, 02:45 
Не в сети
Бывалый

Зарегистрирован: 02 июн 2012, 07:14
Сообщения: 69
Если эти настройки нужны будут во многих местах, то лучше всего, пожалуй, будет сделать статический класс - хранилище.
В самом просто случае там будет свойство, например, $settings, и статические методы set() и get(). get будет обращаться к модели, которая будет делать выборку из базы и сохранять её в свойство $settings (массив с настройками). Перед этим надо будет только проверять, есть ли уже что-нибудь в $settings, если да, то обращаться к базе снова нет смысла, нужно брать настройки прямо оттуда. В таком случае запрос в базу будет отправляться только при первом обращении. Ну а метод set будет сохранять новые настройки в базу(через модель), и при этом обновлять $settings.
Использование тогда может выглядеть примерно так: Settings::get('param1');


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Хранение настроек в БД
СообщениеДобавлено: 07 июн 2012, 02:57 
Не в сети
Новичок

Зарегистрирован: 27 мар 2012, 14:58
Сообщения: 15
qed, спасибо, буду реализовывать.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Хранение настроек в БД
СообщениеДобавлено: 07 июн 2012, 19:34 
Не в сети
Администратор
Аватара пользователя

Зарегистрирован: 12 фев 2012, 01:02
Сообщения: 462
Вам же уже написал кто-то выше, в базовом контроллере.
http://kohanaframework.su/starting/base_controller
Его наследуют все остальные контроллеры, следовательно настройки будут доступны везде.

_________________
kohanaframework.su - обучение фреймворку Kohana


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Хранение настроек в БД
СообщениеДобавлено: 29 авг 2012, 05:02 
Не в сети
Новичок

Зарегистрирован: 27 мар 2012, 14:58
Сообщения: 15
Не могу получить данные из модели в контроллере страниц.

Базовый контроллер:
Код:
abstract class Controller_Base extends Controller_Template {
 
    public $template = 'base';
 
    public function before()
    {
        parent::before();
      $set = Model::factory('set')->get();
   }
}


Модель:
Код:
class Model_Set extends Model
{
 
    public function get()
    {
      $results = DB::select()->from('set')->execute();
      return $results->as_array('key', 'value');
   }
   
}


Контроллер страниц:
Код:
class Controller_Page extends Controller_Base {

    public function action_index()
    {
        $data = array(
         'title_text'   => 'Заголовок',
         'content_text' => $set['content']
       );
        $content = View::factory('/pages/page', $data);
    }
}
В этом контроллере страниц не доступен массив $set
Подскажите почему он не доступен и как сделать доступным.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 13 ]  На страницу 1, 2  След.

Часовой пояс: UTC + 4 часа [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 13


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Все о фреймворке Kohana  | 
Powered by phpBB® Forum Software © phpBB Group