Я бы посоветовал заменить
Blocks/<тип_блока>/<имя_контроллера>
на
Blocks/<имя_контроллера>/<действие>, где типом блока было бы название контроллера, а действием уже сам блок.
Преимущество - не надо на каждый маленький блок заводить кучу контроллеров с одним index_action в каждом.
Далее.
Пусть все контроллеры называются
Код:
class Controller_Blocks_Menu extends Controller_Block
внутри у них могут быть акшены:
Код:
public function action_topmenu()
public function action_sidemenu()
public function action_languagemenu()
Все эти контроллеры следует положить в папку applications/classes/controllers/Blocks (если у вас кохана версии 3.2 и старше, то в папку blocks).
В папке applications/classes/controllers следует создать примерно следующий контроллер:
Код:
<?php defined('SYSPATH') or die('No direct script access.');
class Controller_Blocks extends Controller {
public function before()
{
if ($this->request->is_initial())
{
//это не HMVC запрос
throw new HTTP_Exception_403;
// или что-то другое на ваше усмотрение.
}
}
}
Что касается роутов, то добавьте примерно следующее:
Код:
Route::set('blocks', 'blocks/<controller>/<action>')
->defaults(array(
'directory' => 'blocks',
));