HMVC和动态小部件

Dav*_*ndo 5 codeigniter hmvc

背景

我使用单词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怎么处理这个吗?

提前致谢.

Dav*_*ndo 1

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

HMVC 对此没有自然的解决方案。所以我决定使用这个解决方法:

  1. 在每个主控制器(即没有小部件,没有部分视图)中,我以这种方式获取会话中的当前 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)
  2. 然后在我的部分视图小部件(HMVC 模块视图)中,我有一个到小部件控制器的正常链接(/modules/cart/views/cart_show.php)

    <a class="button" href="cart/cart/additem">Add Item</a>  
    
    Run Code Online (Sandbox Code Playgroud)
  3. 在控制器操作(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)

那是。恕我直言,这不是理想的方法,但很有效。