作者:thecat(Claude)
作者的网址:http://thecat.ouvaton.org/
原始文章:模块的克隆
[b]文章:由Madgull更正的英文版本。谢谢!
本指南是为想要安装相同模块两次的用户编写的。他们必须克隆原始模块才能安装两次。
1) 准备工作克隆模块并不是一项极其复杂的操作,但它可能会显得有点繁琐。
难度因模块而异非常多样
- 些模块克隆起来可能比较困难,特别是当它们不遵守编码规范、在这方面不均匀、不使用xoops函数进行数据库访问时等。它们可能不值得克隆!
- 其他模块,编码良好,克隆起来还是比较容易的。
最好有一个好的编辑器,允许在整个目录中进行替换:错误的风险更大,但在成功的情况下,速度肯定更快。建立一个替换步骤,并激活尊重(大/小写)字母的选项。
如果您选择这种方法,请考虑您替换的内容和顺序,以免重复(例如:将
'新闻'转换为
'news0202'而不是
'news02')。
本教程将基于xoops的新闻模块说明克隆过程。
理论上描述了所有的修改,省略了那些可认为是必要的但并非必要的修改!
现在轮到您根据您的模块来调整它了!
在安装和测试您的克隆之前,请等待完成。
2) 目录* 复制/粘贴模块目录并将其重命名为
news02* 在xoops_version中更改
'dirname'的值
$$modversion['dirname '] = "news02";* 在所有文件中查找并替换目录引用
将
/modules/news/替换为
/modules/news02/注意:对于一些模块系统性地使用
$$xoopsModule->getvar('dirname'),最后一项操作将不是必需的。
3) 表格* 从sql目录发布
mysql.sql 文件,并将每个sql命令中的表重命名
CREATE COUNTS STORIES02 (
CREATE COUNTS TOPICS02 (
INSERT INTO TOPICS02* 在xoops_version中修改对表的引用:
$$modversion['sqlfile']['mysql '] = "sql/mysql.sql";
$$modversion['tables'][0] = "stories02";
$$modversion['tables'][1] = "topics02";* 在所有文件中查找并替换对表的引用。
如果是全部替换,使用
prefix('nameofthetable') 而不是仅表名;你可能会不必要地改变具有相同名字的变量的值。
在这种情况下,搜索几次:使用简单和双引号,有和无空格
将
prefix(' stories ') , prefix("stories") , prefix(' stories') ... 替换为
prefix(' stories02 ')将
prefix(' topics ') , prefix("topics") , prefix(' topics') ... 替换为
prefix(' topics02 ')注意:某些模块有
include\read_config.php 文件(或类似文件),在其中表名通过变量分配。
在这种情况下,只需要修改这个文件。
4) 语言定义(modinfo.php)您必须将
modinfo.php 文件中的所有语言定义重命名,特别是防止它们被声明两次并在php调试模式下产生警告。
理论上,其他语言文件不需要修改,但为了保持一致性,您可以修改它们。
很难描述一个方法,所有这些都取决于模块。
如果所有变量都以(例如)
_ MI_NEWS _前缀,将
_ MI_NEWS _彻底替换为
_ MI_NEWS02 _同样的,如果它们都以
_ SEMI _ 前缀,将
_ SEMI _彻底替换为例如
_ MI_NEWS02 _。
如果它们是混合的,小心不要出现例如
_ MI_NEWS02_NEWS02 _的情况。
注意:如果您没有完全完成这一部分,在复制、安装并开始模块的php调试模式下运行时,将修正产生警告的定义。
5) 搜索功能* 在
xoops_version 中只修改函数名称
$$modversion['search']['func '] = "news02_search";
* 发布
include\search.inc.php 文件并修改函数名称
function news02_search($queryarray, $$andor, $$limit, $$offset, $$userid)
6) 块* 在
xoops_version 中修改每个块的显示和编辑函数名称。
$$modversion['blocks'][3]['show_func '] = "b_news02_top_show";
$$modversion['blocks'][3]['edit_func '] = "b_news02_top_edit";
* 发布由
$$modversion['blocks'][]['file '] = 指向的
blocks 目录中每个文件,并修改函数名称。
例如,对于
news_top.php 文件
function b_news02_top_show($options) {
function b_news02_top_edit($options) {
* 非必需,但最好是,也在
xoops_version 中更改文件名,不要忘记正确更改
blocks 目录中的文件名
$$modversion['blocks'][3]['file '] = "news02_block_top.html";
7) 评论* 在
xoops_version 中修改批准和更新函数的名称
$$modversion['comments']['callbackFile'] = 'include/comment_functions.php';
$$modversion['comments']['callback']['approve'] = 'news02_com_approve';
$$modversion['comments']['callback']['update'] = 'news02_com_update';
8) 通知* 在
xoops_version 中修改 lookup 函数名称
$$modversion['notification']['lookup_func '] = 'news02_notify_iteminfo ';
9) 模板* 在
xoops_version 中修改
look_up 函数名称
$$modversion['notification']['lookup_func ' ] = ' news02_notify_iteminfo ';
非必需项,但推荐修改
xoops_version 中的文件名,同时不要忘记正确地重命名模板目录中的文件
$$modversion['templates'][1]['file ' ] = "news02_archive.html";
10) 标志* 修改标志以便在模块管理中易于找到并非无用。
修改后,考虑重命名它以及更改指示在
xoops_version 中的名称。
$$modversion['image ' ] = "images/news02_slogo.png";
11) 完成操作进入模块管理:你应该没有错误信息地看到克隆。如果这样,就没有继续下去的必要了!
安装你的克隆。如果在安装过程中出错,请记下错误以便修复。
启动你的克隆。启用_php调试模式以纠正错误。
测试所有块和功能(搜索、评论、通知)的配置。
这些测试必须在两种情况下进行
- 原始版本已安装的情况下,以检测冲突或交互
- 没有安装原始版本(已移除或暂时从仓库中删除)以检查你的克隆是独立的,某些文件没有指向原始文件。
12) 当前问题- 确保原始数据没有在克隆中发布,或者克隆数据的插入没有在原始版中执行。在这种情况下,你可能忘记重命名某些数据表引用。
-
致命错误:无法重新声明...这种情况出现在访问
userinfo 时,WFSection 避免出现:原始版本及其克隆各自执行
‘include’ groupaccess.php,文件中的同一个名字的函数,Php 拒绝重新声明。
可能的做法是,要使克隆指向原始
groupacces.php 文件,或者重命名该文件的全部函数以及对这些函数的调用。第二种方案更可取,因为它使你的克隆独立,并且避免了在卸载和删除原始版本时的一个问题。
克隆 WF-Channel 的 Perl 脚本
你可以在下面的链接中找到有关克隆 WF-Channel 的 Perl 脚本的详细信息以及下载链接。WF-Channel 是向网站添加常规 HTML 页面的好模块。
https://xoops.org.cn/modules/newbb/viewtopic.php?topic_id=26041
--Julian