克隆区块非常简单,即使是猴子也能做到。下面的示例专注于克隆新闻模块中的“最近新闻”区块,尽管该过程对每个区块都应相同。
1. 打开您要克隆区块的模块中的文件 xoops_version.php。路径是:/modules/news/xoops_version.php此文件包含模块中创建所有区块的声明。要克隆“最近新闻”区块,请遍历代码(在 // Blocks 注释下),直到找到其声明,其外观类似于以下内容
$modversion['blocks'][4]['file'] = "news_top.php"; $modversion['blocks'][4]['name'] = _MI_NEWS_BNAME5; $modversion['blocks'][4]['description'] = "Shows recent articles"; $modversion['blocks'][4]['show_func'] = "b_news_top_show"; $modversion['blocks'][4]['edit_func'] = "b_news_top_edit"; $modversion['blocks'][4]['options'] = "published|10|25|0|0|0|0||1||||||"; $modversion['blocks'][4]['template'] = 'news_block_top.html'; // news_block_recent.html
如您所见,每个区块在其声明中分配了一个唯一的数字。最近新闻区块是7个总区块中的第4个,这是在撰写时的模块版本(1.44)。我们将复制此区块,它将成为第8个。
2. 将上述代码复制,并将其粘贴到其他区块声明之后,将模块编号更改为8。粘贴的代码应如下所示$modversion['blocks'][8]['file'] = "news_top.php"; $modversion['blocks'][8]['name'] = _MI_NEWS_BNAME5; $modversion['blocks'][8]['description'] = "Shows recent articles"; $modversion['blocks'][8]['show_func'] = "b_news_top_show"; $modversion['blocks'][8]['edit_func'] = "b_news_top_edit"; $modversion['blocks'][8]['options'] = "published|10|25|0|0|0|0||1||||||"; $modversion['blocks'][8]['template'] = 'news_block_top.html'; // news_block_recent.html
如果您想要,您也可以将“描述”更改为其他内容,例如“显示足球新闻”,或者任何其他内容。
3. 为您的新区块提供一个独特的名称(可选,您可以在区块管理中为它命名任何用户端名称),打开相应的语言文件,例如:/modules/news/language/english/modinfo.php。
遍历 modinfo.php 代码,直到找到区块名称定义,在这个例子中如下所示
// Names of blocks for this module define('_MI_NEWS_BNAME1','News Topics'); define('_MI_NEWS_BNAME3','Big Story'); define('_MI_NEWS_BNAME4','Top News'); define('_MI_NEWS_BNAME5','Recent News'); define('_MI_NEWS_BNAME6','Moderate News'); define('_MI_NEWS_BNAME7','Navigate thru topics');
为您的新的区块添加另一个定义,并使用一个唯一的数字,例如
define('_MI_NEWS_BNAME9','Yet another news block');
(我使用数字“9”的原因是 xoops_version.php 中的一个区块已经使用8,尽管在语言文件中没有相应的条目。我不知道原因——但是无论如何,重要的是要使用一个唯一的数字)。
4. 保存并上传您修正后的 xoops_version.php 文件。5. 更新模块以使新区块可用。转到管理 =》 系统模块 =》 模块,然后为新闻模块按“更新”按钮。这将重新编译模板。您应该在结果屏幕上看到列出为创建的新区块。
6. 现在,新的区块应该在 管理 =》 系统 =》 区块 中可用。您可以像任何其他区块一样处理它。
其他事项。7. 为您的模块创建自定义模板(如果您需要的话),您可以为您的新模块创建一个自定义模板。如果我们回到我们克隆的“最近新闻”模块声明的最后一行:
$modversion['blocks'][8]['template'] = 'news_block_top.html'; // news_block_recent.html
步骤如下:i) 制作相关模板的副本,本例中为news_block_top.html,并使用新名称,如‘news_block_football.html’;ii) 进行必要的更改;iii) 修改代码,本例中代码应读取
$modversion['blocks'][8]['template'] = 'news_block_football.html'; // news_block_football.html
如果您不为新模块创建单独的模板(您不必这样做),那么您对原始模块模板所做的任何更改也将影响克隆体。
克隆模块的应用案例。1. 允许您在不同模块的不同位置定位模块。
2. 一些模块,如最近新闻(论坛模块中的最近帖子)允许您根据类别筛选其内容(此功能可通过模块管理中的“编辑模块”链接访问)。因此,您可以为拥有每个类别创建一个“最近新闻”模块。如果您将此功能与可复制内容的模块(如TinyD)结合起来,您可以在不进行任何主要或危险修改的情况下,有效地在您的网站上创建主题特定的子门户!
模块克隆
感谢这个FAQ...节省了我很多时间