我正在使用 Joomla 2.5 构建一个中型网站,我决定通过自动创建菜单来缓解维护和内容管理的难题。
我一直在寻找这样做的扩展,但只找到了 Joomla 1.5 扩展。我最终尝试升级一个名为 Auto Menu Magic 的 GPL 扩展。
处理扩展文件中的 XML 标签等基本问题很容易,因为 Joomla 中有一个页面可以帮助您从 Joomla 1.5 迁移到 1.6。
我提到的扩展有一个名为 onContentAfterSave 的函数,它在保存文章时由 joomla 调用。我一直在通过在管理界面中创建垃圾文章并更改代码以在多个地方抛出异常进行调试,我可以在管理前端看到错误消息。
这就是我卡住的地方:
$db = &JFactory::getDBO();
$menu = JTable::getInstance( 'menu');
$menu->menutype = $menutype;
$menu->name = $name;
$menu->link = $link;
$menu->type = $linktype;
$menu->published = $published;
$menu->componentid = $componentid;
$menu->parent = $menuparentid;
$menu->sublevel = $menusublevel;
$menu->checked_out = 0;
$menu->checked_out_time = 0;
$menu->pollid = 0;
$menu->browserNav = 0;
$menu->access = 0;
$menu->utaccess = 0;
$menu->lft = 0;
$menu->rgt = 0;
$menu->home = 0;
$menu->params = $params;
// Figure out the order (Just pop this article at the end of the list):
$menu->ordering = $menu->getNextOrder(
"menutype = ".$db->Quote($menu->menutype).
" AND published >= 0 AND parent = ".(int) $menu->parent
);
// Validate:
if (!$menu->check())
return NULL;
// DEBUG 2 -- Integrity check
throw new Exception ("menutype: $menutype, name: $name, link: $link published: $published, componentid: $componentid menuparentid: $menuparentid menusublevel: $menusublevel");
// Save:
if (!$menu->store())
return NULL;
// DEBUG 1
throw new Exception(" Could save! ");
正如您在上面看到的,当菜单保存到数据库时,我尝试抛出异常(DEBUG 1)。从未达到此异常,但达到了上层异常 (DEBUG 2)。这意味着 $menu->check() 返回 true,而不是 $menu->store()。我假设数据库返回一个错误,因为 Joomla 数据库结构的一些可能在 1.5 之后发生了变化。
在过去的几个小时里,我已经阅读了很多资料,但我找不到一件事。如何查看 Joomla 表使用的列,以便正确调试此错误?
提前致谢!
PS:我也看过SQL数据库,但没有多大帮助。这些变量似乎与列名有不同的命名约定。