Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Codeigniter HMVC资产管理_Php_Codeigniter_Hmvc - Fatal编程技术网

Php Codeigniter HMVC资产管理

Php Codeigniter HMVC资产管理,php,codeigniter,hmvc,Php,Codeigniter,Hmvc,我想在Codeigniter中给HMVC打一针。这是我的文件夹结构 -ROOT --APPLICATION ---MODULES ----Module_Email -----Controllers -----Models -----Views -----Assets ------JS ------CSS ------IMG 要渲染模块,我必须使用 Module::run('Module_Email'); 此方法将输出渲染输出,下面给出了一个示例 <script type="text/j

我想在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>

//呈现的HTML内容
现在我的问题开始了。通常我想把我所有的资源放在标题中。所以,当我调用任何模块时,它的依赖关系需要添加到头中,而不是从调用它的地方

我找了很多,但找不到任何好方法

请帮忙

更新
目前,我的头上有一个名为
get_assets()
的函数,它将向头输出预定义的资源。但我不能说哪些模块将在页面中使用,因此系统需要检查此页面中使用了哪些模块,如果使用了,则需要在页眉上添加其依赖项。

似乎是您的主要问题,然后尝试找出使用了哪些模块

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

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

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

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


我不认为这正是您所希望的,但可能会帮助您找到正确的解决方案。

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

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

Modules::register_asset('myslider.js');
您可以使用

Modules:assets();

这将返回一组可根据情况进行处理的资产。

您使用的是什么版本的CI?您是否使用第三方插件运行HMVC,如果是,是哪一个?get_assets()函数是您编写的吗?你想在这个函数中添加一些东西来检测你正在使用的模块吗?@Brian ii正在使用wiredesignz codeigniter模块扩展
get_assets()
是我的函数,是的,我希望此函数将模块的依赖性添加到页眉。
Modules:assets();