关闭

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

标签: Joomla 3.2php表单
468人阅读 评论(0) 收藏 举报
分类:

最新做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; ?>

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

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:2990次
    • 积分:126
    • 等级:
    • 排名:千里之外
    • 原创:10篇
    • 转载:1篇
    • 译文:0篇
    • 评论:0条
    文章分类