Codeigniter HMVC和动态小部件 出身背景

Codeigniter HMVC和动态小部件 出身背景,codeigniter,hmvc,Codeigniter,Hmvc,我使用widget这个词作为一个局部视图,它有自己的控制器,所以它有自己的操作,并且它被放置在几乎所有的页面中。我通过HMVC实现了这个渲染,这非常棒 问题 现在,问题是小部件本身执行操作。考虑一个购物车小部件。该小部件放置在所有页面中,因此用户可以一直看到他/她的东西。小部件具有与之相关的操作,例如:RemoveItem、RefreshCart、ApplyDiscountCouncil等。此类操作应通过按钮或链接触发,且链接应类似于HMVC中的链接: <a href='<?site

我使用widget这个词作为一个局部视图,它有自己的控制器,所以它有自己的操作,并且它被放置在几乎所有的页面中。我通过HMVC实现了这个渲染,这非常棒

问题 现在,问题是小部件本身执行操作。考虑一个购物车小部件。该小部件放置在所有页面中,因此用户可以一直看到他/她的东西。小部件具有与之相关的操作,例如:RemoveItem、RefreshCart、ApplyDiscountCouncil等。此类操作应通过按钮或链接触发,且链接应类似于HMVC中的链接:

<a href='<?site_url()?>/cart/cart/removeitem/the_item_id'>Remove this item</a>
如您所见,我的问题是如何在HMVC模块中加载视图。问题是,如果我只加载购物车视图,它将只显示我的购物车,我不能重定向或加载主页面,因为它可以是任何主页面,也就是说:购物车可以在任何主页面选择产品,继续购买,查看产品详细信息,账单信息,结帐等:/

另一件事:一个要求是我不能在这个项目中使用AJAX

你知道HMVC是怎么处理的吗


提前谢谢。

好的。社区没有运气。尽管如此,我还是找到了解决办法。希望对某人有所帮助

HMVC对此没有天然的解决方案。因此,我决定使用以下解决方法:

在每个主控制器中,也就是说,没有小部件,没有局部视图,我以这种方式获取会话中的当前url/controllers/keep_buying.php:

然后,在我的部分视图小部件HMVC模块视图中,我有一个到我的小部件控制器/modules/cart/views/cart_show.php的正常链接:


就是。这不是IMHO的理想方法,但很管用。

我知道这个话题已经有一年多的历史了,但是我一直在通过谷歌搜索来了解HMVC程序应该采用的结构,以及它如何在CI中实现,并且没有找到太多的答案

我很确定,要使HMVC正常工作,在一个站点的所有页面上都集成了几个小部件,它们需要由一个主控制器进行协调。这将是最高级别的继承权。让我举个例子:

你有一个网站,每个页面上都有一个购物车小部件。当您希望使用购物车功能时,您需要链接到购物车模块中的方法,例如:

<a href="cart/add/<?=$item?>">add</a>
使用此链接的问题在于,您不希望从该模块重新加载站点的其余部分。相反,您可以通过主控制器路由链接,并让它重新加载模块,调用所需的方法。e、 g

<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); ?>
显然,这是一个简化的解释,主站点控制器将在一个主视图中处理多个小部件,因此需要更好地管理传递正确的数据,而不仅仅是从一个方法中调用主视图。但希望这能让我对我所指的结构有所了解

如果有人读到这篇文章并认为我错了,我很乐意听到人们在这个问题上找到的其他解决方案

<a href="cart/add/<?=$item?>">add</a>
<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); ?>