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

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

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




Начать новую тему Ответить на тему  [ Сообщений: 27 ]  На страницу 1, 2, 3  След.
Автор Сообщение
СообщениеДобавлено: 10 окт 2012, 10:16 
Не в сети
Бывалый
Аватара пользователя

Зарегистрирован: 05 июн 2012, 03:08
Сообщения: 213
Настройки для сайта удобно хранить в файле конфигурации.
Например создать файл в application/config/app.php
Код:
<?php defined('SYSPATH') or die('No direct script access.');

return array(
    'sitename' => 'Разработка на Kohana',
    'siteslogan' => 'Быстрая разработка сайтов на фреймворке Kohana 3.2',
    'copy' => '&copy; Все права защищены, 2012.',
    'blog' => array(
        'per_page_frontend' => 3,
        'per_page_backend' => 15,
        'image_thumb_width' => 160,
        'image_thumb_height' => 130,
        'image_thumb_quality' => 70,
    ),
);
  
Доступ к настройкам осуществляется так:
Код:
$config = $Kohana::$config->load('app');
echo $config('sitename');
echo $config('blog.per_page_frontend');
echo $config('blog.image_thumb_height');
  

Но в Kohana нет метода save(), чтобы можно было сохранить эти настройки.

Тогда мы сделаем так: создаем в application/classes/ папку config в ней файл group.php с таким содержимым:
Код:
<?php defined('SYSPATH') or die('No direct script access.');

class Config_Group extends Kohana_Config_Group
{
    /**
     * Запись в файл конфига
     */
    public function save()
    {
        $files = Kohana::find_file('config', $this->_group_name);
        if (count($files) == 1)
            $filename = $files[0];
        else
            $filename 
= $files[count($files)-1];

        file_put_contents($filename, $this->encode($this->getArrayCopy()));
    }

    protected function encode($array, $pref = "\t")
    {
        if ($pref == "\t")
            $res = "<?php defined('SYSPATH') or die('No direct script access.');\n\nreturn array(\n";
        else
            $res 
= "array(\n";

        foreach ($array as $i => $v)
            $res .= $pref . (!is_numeric($i) ? "'" . str_replace("'", "\\'", $i) . "' => " : "") .
                    (is_array($v)
                        ? self::encode($v, $pref . "\t")
                        : (is_numeric($v)
                                ? $v
                                
: (is_bool($v)
                                    ? ($v ? 'true' : 'false')
                                    : "'" . preg_replace("/(?<!\\\)'/ui", "\\'", str_replace("\\'", "\\\\\\'", $v)) . "'"))) . ",\n";

        return $res . substr($pref, 0, -1) . ($pref == "\t" ? ");" : ")");
    }
}
 
Теперь нам доступен метод save()
Код:
$config = $Kohana::$config->load('app');
$config['sitename'] = 'Мой сайт';
$config['siteslogan'] = 'Мой первый сайт';
$config->save(); 

Примечание. При сохранении убираются все комментарии, если они были в изначальном файле, лишние пробелы.

P.S. Решение не мое, взято отсюда: http://phpforum.ru/index.php?s=89a5be00 ... opic=56608
Там, кстати, есть что скачать и посмотреть. Есть и видеоурок: "Пишем редактор строк i18n"

Решение полезное и хорошее, я им пользуюсь, думаю Alehandr мне простит, что я здесь разместил)

_________________
http://de-en.info (работает на Kohana 3.3)


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 10 окт 2012, 13:50 
Не в сети
Администратор
Аватара пользователя

Зарегистрирован: 24 июл 2012, 18:00
Сообщения: 701
Откуда: Murom, Russia
Браво!


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 10 окт 2012, 14:37 
Не в сети
Администратор
Аватара пользователя

Зарегистрирован: 24 июл 2012, 18:00
Сообщения: 701
Откуда: Murom, Russia
И не забываем про права на запись в файл, если вы конечно не вендузятник


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 10 окт 2012, 15:57 
Не в сети
Бывалый
Аватара пользователя

Зарегистрирован: 05 июн 2012, 03:08
Сообщения: 213
Sergey писал(а):
И не забываем про права на запись в файл, если вы конечно не вендузятник

Виндузятник не виндузятник, а на хосте придется выставить все равно)

_________________
http://de-en.info (работает на Kohana 3.3)


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 10 окт 2012, 16:24 
Не в сети
Администратор
Аватара пользователя

Зарегистрирован: 24 июл 2012, 18:00
Сообщения: 701
Откуда: Murom, Russia
Ну может кто-то такой смелый, что у него и хостинг виндовый :)


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 18 фев 2013, 02:05 
Не в сети
Новичок

Зарегистрирован: 14 фев 2013, 23:26
Сообщения: 19
хм, не сочтите за назойливость, но как-то громоздко!

Может стоит обратить внимание на http://php.net/manual/ru/function.var-export.php

Например как здесь: https://github.com/zendframework/zf2/bl ... pArray.php


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 18 фев 2013, 03:11 
Не в сети
Администратор
Аватара пользователя

Зарегистрирован: 24 июл 2012, 18:00
Сообщения: 701
Откуда: Murom, Russia
Да, кстати, с butschster согласен


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 18 фев 2013, 03:41 
Не в сети
Бывалый
Аватара пользователя

Зарегистрирован: 05 июн 2012, 03:08
Сообщения: 213
Где-то уже совсем близко
Код:
public function save()
{
    $files = Kohana::find_file('config', $this->_group_name);

    if (count($files) == 1)
        $filename = $files[0];
    else
        $filename 
= $files[count($files)-1];

    $arr = "<?php defined('SYSPATH') or die('No direct script access.');\n\nreturn " . var_export($this->getArrayCopy(), true) . ';';

    file_put_contents($filename, $arr);
}
  

config/app.php
Код:
<?php defined('SYSPATH') or die('No direct script access.');

return array(
   'languages' => array(
      'ru' => 'ru_RU',
      'en' => 'en_US',
   ),
   'img_ext_allowed' => array(
      'jpg',
      'jpeg',
      'png',
      'gif',
   ),
);

Выполняем
Код:
$app = Kohana::$config->load('app');

$app['languages']['ru'] = "xx_XX";

$app->save();

Получаем
Код:
<?php defined('SYSPATH') or die('No direct script access.');

return array (
  'languages' =>
  array (
    'ru' => 'xx_XX',
    'en' => 'en_US',
  ),
  'img_ext_allowed' =>
  array (
    0 => 'jpg',
    1 => 'jpeg',
    2 => 'png',
    3 => 'gif',
  ),
);

Нужно подумать теперь)

_________________
http://de-en.info (работает на Kohana 3.3)


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 22 апр 2013, 22:30 
Не в сети
Бывалый
Аватара пользователя

Зарегистрирован: 02 апр 2013, 16:26
Сообщения: 474
Откуда: Сергиев Посад
мои 5 копеек ;)
Код:
<?php defined('SYSPATH') or die('No direct script access.');

class Config_Group extends Kohana_Config_Group
{
    /**
     * Save select config
     */
    public function save()
    {
        if( $files = Kohana::find_file( 'config', $this->group_name() ) )
        {
            $this->varExportToFile( $this->getArrayCopy(), array_pop($files), true );
        }
    }

    /**
     * Save varible in file
     */
    protected function varExportToFile( $var, $file, $export = true )
    {
        if ( !file_exists($file) || is_writable($file) )
        {
            if ( $h = @fopen($file, 'w+') )
            {
                if ( flock($h, LOCK_EX) )
                {
                    $result = fwrite( $h, Kohana::FILE_SECURITY.PHP_EOL.'return '.($export ? var_export($var, true) : $var).';');
                    flock($h, LOCK_UN);
                }
                else
                {
                    $result = false;
                }
                fclose($h);
                return $result;
            }
        }
        return false;
    }
   
}

_________________
Майкл Джордан играет в баскетбол. Чарльз Мэнсон убивает людей. Я пишу код. У каждого свой талант.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 23 апр 2013, 13:01 
Не в сети
Администратор
Аватара пользователя

Зарегистрирован: 24 июл 2012, 18:00
Сообщения: 701
Откуда: Murom, Russia
Взяли бы и написали бы драйвер для коханки :)


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

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


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

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


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

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