Berry Framework

Фреймворк, в который собраны функции использованные в различных проектах. В том числе: ORM, шаблонизатор и ряд других полезных в хозяйстве вещей.

Скачать
trunk-версия (650 КБ)
Наверх

Первичной целью создания Berry было подключение её к сторонним проектам и подгрузка дополнительных внешних библиотек (оттого "жадный" autoload), а в таких ситуациях больше нужны различные помощники (в контексте Berry, это ext - расширения), хорошая модель (model) и простое представление (view).

Модель

Например, написать модуль для OpenCart не сложно, если разобраться что уже есть в движке, как выводить представление и как используется модель.

$query = $this->db->query("
    SELECT * FROM " . DB_PREFIX . "category c
    LEFT JOIN " . DB_PREFIX . "category_description cd ON (c.category_id = cd.category_id)
    WHERE
        c.parent_id = '" . (int)$parent_id . "' AND
        cd.language_id = '" . (int)$this->language->getId() . "'
    ORDER BY c.sort_order
");

Чуть выше отформатированный листинг кода модели OpenCart. В склейке текста с константами и переменными приведёнными к типу очевидным раздражителем является всё. Зато у Berry всё чистенько:

$query = sql::from('category')->
    select('*', 'cDesc.*')->
    where('parent_id = ?d', $parent_id)->
    where('cDesc.language_id = ?d', $this->language->getId())->
    order_by('sort_order')->
    fetch();

Или так:

$query = Сategory::find_all(array('parent_id' => $parent_id, 'cDesc.language_id' => $this->language->getId()))->
    with(array('*', 'cDesc.*'))->
    sort('sort_order');

Или даже так:

$query = Сategory::find_all('parent_id = ? and cDesc.language_id = ?', array($parent_id, $this->language->getId()))->
    with(array('*', 'cDesc.*'))->
    sort('sort_order');

Имя таблицы category_description легко переименовать в симпатичный cDesc не трогая саму таблицу.

Наша ORM - с самым непонятным названием SQL - ничем особо не выделяется среди десятков подобных ей "велосипедов". Она просто удобная и логичная.

Представление

Один из самых простейших шаблонов OpenCart:

<?php if ($reviews) { ?>
<?php foreach ($reviews as $review) { ?>
<div style="background: #F7F7F7; border: 1px solid #DDDDDD; padding: 10px; margin-bottom: 10px;"><b><?php echo $review['author']; ?></b> |
<img src="catalog/view/theme/default/image/stars_<?php echo $review['rating'] . '.png'; ?>" alt="<?php echo $review['stars']; ?>" /><br />
  <?php echo $review['date_added']; ?><br />
  <br />
  <?php echo $review['text']; ?></div>
<?php } ?>
<div class="pagination"><?php echo $pagination; ?></div>
<?php } else { ?>
<div style="background: #F7F7F7; border: 1px solid #DDDDDD; padding: 10px; margin-bottom: 10px;"><?php echo $text_no_reviews; ?></div>
<?php } ?>

И его альтернатива для Berry:

<? if ($reviews) { ?>
    <? foreach ($reviews as $review){ ?>
        <div style="background: #F7F7F7; border: 1px solid #DDDDDD; padding: 10px; margin-bottom: 10px;">
            <b>${review.author}</b> |
            <img src="catalog/view/theme/default/image/stars_${review.rating}.png" alt="${review.stars}" /><br />
            ${review.date_added}<br /><br />
            ${review.text}
        </div>
    <? } ?>

    <div class="pagination">${pagination}</div>
<? } else { ?>
    <div style="background: #F7F7F7; border: 1px solid #DDDDDD; padding: 10px; margin-bottom: 10px;">${text_no_reviews}</div>
<? } ?>

Текста меньше, подсветка редактора не портится, доступ к переменным в разы проще. А короткие теги - часть шаблонизатора, следовательно не будет никаких проблем с тегами вроде <?xml ?> и его вариациями.

Piles, в отличии от других шаблонизаторов, практически чистый PHP-way - соблюдает "путь" того PHP, который создавался для внедрения в HTML. Разница лишь в том, что HTML-теги могут взаимодействовать с PHP имея возможность быть его частью - функциями.

Документация

Примеры

Запуск Berry
Запуск Berry в виде самостоятельного движка.
Расширения Piles
Описание некоторых аспектов шаблонизатора. И как расширить его функциональность.
Чуть больше о SQL
Описание базовых возможностей с примерами.

Классы Berry

Arr
Класс-помощьник по работе с массивами.
B
Класс является ядром движка и содержит основные методы и переменные.
Cache
Класс для работы с кешем.
Check
Класс-помощьник для валидации данных.
Date
Класс-помощьник по работе с датами.
Except
Класс для работы с исключениями.
File
Класс-помощьник по работе с файлами.
Int
Класс-помощник по работе с числами.
Piles
Класс для работы с шаблонами.
Request
Класс-помощьник по работе с активным запросом.
SQL
Класс для работы с базой данных
Str
Класс-помощьник по работе со строками.

Дополнительные классы

Archive
Класс для работы с ZIP- и TAR-архивами.
HTML
Класс-помощьник по работе с HTML.
Hook
Класс для работы с хуками.
ID3
Класс для работы с ID3 тегами версии 1.0 и 1.1.
Image
Класс для работы с изображением.
Inflector
Класс-помощьник по работе со строками.
Mail
Класс для работы с почтой.
Service
Класс для всяких сервисов.
Session
Класс подменяющий хранилице стандартных сессий.
XML-RPC
Класс для работы с XML-RPC.

Расширения

Ajax
Набор атрибутов для подключение и работы аякса.
Attrs
Набор атрибутов разной полезности.

Лицензия (LGPL)

Copyright © 2009-2012 Alexey Gagin <lexazloy@gmail.com>.

This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

Полный текст.