Я знаю, что этой теме уже более года, однако я пытался найти в Googling больше информации о структуре, которую должна принять программа HMVC, и о том, как ее можно реализовать в CI, и не нашел очень много ответов.
Я почти уверен, что для правильной работы HMVC с несколькими виджетами, включенными на всех страницах сайта, они должны быть организованы одним главным контроллером. Это будет верхний уровень иерархии. Позвольте мне привести пример:
У вас есть сайт с виджетом корзины покупок на каждой странице. Если вы хотите использовать функциональные возможности корзины, вам нужно будет ссылаться на методы в модуле корзины, например ::
<a href="cart/add/<?=$item?>">add</a>
Проблема, связанная с использованием этой ссылки, заключается в том, что вы не хотите перезагружать оставшуюся часть сайта из этого модуля. Вместо этого вы можете направить ссылку через ваш главный контроллер и перезагрузить модуль, вызвав нужный метод. например, * +1008 *
<a href="site_controller/cart_add/<?=$item?>">add</a>
Затем в контроллере сайта он просто передает вызов метода в основное представление
<?php
function cart_add($item){
$data['cart'] = 'cart/add/'.$item;
$this->load->view('main', $data);
}
?>
Представление вызовет виджет корзины со следующим:
<?php echo modules::run($cart); ?>
Очевидно, что это упрощенное объяснение, и главный контроллер сайта будет обрабатывать несколько виджетов в одном главном представлении, поэтому передача правильных данных должна управляться лучше, чем просто вызов основного представления из метода. Но, надеюсь, это дает представление о структуре, о которой я говорю.
Если кто-то прочтет это и решит, что я неправ, мне бы хотелось услышать другие решения, которые люди нашли для решения этой проблемы.