我正在使用Joomla模块,可以显示图像并链接到Joomla文章,Virtuemart产品或外部链接。
要选择Virtuemart产品,我将以下参数添加到模块清单xml中:
<field
name="image_1_product"
type="sql"
default="10"
query="SELECT #__virtuemart_products.virtuemart_product_id, #__virtuemart_products_en_gb.product_name
FROM #__virtuemart_products, #__virtuemart_products_en_gb
WHERE #__virtuemart_products.virtuemart_product_id = #__virtuemart_products_en_gb.virtuemart_product_id
AND #__virtuemart_products.published = 1"
key_field="virtuemart_product_id"
value_field="product_name"
label="LABEL_PRODUCT"
description="DESC_PRODUCT">
</field>
安装Virtuemart时,这很好用。如果未安装Virtuemart,则会出现“未知列”错误 - 这是有道理的。
因为这是一个模块清单选项,所以我只能使用1个查询。有没有办法在执行select之前运行查询表是否存在的查询?像:
IF EXISTS TABLE `table_a` (SELECT * FROM table_a)
谢谢!
答案 0 :(得分:0)
我担心只用一次数据库查询就不可能。
我能想到的唯一解决方法是为模块创建参数帮助程序,并使用addfieldpath
模块fieldset
标记。使用此解决方案,您可以编写一个方法来执行查询并创建输出,然后您可以在创建参数之前检查表是否存在。
例如:
<config>
<fields name="params">
<fieldset name="basic" addfieldpath="/modules/mod_mymodule/elements/">
<field name="image_1_product" type="product" default="10" label="LABEL_PRODUCT" description="DESC_PRODUCT"/>
</fieldset>
</fields>
</config>
现在在/modules/mod_mymodule/elements/
中创建一个名为product.php
的PHP文件,并按照Joomla的文档中的描述编写自定义查询和字段描述。
Joomla文档适用于Custom parameter types和Creating custom template parameter types