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...

JOOMLA 3 import content form other website

783"; $result_news=mysql_query($sql_new); while($row_news=mysq

form-field-tooltip.js

  • 2013-12-21 15:22
  • 20KB
  • 下载

基于 Django1.10 文档的深入学习(24)—— Form and field validation 之 cleaned_data

Form field default cleaning表单域默认清理我们首先创建一个自定义表单字段,验证其输入是一个包含逗号分隔的电子邮件地址的字符串。全班看起来像这样:from django imp...

(9)ExtJS之Ext.form.field.Text

JS文件: Ext.onReady(function(){ Ext.QuickTips.init(); var loginForm=new Ext.form.Panel({ title:'E...

Flask_wtf自定义 field样式(Placeholder, Style)、wtf.html、匹配 Bootstrap4、jinja2 quick_form

Flask-wtf + Flask-bootstrap,简简单单用一条语句就能让 jinja2 渲染出 form: form.quick_form() 但如果要实现自定义的表单样式,如下图,怎么做呢?...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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