教程:教程:如何更新表格以遵循XOOPS的新命名方案?
发布者: MambaOn 2013/3/5 4:20:00 6457次阅读如您可能已知道,我们现在致力于标准化模块开发——从使用相同的模块Admin GUI结构,到使用跨所有模块相同的图标,从为每个表格使用相同的分页结构,到以一致的方式命名表和字段(参见此帖)。本教程将向您展示如何修改您的模块,使其在用户更新模块时能够在用户网站上重命名表。这将遵循由alain01提出的方案。新的表命名方案是:mod_AAA_BBBB,其中AAA是模块名称,BBB是表名。例如,在我们的新闻模块中有一个名为"topics"的表,在新闻的新更新版本中,它将变为:mod_news_topics以下是一些步骤,这最近在名为"animal"的谱系模块中使用:1) 新版本必须在SQL文件中正确定义表,以便新的安装能够立即安装正确的表。2) 在现有的安装中,用户通常复制文件,然后在管理员中运行"更新"。因此,我们需要添加一个包含更新的文件,我们将其称为"update_function.php",并将其放置在"include"文件夹中。3) 为了让XOOPS调用此文件,我们将在xoops_version.php文件中添加以下内容:
$modversion['onUpdate'] = 'include/update_function.php';
函数 tableExists($tablename)
{
global $xoopsDB;
$result=$xoopsDB->queryF("SHOW TABLES LIKE '$tablename'");
return($xoopsDB->getRowsNum($result) > 0);
}
函数 xoops_module_update_animal()
{
global $xoopsDB;
if (tableExists($xoopsDB->prefix('eigenaar'))) {
$sql = sprintf(
'ALTER TABLE ' . $xoopsDB->prefix('eigenaar') . ' RENAME ' . $xoopsDB->prefix('mod_pedigree_owner')
);
$result = $xoopsDB->queryF($sql);
if (!$result) {
echo '
' . _AM_PED_UPGRADEFAILED . ' ' . _AM_PED_UPGRADEFAILED2;
$errors++;
}
}
return TRUE;
}