【问题标题】:Codeigniter HMVC asset managmentCodeigniter HMVC 资产管理
【发布时间】:2013-09-14 10:39:16
【问题描述】:

我正在尝试使用 Codeigniter 中的 HMVC。这是我的文件夹结构。

-ROOT
--APPLICATION
---MODULES
----Module_Email
-----Controllers
-----Models
-----Views
-----Assets
------JS
------CSS
------IMG

要渲染我必须使用的模块

Module::run('Module_Email');

这个方法会输出渲染的输出,下面给出一个例子

<script type="text/javascript" src="PATH/TO/EMAIL_MODULE/JS/JS_FILE.JS"></script>
<div data-module-name="Module_Email" class="Email_wrapper">

  //RENDERED HTML CONTENT 

</div>

现在我的问题开始了。通常我想把我所有的资源放到标题中。因此,当我调用任何模块时,需要将其依赖添加到标头中,而不是从调用它的位置添加。

我搜索了很多,但我找不到任何好的方法。

请帮忙。

更新

目前我的标题上有一个名为get_assets() 的函数,它将向标题输出预定义的资源。但是我不能说哪些模块会在页面中使用,所以系统需要检查这个页面中使用了哪些模块,如果使用了,那么它的依赖项需要添加到页眉中。

【问题讨论】:

  • 您使用的是哪个版本的 CI?您是否使用第三方插件运行 HMVC,如果是,是哪一个?你的 get_assets() 函数是你写的吗?你想在那个函数中添加一些东西来检测你正在使用的模块吗?
  • @Brian ii 正在使用wiredesignz codeigniter-modular-extensions。 get_assets() 是我的函数,是的,我希望这个函数将模块的依赖添加到页眉。

标签: php codeigniter hmvc


【解决方案1】:

似乎您的主要问题是试图弄清楚使用了哪些模块。

不幸的是,据我所知,默认的 Wiredesignz 模块化扩展无法访问模块名称,除非您编写某种 hack 来获取该数据。正在使用的模块存储在 MX_Router 类中的受保护变量 $module 中,但是,没有公共方法可以让您访问它。所以你唯一的选择是扩展类并创建一个公共函数。

或者,您可以使用我所做的 Wiredesignz 实现的forked version,它提供了许多其他功能,包括获取 $module 变量的公共函数。使用我编写的分叉版本,您可以使用如下代码:

<?php $module_name = $this->router->fetch_module(); ?>

但是,这只会记录您加载的最后一个模块,因此您仍然需要存储所有模块,然后让您的函数使用此信息来确定要加载的资产。如果我正在做像你这样的事情,我可能会分叉我的版本,然后创建一个额外的数据结构来存储每个加载的模块,以便你以后可以访问。

我不认为这正是您所希望的,但可能会让您走上寻找解决方案的正确轨道。

【讨论】:

    【解决方案2】:

    我在 Module 类中添加了一个数组来存储资产和两个函数来存储/检索项目。这是源代码(更新的 Modules.php)

            # Register your assets
            public static function register_asset( $asset )
            {
               if( in_array($asset,self::$assets) === FALSE )
               {
                  self::$assets[] = $asset;
               }
            }
    
           public static function assets()
           {
                 return self::$assets;
           }
    

    现在你可以像这样在你的模块中注册你的资产

    Modules::register_asset('myslider.js');
    

    您可以使用

    检索所有资产
    Modules:assets();
    

    这将返回一个可以根据情况处理的资产数组。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-05-13
      • 1970-01-01
      • 1970-01-01
      • 2018-08-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-09
      相关资源
      最近更新 更多