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; ?>

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

DOC 列表表单域类型List form field type

这个列表表单域类型提供一个下拉列表或一个自定义的列表框。如果该字段具有保存价值是第一次加载页面时。如果不是,默认值(如果有)的选择。 类型(强制)必须列表姓名(强制性)is the na...

jquery.form用type=file上传文件

  • 2017年03月28日 19:09
  • 12KB
  • 下载

JOOMLA 3 import content form other website

form-field-tooltip.js

  • 2013年12月21日 15:22
  • 20KB
  • 下载

得到一个field在结构体(struct type)中的偏移量

宏定义:得到一个field在结构体(struct type)中的偏移量 #define OFFSETOF(type, field) ((size_t)&(((type *)0)->field)...

Struts表单验证field-validator的类型type

int 整数; double 实数; date 日期; expression 两数的关系比较; email Email地址; url visitor conversion reg...

lucene搜索时出现异常unexpected docvalues type NONE for field 'modified' (expected=NUMERIC)

在lucene搜索的时候,总是提示一下这个异常。 ***sort= java.lang.IllegalStateException: unexpected docvalues type NONE ...

Content-Type Header Field

The purpose of the Content-Type field is to describe the data contained in the body fully enough th...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Joomla的List form field type从数据库取得选项
举报原因:
原因补充:

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