我正试着在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()的函数,它将向标头输出预定义的资源。但是我不能说哪些模块将在页面中使用,因此系统需要检查在这个页面中使用了哪些模块,如果使用了这些模块,则需要在标头上添加它的依赖项。
发布于 2013-09-18 04:39:31
我向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();它将返回一组可根据情况处理的资产。
发布于 2013-09-17 01:35:55
似乎你的主要问题是试图找出哪些模块被使用。
不幸的是,据我所知,默认的Wiredesignz模块扩展无法访问模块名,除非您编写某种黑客来获取该数据。所使用的模块存储在MX_Router类中的受保护变量MX_Router中,但是没有允许您访问它的公共方法。因此,您唯一的选择是扩展类并创建一个公共函数。
或者,您可以使用Wiredesignz实现的分叉版本,这是我所做的,它提供了许多其他特性,包括一个公共函数来获取$module变量。使用我编写的分叉版本,您可以使用如下代码:
<?php $module_name = $this->router->fetch_module(); ?>但是,这只会记录您加载的最后一个模块,因此您仍然需要做一些工作来存储所有模块,然后让您的函数使用这些信息来确定要加载的资产。如果我在做类似于您的事情,我可能会对我的版本进行分叉,然后创建一个额外的数据结构来存储每个加载的模块,然后您可以访问这些模块。
我不认为这正是你所期望的,但可能会让你走上正确的轨道,找到一个解决方案。
https://stackoverflow.com/questions/18800880
复制相似问题