Первичной целью создания 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
Класс-помощьник по работе с массивами.
Класс является ядром движка и содержит основные методы и переменные.
Класс для работы с кешем.
Класс-помощьник для валидации данных.
Класс-помощьник по работе с датами.
Класс для работы с исключениями.
Класс-помощьник по работе с файлами.
Класс-помощник по работе с числами.
Класс для работы с шаблонами.
Класс-помощьник по работе с активным запросом.
Класс для работы с базой данных
Класс-помощьник по работе со строками.
Дополнительные классы
Класс для работы с ZIP- и TAR-архивами.
Класс-помощьник по работе с HTML.
Класс для работы с хуками.
Класс для работы с ID3 тегами версии 1.0 и 1.1.
Класс для работы с изображением.
Класс-помощьник по работе со строками.
Класс для работы с почтой.
Класс для всяких сервисов.
Класс подменяющий хранилице стандартных сессий.
Класс для работы с XML-RPC.
Расширения
Набор атрибутов для подключение и работы аякса.
Набор атрибутов разной полезности.
Лицензия (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.