Joomla SQL字段

2023-03-10 15:46 更新

SQL表單字段類型允許我們通過指定SQL語句從數(shù)據(jù)庫獲得內(nèi)容,并且將記錄以下拉列表的方式展示出來

表現(xiàn)形式

Params.sql.jpg

字段配置參數(shù)

專屬屬性:

  • type (必填) 必須為 sql.
  • name (必填) 字段的名稱,當(dāng)沒有指定value_field的時(shí)候,這個(gè)字段的名稱必須在查詢字段中。
  • query (必填) 獲得下拉列表所需要查詢的SQL語句.這個(gè)查詢必須返回兩個(gè)字段,一個(gè)字段的名稱為value,另外一個(gè)字段和name屬性中值一樣。
  • key_field (選填)  sql結(jié)果作為select值的字段。
  • value_field (選填)  sql結(jié)果select文本的字段。
  • translate (選填)  當(dāng)設(shè)置為true的時(shí)候,value_field的結(jié)果將通過JText::_類進(jìn)行多語言翻譯。默認(rèn)為false
  • header (選填) (支持多語言) 是否顯示一個(gè)空的選項(xiàng)如:請(qǐng)選擇 。
  • multiple (選填) (true/false) 是否允許多選

上面為模式1.通過query ,key_field ,value_field這個(gè)3個(gè)屬性來生成列表。本字段也支持模式2.使用sql_*來指定。具體的參數(shù)如下:

  • sql_select (必填)  指定需要查詢字段。如 a.*
  • sql_from (必填)  指定需要查詢的表。如 #__zmaxshop_item
  • sql_join (選填)  指定需要Join的表。如 #__zmaxshop_order
  • sql_where (選填)  指定查詢條件。如 price>15
  • sql_group (選填)  指定分組的條件。如 item_id
  • sql_order (選填)  指定排序的方式。如 price ASC
  • sql_filter (選填)  指定數(shù)據(jù)過濾的字段。你可以指定表單中的其他的字段作為本sql字段的過濾條件。前提是表單中其他字段的名稱必須在查詢的數(shù)據(jù)表中。
  • sql_filter (optional) filters the list by the value of another field. A field name or a comma-separated list of field names can be given. The field names must correspond to column names in the database table being queried. See the examples for further explanation.
  • sql_default_{FIELD_NAME} (optional) is the default value used by the sql_filter attribute when the value of the {FIELD_NAME} filter has not been set. See the examples for further explanation.

通用屬性:

  • name (必填)  能代表該字段的唯一的名稱.
  • label (選填) (支持多語言機(jī)制) 字段的標(biāo)題
  • description (選填) (支持多語言機(jī)制) 該字段的描述信息。當(dāng)鼠標(biāo)移動(dòng)到標(biāo)簽上面的時(shí)候,會(huì)以tooltip的形式顯示出來.
  • default (選填) (不支持多語言機(jī)制) 默認(rèn)值
  • class (選填) 表單字段的css類名。如果省略,默認(rèn)為'text_area'.
  • required (選填l)  是否必須填寫內(nèi)容,用于在提交表單是進(jìn)行校驗(yàn). ( "true", "1", "readonly"這些都表示true)
  • hint 顯示在html占位符元素中的文本,通常是在空白字段內(nèi)顯示的淺色提示
  • readonly (選填l) 是否只讀,字段的值不能編輯. ("true", "1", "readonly" 這些都表示true)
  • disabled (選填) 是否禁用字段。如果為true,那么這個(gè)字段的值不能填寫,只能展示 - 并且這個(gè)值不會(huì)在表單中提交. (可設(shè)置的值: "true", "1", "readonly" 這些都表示true)

使用方法

<field
    name="title"
    type="sql"
    default="10"
    label="Select an article"
    query="SELECT id AS value, title AS text FROM #__content"
    />

請(qǐng)注意,本示例中使用了 AS 子句,因?yàn)?jos_content 表沒有名為“value”的列。事實(shí)上,Joomla 數(shù)據(jù)庫中很少有表有名為“值”的列?;蛘?,您可以使用 key_field 屬性來定義要使用的列而不是“值”

<field
    name="title"
    type="sql"
    default="10"
    label="Select an article"
    query="SELECT id, title FROM #__content"
    key_field="id"
    />

 上面的兩個(gè)方式展示的結(jié)果是一樣的。

兩個(gè)列名都可能需要?jiǎng)e名。例如,假設(shè)您希望將您的字段稱為“myfield”,而不是前面示例中的“title”。然后你可以這樣做:

<field
    name="myfield"
    type="sql"
    default="10"
    label="Select an article"
    query="SELECT id AS value, title AS myfield FROM #__content"
    />

 或者如下:

<field
    name="myfield"
    type="sql"
    default="10"
    label="Select an article"
    query="SELECT id, title FROM #__content"
    key_field="id"
    value_field="title"
    />

 您還可以組合或計(jì)算 SQL 語句中的字段。例如,假設(shè)您想將每篇文章的創(chuàng)建日期/時(shí)間附加到列表中的文章標(biāo)題。然后你可以使用這個(gè) SQL 語句:

SELECT id, concat( title, ' (', created, ')') AS title FROM #__content

 您還可以在 XML 中指定使用 <option></option>標(biāo)題定義靜態(tài)選項(xiàng)。如下:

<field
    name="myfield"
    type="sql"
    default="10"
    label="Select an article"
    query="SELECT id, title FROM #__content"
    key_field="id"
    value_field="title"
    required="true"
    >
    <option value="">Please select your option</option>
</field>

 或者,您可以使用 header 屬性獲得相同的結(jié)果,如下所示:

<field
    name="myfield"
    type="sql"
    default="10"
    label="Select an article"
    query="SELECT id, title FROM #__content"
    key_field="id"
    value_field="title"
    required="true"
    header="Please select your option"
    />

 替代查詢語法

從 Joomla 3.5 開始,查詢屬性的替代方案允許一些附加功能。如果存在query屬性,則這些功能不可用。例如,這個(gè)字段定義:

<field
    name="example_group"
    type="sql"
    label="COM_EXAMPLE_GROUP"
    query="SELECT e.* FROM #__example AS e GROUP BY name ORDER e.id ASC"
    key_field="id"
    value_field="name"
    />

 可以改寫為:

<field
    name="example_group"
    type="sql"
    label="COM_EXAMPLE_GROUP"
    sql_select="e.*"
    sql_from="#__example AS e"
    sql_group="name"
    sql_order="e.id ASC"
    key_field="id"
    value_field="name"
    />

 使用此語法的一個(gè)優(yōu)點(diǎn)是它允許使用鏈接字段作為過濾器。例如,假設(shè)您有一個(gè)包含兩個(gè)選擇列表的表單,一個(gè)稱為組,另一個(gè)稱為子組。組字段很簡(jiǎn)單:

<field name="groups"
    type="sql"
    label="COM_EXAMPLE_GROUPS"
    sql_select="e.*"
    sql_from="#__example_groups AS e"
    sql_group="name"
    sql_order="e.id ASC"
    key_field="id"
    value_field="name"
    />

 但 subgroups 字段包含一個(gè) sql_filter 屬性,它會(huì)使用表單中名稱為“groups”字段的值作為過濾條件。

<field name="subgroups"
    type="sql"
    label="COM_EXAMPLE_SUBGROUPS"
    sql_select="e.*"
    sql_from="#__example_subgroups AS e"
    sql_group="name"
    sql_order="e.id ASC"
    sql_filter="groups"
    key_field="id"
    value_field="name"
    />

那么,如果上一個(gè)字段中g(shù)roups的值為 99,則將為子組字段執(zhí)行以下 SQL 語句:

SELECT e.* FROM jos_example_subgroups AS e WHERE `groups` = 99 GROUP BY `name` ORDER BY e.id ASC

 要過濾多個(gè)字段,您可以在 sql_filter 子句中使用逗號(hào)分隔的過濾器名稱列表。例如,如果有一個(gè)值為 99 的名為group的過濾器和值為 12 的名為categories的過濾器,則:

sql_filter="groups,categories"

 相應(yīng)的SQL語句:

WHERE `groups` = 99 AND `categories` = 12

 您還可以通過添加 sql_default_{FIELD_NAME} 屬性在字段沒有值的時(shí)候設(shè)置默認(rèn)只作為過濾器。例如,假設(shè)group過濾器的默認(rèn)值是 0,categories過濾器的默認(rèn)值是 0,那么這個(gè)定義:

<field name="subgroups"
    type="sql"
    label="COM_EXAMPLE_SUBGROUPS"
    sql_select="e.*"
    sql_from="#__example_subgroups AS e"
    sql_group="name"
    sql_order="e.id ASC"
    sql_filter="groups,categories"
    sql_default_groups="0"
    sql_default_categories="1"
    key_field="id"
    value_field="name"
    />

 最初在沒有過濾器的情況下評(píng)估時(shí)將生成此 SQL 語句:

SELECT e.* FROM jos_example_subgroups AS e WHERE `groups` = 0 AND `categories` = 1 GROUP BY `name` ORDER BY e.id ASC

注意:

1,使用此種方式生成的SQL語句可能存在兼容性問題

2,在字段參數(shù)設(shè)置中系統(tǒng)會(huì)自動(dòng)替換#__為正確的表前綴


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)