繁体   English   中英

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

[英]Joomla Form field type sql=“…WHERE condition”?

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

例:

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

在joomla docs中没有任何相关内容。 我找到了这个链接,但它没有提到在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)定义您的查询:

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

2)更新表单字段属性:

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

是的可能

我使用的代码

<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>

您可以以另一种方式执行此操作作为自定义字段

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

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中添加:

<field
    name="field_name"
    type="vssql"
    query_id="user_id"
    query="SELECT id AS value, CONCAT(street,' ',city) AS addresses FROM #__addresses WHERE user_id = {query_id}"
    label="List of user addresses"
    required="required" />

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

@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。 效果很好!

这适用于我(我用它来从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'" />

我有同样的问题。 你不能根据变量做出条件,只有常数:(

但您可以更改表单字段并使用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);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM