2012-09-29 46 views
3

在Joomla 2.5中,如何在SQL查詢中使用條件「WHERE」執行表單字段類型「SQL」?Joomla表單字段類型sql =「.... WHERE條件」?

例子:

<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的回答!

+0

+1。這是一個非常好的問題 – WooDzu

回答

1

是其可能

我的代碼,我使用的

<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

+1

謝謝你的回答。但我的問題是我可以做這樣的事情嗎? 我有一個產品表和一張與品牌相關的商店的表格。 如果我編輯一家商店,我想用商店品牌的所有商品展示一個組合框。那可能嗎? SELECT * FROM #__products WHERE {關聯到我選擇的編輯店品牌標識} 這是可能的品牌=?謝謝! – Snitram200

1

剛剛有同樣的問題做到這一點。經過一番挖掘,我發現它實際上是可能的。

第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 *。這將返回地址的列表,從分配給特定用戶的一些表

0

這個工作對我來說(我用這個來選擇#__extensions表用戶插件)中的Joomla 2.5+和3.x +)作爲WHERE條件:

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

我認爲這是所有關於如何使用變量在哪裏clausule。 – Barto

-1

我有同樣的問題。你不能在基於變量的條件下,只有常量:(

但你可以改變窗體域,並重新加載字段在窗體中 - > 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); 
1

一些更新@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(); 
    } 

}

類型應該是公開和查詢應分配給這個 - $>查詢。 太棒了!

1

這裏是我的解決方案:

您可以通過執行完全替代查詢如下:

1)定義您查詢:

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

2)更新您的表單字段屬性:

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