Была такая тема и она получила продолжение в виде развития модуля controller.
Если раньше надо было объявлять каждый action в отдельном элементе в hook_menu(), то теперь можно объявлять эти же элементы в самих контроллерах. Например:
<?php
namespace MyakShop;
class
CartController {
/**
* path => 'shop/cart/add-product'
* title => 'Моя корзина с товарами:',
* access arguments => array('access content'),
* type => MENU_CALLBACK
*/
function addProductAction($productId = null) {
if (!instance('\MyakShop\Cart\CartRepo')->isValidProductId($productId)) {
return MENU_ACCESS_DENIED;
}
myak_shop_create_cart()->addProduct($productId);
drupal_goto(MYAK_SHOP_CART_CONTENT_PATH);
}
/**
* path => 'shop/cart/delete-product',
* title' => 'Моя корзина с товарами:',
* access arguments => array('access content'),
* type => MENU_CALLBACK,
*/
function deleteProductAction($productId) {
$manager = instance('\MyakShop\Cart\CartRepo');
if (!$manager->isValidProductId($productId)) {
return MENU_NOT_FOUND;
}
myak_shop_create_cart()->deleteProduct($productId);
$product = $manager->getProductById($productId);
drupal_set_message('Товар ' . theme_placeholder(\Myak\String::surround($product->name)) . ' был успешно удален(а) из корзины.');
drupal_goto(MYAK_SHOP_CART_CONTENT_PATH);
}
}
?>
Модуль controller автоматически найдет такие объявления и сам их добавит в hook_menu(). Чтобы это было возможно ваш модуль, который использует контроллеры должен объявить новый хук hook_controller_api(). Нужно просто, чтобы эта функция была, она может ничего не возвращать. По-моему это избавляет от рутины. Однако была сохранена (должна была сохраниться) и старая возможность - регистрировать action вручную.
Доступны в комментах все те же элементы, которые были доступны в hook_menu(), только введен еще один элемент path. Формат каждого элемента такой:
<?php
@ключ => код_php
?>
Каждая строка может заканчиваться на запятую или точку с запятой, они должны вырезаться, это может удобно тем, кто привык перечислять элементы массива или просто ставить ; в конце строки. Список доступных ключей смотрите в описании hook_menu(). Пример я уже показал выше, но вы можете найти еще один пример в самом модуле controller - это класс ControllerSettingsController.
Нейспейсы можно отключить в админке: 'admin/settings/controller'.
Скачать модуль: http://drupal.org/project/controller
Комментарии
где модели?
нахуя?
А ноды чем вам не модели?
Многозначительно...
можно узнать
-раньше на каком фреймворке кодили?
-зачем на drupal перешли?
смысл переделывать базовый функционал под MVC ?
Для отдельного модуля пожалуйста а так это можно назвать баловство просто )
это пять xD
да как бы четкий вопрос, нахуя? Как понима, просто чтобы было?
Маладэц.
В общем все понятно.
Вопрос всем ответившим выше, вы программировали что-нибудь серъезнее сайта-визитки с богатой бизнес логикой?
Мне кажется нет. Расскажу непонимающим - я затачиваю систему, чтобы можно было писать сайты в том числе и для предприятий. Если у предприятия есть бизнес процессы, такие модули как views, ctools и прочие (не все) модули тут могут не помочь. Они облегчают жизнь в некоторой степени для простых действий. Бизнес логика и бизнес процессы это то, что нужно программировать. Что такое бизнес процесс - это процесс какой-то на предприятии, который нужно вначале смоделировать, а потом реализовать логику взаимодействия моделей.
Тут хорошо подходят др. фреймворки, не Друпал, такие Zend Framework, Yii и др. Я считаю, что Друпал не уступает им, но его нужно допилить, что я и сделал и продолжаю делать.
ты наверное хотел сказать "логику взаимодействия нод" xD
Именно нод.
Вы о чем? Какой базовый функционал, что переделывать, ничего не понял... Первый пост прочтите.