我的 Joomla 组件菜单项在哪里?

Posted

技术标签:

【中文标题】我的 Joomla 组件菜单项在哪里?【英文标题】:Where is my Joomla component menu item? 【发布时间】:2014-08-05 21:00:30 【问题描述】:

我正在编写我的第一个 Joomla 组件,在 Joomla 3.3.0 上,遵循本书 Learning Joomla! 3 Extension Development, Third Edition.

我按照作者的建议直接在 Jommla 的文件夹下编写代码,例如\administrator\components\com_coup,其中com_coup 是我的优惠券管理系统组件。我有一个完整的文件夹结构,在一章的最后作者说我应该有一个特定的文件夹和文件结构,并准备好通过 Discovery 安装,Joomla 在Site 中找到了我的组件和Administration,安装管理员似乎很顺利,但Components菜单中没有插入任何菜单项。

我应该发现两个组件,为什么我的菜单项没有插入。我的 `coup.xml' 文件包含以下行:

<administration>
    <menu img="class:categories">COM_COUP_MENU</menu>

并且文本项COM_COUP_MENU 存在于language\en-GB\en-GB.com_coup.sys.ini 文件中。

我的coup.xml 文件是:

<?xml version ="1.0" encoding ="utf-8"?>
<extension type="component" version="3.0" method="upgrade">
    <name>com_coup</name>
    <author>Brady Kelly</author>
    <creationDate>2014-06-14</creationDate>
    <copyright>(C) Erisia Web Development. All rights reserved.</copyright>
    <license>GNU General Public License version 2 or later; see LICENSE.txt</license>
    <authorEmail>brady@bradykelly.net</authorEmail>
    <authorUrl>http://thepraxis.co.za/</authorUrl>
    <version>1.0.0</version>
    <description>COM_COUP_XML_DESCRIPTION</description>
    <scriptfile>script.php</scriptfile>
    <install>
        <sql>
            <file driver="mysql" charset="utf8">sql/install.mysql.utf8.sql</file>
        </sql>
    </install>
    <uninstall>
        <sql>
            <file driver="mysql" charset="utf8">sql/uninstall.mysql.utf8.sql</file>
        </sql>
    </uninstall>
    <files folder="site">
        <filename>index.html</filename>
    </files>
    <administration>
        <menu img="class:categories">COM_COUP_MENU</menu>
        <files folder="admin">
            <filename>index.html</filename>
            <filename>access.xml</filename>
            <filename>config.xml</filename>
            <filename>controller.php</filename>
            <filename>coup.php</filename>
            <folder>controllers</folder>
            <folder>helpers</folder>
            <folder>models</folder>
            <folder>sql</folder>
            <folder>tables</folder>
            <folder>views</folder>
        </files>
        <languages folder="admin">
            <language tag="en-GB">language/en-GB/en-GB.com_coup.ini</language>
            <language tag="en-GB">language/en-GB/en-GB.com_coup.sys.ini</language>
        </languages>
    </administration>
</extension>

而我的en-GB.com_coup.sys.ini 文件是:

COM_COUP="Coup"
COM_COUP_XML_DESCRIPTION="The winning voucher and coupon manager!"
COM_COUP_MENU="Voucher Coup"

【问题讨论】:

【参考方案1】:

它可能在几个不同的地方失败,首先要检查的是您是否将错误报告设置为“Development”(Global Configuration—&gt;Server-&gt;Server Settings)和Debug System打开(@987654325 @),你可能还想打开Debug Language(它就在Debug System下面)。

逐步执行这些是正在发生的步骤(您没有提及任何错误,而且静默失败似乎很不寻常)。

discover() 运行时,它会加载在/libraries/cms/ 中找到的所有installer/adapater/,您已经说过它是一个组件,所以component.php 适配器是相关的。这将循环通过站点和管理员/components/ 目录查找每个组件 xml 文件(即您的coup.xml)。 如果您的 XML 文件中存在问题,这可能会导致错误,但它会在您显然可以运行的安装步骤之前发生。

您的组件被发现两次这一事实可能是问题的一部分……您在站点的/components/com_coup/administrator/components/com_coup 中都有coup.xml 吗? (我们的扩展只在管理端有它们,我可能会删除前端)。

适配器返回一组找到的项目(组件、模块、插件、库等),与#__extensions 中注册的扩展进行比较,任何未列出的项目都将添加到扩展表中,并带有@987654338 @-1。然后“发现”视图会显示找到的项目列表,以便用户选择其中一个或多个并“安装”它们。

discover_install() 基本上运行正常安装(复制文件除外),因此它运行任何安装SQL 文件。

然后它运行_buildAdminMenus() 来添加管理菜单,它会在覆盖之前查看扩展是否已经有一个菜单。

最后,在清单中找到的任何InstallerScript 文件都会运行。

这些阶段中的每一个都可能引发错误 - 但在这种情况下您应该会看到某种错误消息。

我会检查:

    您的 XML 文件验证正确 用于语言文件错误(在启用Debug Languages 时显示在 Joomla 调试控制台中。 检查您在 SQL 控制台中运行的 SQL 安装文件,例如 SequelPro 或 phpMyAdmin 验证您的安装脚本 (php -l /path/to/file.php)

添加您的完整 XML 文件和sys.ini 语言文件也会有所帮助。如果您没有使用过Debug Languages 选项,ini 语言文件可能会很棘手。

【讨论】:

我已将这些文件添加到问题中,并遵循了您的所有建议。一件事是扩展安装在一个空白页面http://localhost/joomla/administrator/index.php?option=com_installer&amp;view=discover 上结束,并在jos_extensions 中插入一个条目。卸载会留下一个空的http://localhost/joomla/administrator/index.php?option=com_installer&amp;view=manage 页面,但不会从jos_extensions 中删除条目。我的 sql 文件是由 myPhpAdmin 生成的。 当您说“空白页面”时,您的意思是浏览器窗口是空白的……如果是这样,那么您在某处遇到了 PHP 错误。很可能在您的安装脚本中。 是的,浏览器是空白的,不是 Joomla 内容区域。我会仔细检查脚本,谢谢。

以上是关于我的 Joomla 组件菜单项在哪里?的主要内容,如果未能解决你的问题,请参考以下文章

“转到类型定义”上下文菜单项在哪里?

开发组件:菜单项出错

Joomla:如何显示非 MVC 组件的菜单特定参数

创建新菜单项时为 joomla 组件创建新选项

joomla 菜单管理器自定义组件

Joomla 3 Widgetkit 未显示在组件菜单中