【问题标题】:How do you modify Category Forms in Joomla?您如何在 Joomla 中修改类别表格?
【发布时间】:2011-10-26 00:08:26
【问题描述】:

我正在创建一个小插件来修改 Joomla 中的类别表单(在添加/编辑类别视图上)。

我能够使用tutorial on Joomla's site 修改用户个人资料、文章和菜单上的表单;但是,类别似乎无法正常工作。

这是我正在使用的代码:

defined('JPATH_BASE') or die;

class plgContentCategoryType extends JPlugin {

    function onContentPrepareForm($form, $data) {

        // Load plugin language
        $lang = JFactory::getLanguage();
        $lang->load('plg_content_categorytype', JPATH_ADMINISTRATOR);

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

        // Check we are manipulating a valid form.
        if (!in_array($form->getName(), array('com_categories.category'))) {
            return true;
        }

        if ($form->getName()=='com_categories.category') {      
            // Add the fields to the form.
            JForm::addFormPath(dirname(__FILE__).'/forms');
            $form->loadFile('categorytype', false);
        }


    }

 }

这就是表单 XML 的样子:

<form>
    <fields name="params">

        <fieldset name="categorytype" label="PLG_CONTENT_CATEOGRYTYPE_FIELDSET_LABEL">

            <field name="category_type" type="list" label="PLG_CONTENT_CATEGORYTYPE_LABEL" description="PLG_CONTENT_CATEGORYTYPE_DESC">
                <option value=""></option>
                <option value="features">PLG_CONTENT_CATEGORYTYPE_FEATURES</option>
                <option value="columns">PLG_CONTENT_CATEGORYTYPE_COLUMNS</option>
                <option value="spotlights">PLG_CONTENT_CATEGORYTYPE_SPOTLIGHTS</option>
                <option value="slices">PLG_CONTENT_CATEGORYTYPE_SLICES</option>
                <option value="news">PLG_CONTENT_CATEGORYTYPE_NEWS</option>
            </field>

        </fieldset>

    </fields>
</form>

对我做错的任何帮助将不胜感激!就像我说的,它适用于任何其他类型的内容,例如,它适用于菜单,只需要更改代码中的“名称”。

谢谢!

【问题讨论】:

  • 加载文件肯定有问题,你有没有在$form->loadFile()之后尝试var_dump($form->getFieldsets());?跨度>
  • var_dump($form->getFieldsets());什么都不做(我按照你的建议把它放在 loadFile 之后)。我想确保php文件实际上是在正确的页面上运行的,所以我故意写了一个错误,果然,当我去编辑一个类别时,它抛出了错误。然后我又回到了 var_dump,它什么也没做。
  • 就像我之前所说的,我所要做的就是将“com_categories.category”更改为“com_menus.item”,它可以完美地工作,只是在一个菜单上,而不是我想要的类别。所以我知道问题不在于 xml 文件的路径或 xml 文件本身。
  • 对不起,我应该提到你必须停止应用程序以防止重定向,所以使用函数 jexit();在 var_dump(...) 之后;
  • 当我将其更改为菜单并添加 var_dump 时,我得到了一个太多无法在此处发布的转储。这很奇怪,我知道它被包含在类别页面中,因为它会引发错误,但它实际上不会运行该函数。 onContentPrepareForm 不能与类别一起使用吗?

标签: joomla joomla-extensions joomla1.7


【解决方案1】:

实际上,Joomla 2.5 中存在一个错误,导致表单字段未呈现在“编辑类别”页面上。我们最近在我们的网站上添加了一个博客,该博客对此进行了修复。您可以在此处阅读它http://techjoomla.com/joomla-development/adding-custom-fields-to-joomla-categories-in-joomla-25.html

已为此向 Joomla 提交了补丁

【讨论】:

    【解决方案2】:

    我设置了一个测试平台并创建了一个类似的插件。 我回显了 $form->getName() 的值,结果显示为 'com_categories.categorycom_content'

    对此的最佳猜测是,由于类别可以在多个上下文中使用,因此组件被附加在末尾。

    因此,在您拥有“com_categories.category”的两行中,将其替换为“com_categories.categorycom_content”即可。

    【讨论】:

    • 我永远找不到它!所有语法让你相信使用 com_categories.category,很棒的发现!
    猜你喜欢
    • 2011-09-04
    • 2011-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多