Joomla的List form field type从数据库取得选项

原创 2013年12月02日 11:33:26

最新做joomla后台功能遇到一个这样的问题,记录如下:

在Joomla标准的field type中有一个list类别,也就是html中的select元素。


标准的用法是这样

<field name="mylistvalue" type="list" default="" label="Select an option" description="">
  <option value="0">Option 1</option>
  <option value="1">Option 2</option>
</field>
但是这里就存在一个问题,这些option都是固定值,假如我需要从数据库取得呢,比如产品的类别,这时我们就不能用它默认的这个了,那又想以xml配置的方式来显示表单该怎么办呢?

这时我想到能不能list类型的我自己生成表单呢?于是试了下,在xml中去掉这个field,然后在view.html.php中通过model取到数据,$this->typeList = $model->getTypeList();

然后在default.php中

<div>Type</div>
  <div>
     <select name="jform[type]">
        <?php
            foreach($this->typeList as $i=>$row){
                echo "<option value='".$row['id']."'>".$row['type']."</option>";
            }
        ?>
     </select>
  </div>
  <?php foreach($this->form->getFieldset() as $field): ?>    
     <div><?php echo $field->label;echo $field->input; ?></div>
  <?php }endforeach; ?>

这样确实在页面中显示了数据库中的数据,但出现了一个问题,保存的时候这个select的值保存不到

通过查看firebug的post数据,确认post了jform[type]的值到后台;看来只能是后台入库时候的问题了,想到刚才在models\forms\product.xml中去掉了type的field定义,是不是跟这个有关呢?于是恢复之前的代码,可以入库保存。看来joomla本身数据的保存是通过读取xml配置文件来对应数据库字段的

既然是这样,那也好办,我仍然给它写在xml中,

<field name="type" type="text"
            label="COM_FOLD_PRODUCT_TYPE_LABEL"
            description="COM_FOLD_PRODUCT_TYPE_DESC"
            size="40"
            class="input"
            required="true"
        />

实际用不到这个field定义,就没用list类型,可以简单点。然后在布局文件default.php中加上一个判断,如果是type,就用自定义的select表单代替

<?php foreach($this->form->getFieldset() as $field): ?>
                <?php if($field->name == "jform[type]"){ ?>
                    <div style="margin-bottom:5px;">Type</div>
                    <div>
                        <select id="jform_type" class="input" name="jform[type]" aria-invalid="true">
                        <?php
                            foreach($this->typeList as $i=>$row){
                                echo "<option value='".$row['id']."'>".$row['type']."</option>";
                            }
                        ?>
                        </select>
                    </div>
                <?php }else{ ?>
                    <div><?php echo $field->label;echo $field->input; ?></div>
            <?php }endforeach; ?>

经过测试,正常入库,至此问题解决!

Caused by: tag 'select', field 'list', name 'Model.属性': The requested list key '@*.*.*.*.*.EmpModel@

错误Caused by: tag 'select', field 'list', name 'Model.属性': The requested list key '@*.*.*.*.*.EmpMode...
  • hebeiuniversityof
  • hebeiuniversityof
  • 2017年08月10日 20:04
  • 232

joomla!读取数据库操作,使用JDatabase

https://docs.joomla.org/Selecting_data_using_JDatabase Besides instantiating the object you need j...
  • masofeng
  • masofeng
  • 2015年06月24日 15:43
  • 640

获取从数据库select到的值存到list的数据

1.elect单个值的,比如执行这条语句: Select count(id) from user; 并将结果放到List中,这时候,一个比较笨的取得id值的方法是: for(Object objec...
  • love_java_cc
  • love_java_cc
  • 2016年01月04日 17:14
  • 2674

joomla中的jdoc:include元素解析

type 属性  jdoc:include 元素中的type属性指定要渲染的内容类型,属性值可以是component,head,installation,message,module,modul...
  • hanbing196
  • hanbing196
  • 2014年08月22日 14:19
  • 890

CMS学习 --- joomla数据库表结构

Joomla 系统的数据库表一共 35 张表 , 这里解释一下每个表对应的大概功能 , 留作参考 ( 排名不分先后:-) ) 1. jos_bannar/jos_bannarclient/jos_ba...
  • github_34712959
  • github_34712959
  • 2016年06月24日 07:20
  • 574

joomla数据库表结构

Joomla系统的数据库表一共35张表,这里解释一下每个表对应的大概功能,留作参考(排名不分先后:-))1. jos_bannar/jos_bannarclient/jos_bannarfinish此...
  • beimuaihui
  • beimuaihui
  • 2008年01月09日 18:06
  • 3399

joomla查询数据库操作

$db = JFactory::getDbo(); //工厂模式获得JDatabaseDriver数据库实例 // Calculate number of guests and users ...
  • masofeng
  • masofeng
  • 2015年04月30日 15:42
  • 1047

Unknown column 'user_uid' in 'field list' sql错误解决过程

昨天在eclipse中使用jdbc向mysql数据库插入数据时,报以下错误信息: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: ...
  • gnail_oug
  • gnail_oug
  • 2016年12月13日 09:57
  • 11862

Joomla 3.x 在安装过程中创建数据表卡住

如果你在安装Joomla 3.x 时,在最后一步创建数据库和相应数据表时,出现卡住的情况。那么做如下操作就可以解决。 (1)找到joomla安装目录下的joomla.sql文件,J_dir/inst...
  • fightingbull
  • fightingbull
  • 2014年07月11日 22:37
  • 6112

DOC 表单字段Form field

说明 在一个HTML表单字段。新的供应大量的表格形式的jform类方便、灵活的创建。每个表单字段类型是jformfield子类。 除了作为一种灵活的网页制作工具,jformfi...
  • wang544831183
  • wang544831183
  • 2017年08月09日 09:16
  • 104
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Joomla的List form field type从数据库取得选项
举报原因:
原因补充:

(最多只允许输入30个字)