背景
我使用“小部件”一词作为具有自己的控制器(因此有自己的操作)的部分视图,并且它几乎放置在所有页面中。我通过 HMVC 实现了它的渲染,这非常棒。
Problem
现在的问题是小部件本身执行操作。考虑一下购物车小部件。该小部件被放置在所有页面中,以便用户可以一直看到他/她的东西。小部件具有与其相关的操作,例如:RemoveItem、RefreshCart、ApplyDiscountCoupon 等。此类操作应由按钮或链接触发,并且链接应类似于(在 HMVC 中):
<a href='<?site_url()?>/cart/cart/removeitem/the_item_id'>Remove this item</a>
好的。现在用户单击该链接,加载购物车模块和购物车控制器并执行操作,该操作应类似于:
function removeitem($itemid)
{
// remove the item from db
...
// "load the view" ???
}
如您所见,我的问题是如何在 HMVC 模块中加载视图。问题是,如果我只加载购物车视图,它只会显示我的购物车,并且我不能只重定向或加载主页,因为它可以是任何主页,也就是说:购物车可以位于任何主页中(选择产品、继续购买、查看产品详细信息、账单信息、结帐等)。 :/
另外一件事:一个要求是我不能在这个项目中使用AJAX。
你知道 HMVC 如何处理这个问题吗?
提前致谢。
好的。社区没有运气。尽管如此,我还是找到了一个解决方法。希望对某人有帮助。
HMVC 对此没有自然的解决方案。所以我决定使用这个解决方法:
-
在每个主控制器(即没有小部件,没有部分视图)中,我以这种方式获取会话中的当前 url(/controllers/keep_buying.php):
class Keep_buying extends Controller
{
function Keep_buying()
{
parent::Controller();
$this->session->set_userdata('main_uri', uri_string());
}
...
}
-
然后在我的部分视图小部件(HMVC 模块视图)中,我有一个到我的小部件控制器的正常链接(/modules/cart/views/cart_show.php):
<a class="button" href="cart/cart/additem">Add Item</a>
-
在控制器操作(HMVC 模块控制器操作)中,我检索当前主页,执行操作,然后重定向到该页面,这将隐式进入我的小部件流(由于 HMVC)。
class Cart extends Controller
{
...
function additem()
{
$to_redirect = $this->session->userdata('main_uri');
// add-item work stuff...
redirect($to_redirect);
}
}
那是。恕我直言,这不是理想的方法,但很有效。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)