如何在 Joomla 的模块内使用自定义字段?

How to use a custom field inside a module in Joomla?

好的,这不是一个问题,更多的是一个答案,因为我实际上在调试之前没有找到具体的响应!

TLDR:始终按照应有的方式命名您的 class!

所以我是 Joomla 的新手,我个人很讨厌它,但这就是我的本性,我宁愿在构建我的网站时不使用 cms。 无论如何,我正在创建一个模块,因为我实际上需要逻辑并且我受够了用 JS 填充所有内容,然后我遇到了一个奇怪的情况,我实际上需要确保下一个网站管理员的输入不是一些垃圾。那时我说该死,我怎么能在不创建更多的情况下在我的模块中创建一个自定义字段?答案很简单,只需按照本指南操作即可:https://docs.joomla.org/Creating_a_custom_form_field_type 对吗?

好吧,这很简单,不清楚的是如何实际使用您创建的自定义字段,当然,快速解决方法是将其移至 libraries\joomla\form\fields,但我只是忘记了一些东西,如果你命名不正确,joomla 不知道如何注册东西。举个例子:

<?php
defined('_JEXEC') or die('Restricted access');

JFormHelper::loadFieldClass('list');

class JFormFieldyear extends JFormFieldList
{
    protected $type = 'Year';

    public function getOptions() {
        $years= array();
        for ($i= date("Y");$i>1800;$i--){
            array_push($years,array('value' => $i, 'text' => $i));
        }
        // Merge any additional options in the XML definition.
        $options = array_merge(parent::getOptions(), $years);
        // preselect last year
        $this->value = array( date("Y"));

        return $options;
    }
}

你有没有发现什么不对?好的,我会给你一个提示,class 名称没有正确的 CamelCase。但是,是的,为什么这很重要?好吧,默认情况下引入 Joomla 注册表,它将使用 文件名 和 Case 并为其添加前缀以确保其加载的是正确的 class。

好吧,也许我有点太快了!您需要将您的自定义字段(或表单)放在此处的文件名中 year.php 然后您使用驼峰大小写和正确的前缀正确命名 class 并指定一个可以是任何类型的类型,因为 Joomla i猜猜

无论如何如何在本地集成它?很简单,把你的新 year.php 放在你模块的任何地方,然后在你的主 xml 中你放置配置的地方就这样做:

<config>
        <fields name="params">
            <fieldset name="basic">
                <field addfieldpath="/modules/<your_module_name>/<the_folder_chain_where_you_put_year.php>" name="<an_unique_id>" type="year" description="<whatever_maybe_use_an_ini>" label="<whatever_maybe_use_an_ini>" (showon="<other_id>:<other_value>" multiple="multiple")/>
           </fieldset>
       </fields>
</config>

你注意到我使用注册位置的 addfieldpath(但如果你没有在 class 或 php 文件的文件名上正确命名,那么该类型将不执行任何操作或默认到文本)然后我输入一个名称(id)和公平的类型可以是 Year YeAr YeaR(任何大写)。 对我来说,这看起来很有趣,因为在 Joomla 上注册太糟糕了,我肯定更喜欢通过自定义字段内的类型变量注册,这是区分大小写的,但是是的,我想这就是为什么使用记录不完整的 cms 不是你的选择...

TLDR: 自定义字段:https://docs.joomla.org/Creating_a_custom_form_field_type 将 php 文件放在模块中的任何文件夹中,将其命名为小写的类型,然后将 class 命名为 JFormField (第一个字母大写)在您的 xml 中包含带有 addfieldpath 的路径,并将类型指定为 php 文件名称的任何大小写。

干杯,

尼尔

TLDR:自定义字段:https://docs.joomla.org/Creating_a_custom_form_field_type 将 php 文件放在模块中的任何文件夹中,将其命名为您想要的小写类型,并使用 JFormField 将其中的 class 命名为(首字母大写)然后在您的 xml 中包含带有 addfieldpath 的路径,并将类型指定为 php 文件名称的任何大小写。