Joomla SQL字段
SQL表单字段类型允许我们通过指定SQL语句从数据库获得内容,并且将记录以下拉列表的方式展示出来
表现形式
字段配置参数
专属属性:
- type (必填) 必须为 sql.
- name (必填) 字段的名称,当没有指定value_field的时候,这个字段的名称必须在查询字段中。
- query (必填) 获得下拉列表所需要查询的SQL语句.这个查询必须返回两个字段,一个字段的名称为value,另外一个字段和name属性中值一样。
- key_field (选填) sql结果作为select值的字段。
- value_field (选填) sql结果select文本的字段。
- translate (选填) 当设置为true的时候,value_field的结果将通过JText::_类进行多语言翻译。默认为false
- header (选填) (支持多语言) 是否显示一个空的选项如:请选择 。
- multiple (选填) (true/false) 是否允许多选
上面为模式1.通过query ,key_field ,value_field这个3个属性来生成列表。本字段也支持模式2.使用sql_*来指定。具体的参数如下:
- 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 (选填) 指定数据过滤的字段。你可以指定表单中的其他的字段作为本sql字段的过滤条件。前提是表单中其他字段的名称必须在查询的数据表中。
- 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 (选填) (支持多语言机制) 字段的标题
- description (选填) (支持多语言机制) 该字段的描述信息。当鼠标移动到标签上面的时候,会以tooltip的形式显示出来.
- default (选填) (不支持多语言机制) 默认值
- class (选填) 表单字段的css类名。如果省略,默认为'text_area'.
- required (选填l) 是否必须填写内容,用于在提交表单是进行校验. ( "true", "1", "readonly"这些都表示true)
- hint 显示在html占位符元素中的文本,通常是在空白字段内显示的浅色提示
- readonly (选填l) 是否只读,字段的值不能编辑. ("true", "1", "readonly" 这些都表示true)
- disabled (选填) 是否禁用字段。如果为true,那么这个字段的值不能填写,只能展示 - 并且这个值不会在表单中提交. (可设置的值: "true", "1", "readonly" 这些都表示true)
使用方法
|
请注意,本示例中使用了 AS 子句,因为 jos_content 表没有名为“value”的列。事实上,Joomla 数据库中很少有表有名为“值”的列。或者,您可以使用 key_field 属性来定义要使用的列而不是“值”
|
上面的两个方式展示的结果是一样的。
两个列名都可能需要别名。例如,假设您希望将您的字段称为“myfield”,而不是前面示例中的“title”。然后你可以这样做:
|
或者如下:
|
您还可以组合或计算 SQL 语句中的字段。例如,假设您想将每篇文章的创建日期/时间附加到列表中的文章标题。然后你可以使用这个 SQL 语句:
|
您还可以在 XML 中指定使用 <option></option>标题定义静态选项。如下:
|
或者,您可以使用 header 属性获得相同的结果,如下所示:
|
替代查询语法
从 Joomla 3.5 开始,查询属性的替代方案允许一些附加功能。如果存在query属性,则这些功能不可用。例如,这个字段定义:
|
可以改写为:
|
使用此语法的一个优点是它允许使用链接字段作为过滤器。例如,假设您有一个包含两个选择列表的表单,一个称为组,另一个称为子组。组字段很简单:
|
但 subgroups 字段包含一个 sql_filter 属性,它会使用表单中名称为“groups”字段的值作为过滤条件。
|
那么,如果上一个字段中groups的值为 99,则将为子组字段执行以下 SQL 语句:
|
要过滤多个字段,您可以在 sql_filter 子句中使用逗号分隔的过滤器名称列表。例如,如果有一个值为 99 的名为group的过滤器和值为 12 的名为categories的过滤器,则:
|
相应的SQL语句:
|
您还可以通过添加 sql_default_{FIELD_NAME} 属性在字段没有值的时候设置默认只作为过滤器。例如,假设group过滤器的默认值是 0,categories过滤器的默认值是 0,那么这个定义:
|
最初在没有过滤器的情况下评估时将生成此 SQL 语句:
|
注意:
1,使用此种方式生成的SQL语句可能存在兼容性问题
2,在字段参数设置中系统会自动替换#__为正确的表前缀