我使用单词widget作为具有自己的控制器的部分视图(所以它自己的动作),它几乎放在所有页面中.我通过HMVC实现了这个渲染,这很棒.
现在,问题是小部件本身执行操作.想想购物车小部件.该小部件放置在所有页面中,因此用户可以一直看到他/她的东西.并且窗口小部件具有与其相关的操作,例如:RemoveItem,RefreshCart,ApplyDiscountCoupon等.此类操作应该由按钮或链接触发,并且链接应该类似于(在HMVC中):
<a href='<?site_url()?>/cart/cart/removeitem/the_item_id'>Remove this item</a>
Run Code Online (Sandbox Code Playgroud)
好.现在,用户单击该链接,已加载购物车模块和购物车控制器并执行操作,操作应如下所示:
function removeitem($itemid)
{
// remove the item from db
...
// "load the view" ???
}
Run Code Online (Sandbox Code Playgroud)
如您所见,我的问题是如何在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());
}
...
}
Run Code Online (Sandbox Code Playgroud)然后在我的部分视图小部件(HMVC 模块视图)中,我有一个到小部件控制器的正常链接(/modules/cart/views/cart_show.php):
<a class="button" href="cart/cart/additem">Add Item</a>
Run Code Online (Sandbox Code Playgroud)在控制器操作(HMVC 模块控制器操作)中,我检索当前主页,执行操作,然后重定向到该页面,这将隐式进入我的小部件流(由于 HMVC)。
class Cart extends Controller
{
...
function additem()
{
$to_redirect = $this->session->userdata('main_uri');
// add-item work stuff...
redirect($to_redirect);
}
}
Run Code Online (Sandbox Code Playgroud)那是。恕我直言,这不是理想的方法,但很有效。
| 归档时间: |
|
| 查看次数: |
2497 次 |
| 最近记录: |