Запуск Berry
Запуск Berry в виде самостоятельного движка.
Berry можно использовать отдельно или как часть другого движка.
Будем считать, что движок лежит в папке berry. Нужно создать два файла в тойже директории, что и berry: index.php и .htaccess.
index.php
// Выставляем уровень ошибок: выводить все ошибки, исключая notice
error_reporting(E_ALL ^ E_NOTICE);
// Подключаем главный класс
include 'berry/berry/b.php';
// Запускаем Berry
b::init();
// Подключаемся к БД
sql::init(array(
'username' => 'user',
'password' => '***',
'database' => 'localhost/test_berry',
'prefix' => '',
'profiler' => true
));
////////////////////////////////////////////////////////////////////////////////
// Делаем класс для страниц
class Page {
public $title = 'Мой сайт';
// Обязательное свойство, может не быть public
public $content;
// Страница index
function index($a = 0){
$this->title .= ' // Из index';
print_r(array('index' => func_get_args()));
}
// Страница show
function show($id = 0){
$this->title .= ' // Из show';
print_r(array('show' => func_get_args()));
}
// Все прочии страницы
function __call($page, $params){
// Перенаправляем запросы к /ext/ в директорию движка
if ($page == 'ext')
if (file_exists($path = file::path($file = b::q(1, 0)))){
$file = basename(str_replace($file, '', $path)).'/'.$file;
request::redirect(b::q(0).'/'.$file.'?'.http_build_query($_GET));
}
// Ставим 404-ую ошибку
request::status(404);
$this->title .= ' // 404';
print_r(array('__call' => func_get_args()));
}
// Показываем
function __toString(){
// Подключаем berry/index.phtml, как оснеовной слой
// и передаём в него все свойства класса
$output = piles::show('index', (array)$this);
// Парсим тег <block:* />
$output = preg_replace('/<block(_|:|-|\.)(.*?)(\s+)?\/>/ie', "join('', html::block('\\2'))", $output);
// Заменяем УРЛы ~/path на http://example/path
$output = preg_replace('/(href|src)=("|\'|)\~\/(.*)\\2/iU', '\\1=\\2'.b::q(0).'/\\3\\2', $output);
$output = preg_replace('/(\W)url(\s+)?\(("|\'|)\~\/(.*)\\3\)/i', '\\1url\\2(\\3'.b::q(0).'/~/\\4\\3)', $output);
return html::form_persister($output);
}
}
////////////////////////////////////////////////////////////////////////////////
// Регистрируем УРЛы
b::router(array(
'home' => new Page
));
////////////////////////////////////////////////////////////////////////////////
echo '<pre>';
b_stat(b::stat());
echo "\n\n";
sql_log();
echo '</pre>';
////////////////////////////////////////////////////////////////////////////////
function echo_r($var){
$var = func_get_args();
if (func_num_args() == 1)
$var = $var[0];
echo highlight_string(print_r($var, true), true);
}
////////////////////////////////////////////////////////////////////////////////
function b_stat($array, $i = 0){
foreach ($array as $k => $v){
if (is_array($v)){
echo $k.":\r\n";
b_stat($v, ($i + 1));
} else {
echo str_repeat(' ', $i);
echo $k.': '.$v."\r\n";
}
}
}
////////////////////////////////////////////////////////////////////////////////
function sql_log(){
$profiler = Zend_Db_Table::getDefaultAdapter()->getProfiler();
if ($queries = $profiler->getQueryProfiles())
foreach ($queries as $query){
echo str_repeat('=', 80)."\r\n\r\n";
echo $query->getQuery()."\r\n";
echo '-- '.$query->getElapsedSecs()."\r\n\r\n";
}
}
.htaccess
// На всякий случай
AddDefaultCharset utf-8
<IfModule mod_rewrite.c>
RewriteEngine on
# Перенаправляем УРЛы на DirectoryIndex и поручаем обработку Berry
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule . index.php [QSA,L]
</IfModule>
<IfModule mod_php5.c>
# Магические кавычки та ещё поебень, нах её
php_value magic_quotes_gpc 0
php_value magic_quotes_runtime 0
php_value magic_quotes_sybase 0
# Заменяем стандартные строковые функции на функции mbstring
php_value mbstring.func_overload 7
php_value mbstring.internal_encoding utf-8
php_value mbstring.script_encoding utf-8
</IfModule>
mbstring является необязательным, но крайне желательным расширением для PHP.
berry/index.phtml
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8" />
<title>${title}</title>
<block:head />
</head>
<body>
${content}
</body>
</html>
Это, собственно, и всё. Berry запущен как самостоятельный движок.