【问题标题】:Adding new field in article manager in frontend of Joomla 3.0在 Joomla 3.0 前端的文章管理器中添加新字段
【发布时间】:2013-09-09 13:09:07
【问题描述】:

我正在尝试在 joomla 前端的新文章中添加新字段,如下所述:http://docs.joomla.org/Adding_custom_fields_to_the_article_component

但这些字段未显示在表单上。谁能解释一下原因?

以下是我在插件文件中编写的代码:

function onContentPrepareForm($form, $data)
{
    if (!($form instanceof JForm))
    {
        $this->_subject->setError('JERROR_NOT_A_FORM');
        return false;
    }

    // Add the extra fields to the form.
    // need a seperate directory for the installer not to consider the XML a package when "discovering"
    JForm::addFormPath(dirname(__FILE__) . '/rating');
    $form->loadFile('rating', false);
    return true;
}

我观察到的一件事是,在组件内部的 com_content 文件夹中,编写了固定代码,这就是为什么我的字段不可见的原因。如果我更改文件可以吗:\components\com_content\views\form\tmpl

【问题讨论】:

  • 假设您没有逐字使用文档中的代码,您应该发布您的插件代码。您的插件很可能没有正确注册。安装了吗?启用?我会在插件代码中直接执行 var_dump 或 exit 语句,以确保它甚至正在运行。
  • @DavidFritsch 我添加了我的代码段,如果你能帮忙的话!
  • @DavidFritsch 我的插件已安装、启用并正在执行,我已经使用 die() 对其进行了测试。
  • 所有插件文件中的代码吗?
  • @DavidFritsch 是的,我在问题中复制的代码来自我的插件文件 rating.php

标签: forms joomla3.0


【解决方案1】:

我发现教程中还有另一个错误,至少与我的 Joomla 版本有关,即 2.5.14。

在你的/rating/rating.xml(表单描述,而不是清单)你需要改变“

<fields name="rating">

<fields name="attribs">

为了让插件工作,使用“attribs”名称有一些特别之处。

【讨论】:

  • 谢谢,这很有用。我试图让它在 Joomla 3.1 中工作,这修复了管理员编辑屏幕,使字段显示出来。还是看不到前端编辑和前端查看的字段。
  • @Joel ,它可以在后端工作,但还不能在前端工作。如果可以的话,请做必要的事情。
【解决方案2】:

根据上面 cmets 中的对话,我认为您的教程构建得很差。好吧,文档从来没有说明这一点,您实际上必须将此函数包装在一个类中,以便 CMS 正确调用该函数。

即使没有类包装器,文件也会被加载到 CMS 中,因此如果您在函数外部放置 dieexit 语句,您应该会看到它有效。如果你把它放在函数中,它就不会被调用,因为你的函数永远不会被调用。

您可以从教程底部或此处引用的教程下载完整插件:http://joomlacode.org/gf/download/trackeritem/28771/75013/plg_content_rating-2.5.0.zip。如果您查看此内容,您将看到实际运行所需的额外部分。我也在下面包含它。

任何其他功能也必须在课堂上进行。此外,如果您完全更改了插件的名称,则还需要更新类名。这可能非常棘手,因为命名约定非常严格,并且要求插件名称 (rating) 和插件组 (content) 都是正确的。

代码:

class plgContentRating extends JPlugin
{
    function onContentPrepareForm($form, $data)
    {
        if (!($form instanceof JForm))
        {
            $this->_subject->setError('JERROR_NOT_A_FORM');
            return false;
        }

        // Add the extra fields to the form.
        // need a seperate directory for the installer not to consider the XML a package     when "discovering"
        JForm::addFormPath(dirname(__FILE__) . '/rating');
        if (!$form->loadFile('rating', false)) {
            die('No Form');
        }
        return true;
    }
}

*更新:好的,所以这不仅仅是缺少的课程,但我要离开它以防万一它可以帮助其他人。

我更新了上面的代码来检查 loadFile 是否正常工作。

【讨论】:

  • 哦,是的,我当然用过一个类!我只在课堂上写这个。当我添加 die('testing'); 时,它会显示出来。这意味着当我单击创建新文章链接时正在调用该事件。问题是没有显示我在 rating/rating/rating.xml 文件中添加的字段。
  • 那很好。我完全可以看到你如何从教程中跳过它,它仍然会加载插件文件并运行......下一步可能是对 LoadFile 本身进行一些检查。如果文件未加载,它应该返回 false。这应该告诉你它是没有找到文件还是没有呈现。
  • 但是当我在这个事件中写print_r($form) 时,我得到了该字段进行评级。因此,我的字段是使用 LoadFile 加载的。但问题在于视图文件:\components\com_content\views\form\tmpl\edit.php
猜你喜欢
  • 1970-01-01
  • 2013-05-28
  • 2011-10-29
  • 2012-10-20
  • 1970-01-01
  • 2023-03-04
  • 2012-08-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多