[英]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.