Joomla 表单字段类型 sql="....WHERE 条件"?

Posted

技术标签:

【中文标题】Joomla 表单字段类型 sql="....WHERE 条件"?【英文标题】:Joomla Form field type sql="....WHERE condition"? 【发布时间】:2012-09-20 21:08:38 【问题描述】:

在 Joomla 2.5 中,如何在 SQL 查询中使用条件“WHERE”执行表单字段类型“SQL”?

例子:

<field name="catid" type="sql" query="SELECT id, title FROM #__table WHERE condition" />

joomla 文档中没有关于此的任何内容。我找到了这个链接,但它没有提到在 SQL 查询中使用 WHERE 条件的任何内容(http://docs.joomla.org/SQL_form_field_type)。

谁能告诉我这在 Joomla 中是否可行?

我有一张包含产品的表格和一张包含与品牌相关的商店的表格。如果我编辑一家商店,我想显示一个包含该商店品牌所有产品的组合框。那可能吗? SELECT * FROM #__products WHERE brand = 与我选择进行编辑的商店关联的品牌 ID 这可能吗?

我可以使用自定义表单字段来做到这一点 =)

http://docs.joomla.org/Creating_a_custom_form_field_type

感谢 RHR 的回答!

【问题讨论】:

【参考方案1】:

这是我的解决方案:

您可以通过执行以下操作完全替换查询:

1)定义你的查询:

$query = 'SELECT * from table_name WHERE table_id = '.$your_value;

2) 更新表单字段属性:

$this->form->setFieldAttribute('field_name', 'query', $query);

【讨论】:

【参考方案2】:

是的,有可能

我使用的代码

<fields name="request">
 <fieldset name="request" >
<field name="id" type="sql" query="SELECT id , title FROM #__table name where published=1" multiple="single" key_field="id" value_field="title" class="inputbox" label="fieldlabel" description="fielddesc" required="true" />
</fieldset> 
</fields>

您可以通过 custom field 以其他方式执行此操作

【讨论】:

感谢您的回答。但我的问题是我可以做这样的事情吗?我有一张带有产品的桌子和一张带有与品牌相关的商店的桌子。如果我编辑一家商店,我想显示一个包含该商店品牌所有产品的组合框。那可能吗? SELECT * FROM #__products WHERE brand = 与我选择进行编辑的商店关联的品牌 ID 这可能吗?谢谢!【参考方案3】:

刚刚遇到同样的问题。经过一番挖掘,我发现它实际上是可能的。

1.步骤 - 您需要一个自定义表单字段:(我将其命名为 vssql.php)

JFormHelper::loadFieldClass('sql');

class JFormFieldVSSQL extends JFormFieldSQL

    /**
     * The form field type.
     */
    public $type = 'VSSQL';

    /**
     * Overrides parent's method
     */
    protected function getOptions()
    
        // Get the ID
        $query_id = $this->form->getField((string) $this->element['query_id']);

        // Override query
        $this->element['query'] = str_replace('query_id', (string) $query_id->value, (string) $this->element['query']);

        return parent::getOptions();
    

2。步骤 - 你需要知道热才能使用它:

在你的 JForm xml 中添加:

在您的 SQL 查询中,占位符 query_id 将替换为 query_id 中指定的参数的实际值,在本例中为 *user_id*。这将从分配给给定用户的某个表中返回地址列表

【讨论】:

【参考方案4】:

@WooDzu 解决方案的一些更新:

class JFormFieldICategory extends JFormFieldSQL


    public $type = 'ICategory';

    /**
     * Overrides parent's method
     */
    protected function getOptions()
    
        // Get the ID
        $cat_id = $this->form->getField((string) $this->element['cat_id']);

        // Override query
        $this->query = str_replace('cat_id', (string) $cat_id->value, (string) $this->element['query']);
        echo $this->query.' test '; //exit();

        return parent::getOptions();
    

类型应该是公开的并且查询应该分配给$this->query。 效果很好!

【讨论】:

【参考方案5】:

这在 Joomla 2.5+ 和 3.x+ 中对我有用(我用它从 #__extensions 表中选择用户插件)作为 WHERE 条件:

<field name="plugin" type="sql" query="SELECT extension_id as value, name as title FROM #__extensions WHERE type = 'plugin' AND folder = 'user'" />

【讨论】:

我认为这都是关于如何在 where clausule 中使用变量。【参考方案6】:

我遇到了同样的问题。您不能根据变量创建 where 条件,只能基于常量:(

但是您可以使用 form->setField 函数更改表单字段并重新加载视图中的字段。多亏了这一点,您可以在字段 sql 中创建任何条件。

$NewFieldDefinition=new SimpleXMLElement('<field name="catid" type="sql" query="SELECT id, title FROM #__table WHERE title='.$condition.'" />');
$this->form->setField($NewFieldDefinition, null, true);

【讨论】:

以上是关于Joomla 表单字段类型 sql="....WHERE 条件"?的主要内容,如果未能解决你的问题,请参考以下文章

xml 过滤Joomla媒体表单字段的文件类型

在我的 Joomla 组件的首选项中为表单字段定义过滤器功能的位置

组件模块中的 Joomla 过滤器表单,自动填充字段

如何在自定义组件视图中添加 joomla 编辑器但不使用 XML 表单字段?

在 joomla 中打开一个模式窗口,其中包含自定义模块配置中的表单字段

需要一个 Joomla!组件“邮件提醒”