gpt4 book ai didi

joomla - 在我的 Joomla 组件首选项中为表单域定义过滤函数的位置

转载 作者:行者123 更新时间:2023-12-05 01:11:36 25 4
gpt4 key购买 nike

我正在 Joomla 2.5 中创建一个组件。该组件有一些选项在其 config.xml 中定义,因此可以在组件的首选项中进行设置。现在,我想使用属性 filter="my_filter" 对这些选项字段之一应用过滤器。

在 JForm 的源代码中,我在 JForm::filterField() 实现的最后看到了以下几行:

if (strpos($filter, '::') !== false && is_callable(explode('::', $filter)))
{
$return = call_user_func(explode('::', $filter), $value);
}
elseif (function_exists($filter))
{
$return = call_user_func($filter, $value);
}

这就是我使用自己定义的过滤器函数所需要的!

我设法对组件 View 中使用的表单字段执行此操作。我将过滤器函数定义为 MyComponentHelper::my_filter(),其中 MyComponentHelper 是一个辅助类,我总是将其加载到组件的最底层。在表单的 xml 中,我将 filter="MyComponentHelper::my_filter" 添加到必须过滤的字段中。但是......当我尝试将过滤器功能应用于我组件首选项中的表单字段时,我不在我自己的组件中,而是在 com_config 中,所以我的助手类不可用!

因此,我的问题是:在哪里定义我自己的过滤器函数,以便它可以被 JForm::filterField()com_config??非常感谢您的帮助。

最佳答案

可能来不及了,这个话题只是我发现的那个麻烦。可能是我的解决方案对某人有帮助。1) 添加到 .xml 表单文件的标签中,像这样添加属性 'addfieldpath':

<fieldset name="basic" addfieldpath="PATH_TO_MY_EXTENSION/models/fields">

2) 像这样修改过滤字段描述:

<field
name="MY_FIELD_NAME"
type="myfildtype"
label="MY_FIELD_LABEL"
description="MY_FIELD_DESC"
filter="JFormFieldMyFieldType::filter"
/>

3) 创建文件“PATH_TO_MY_EXTENSION/models/fields/myfildtype.php”:

<?php
defined('JPATH_PLATFORM') or die;
JFormHelper::loadFieldClass('text'); // or other standard Joomla! field type

class JFormFieldMyFieldType extends JFormFieldText // or other standard Joomla! field type class
{
protected $type = 'MyFieldType';

public static function filter($value)
{
// filter code
return $value;
}
}

关于joomla - 在我的 Joomla 组件首选项中为表单域定义过滤函数的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19903174/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com