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 条件"?的主要内容,如果未能解决你的问题,请参考以下文章
在我的 Joomla 组件的首选项中为表单字段定义过滤器功能的位置
如何在自定义组件视图中添加 joomla 编辑器但不使用 XML 表单字段?