1.1 表单美化

1.1.1 需求

Yii 2默认的表单样式如下(以login表单为例):

美工设计的样式如下:

1.1.2 Yii 2与Yii 1表单代码比较

在Yii 2中,对表单的功能进行了增强,在大多数情况下,表单的样式一般都是如上一节的图片所示,在Yii 1中,不能够整体上对表单的样式进行配置,只能是每一行单独设置,譬如:

<?php $form = $this->beginWidget('CActiveForm', array('id' => 'user-auth-form','enableAjaxValidation' => false,'htmlOptions' => array('enctype' => "multipart/form-data","class" => "form-horizontal","role" => "form"))); ?>
<div class="row"><div class="col-md-2 nowrap">姓名</div><div class="col-md-10"><?php echo $form->textField($model, 'fname',array('maxlength' => 100, 'required' => true,"class" => "form-control")); ?></div>
</div>
<div class="row"><div class="col-md-2 nowrap">手机号</div><div class="col-md-10"><?php echo $form->textField($model, 'fphone',array('maxlength' => 100, 'required' => true,"class" => "form-control")); ?></div>
</div>
<?php $this->endWidget(); ?>

可以看出,需要为每一行设置栅格系统的参数,Yii的ActiveField只是负责输出input控件,并没有为简化代码做出什么贡献,以至于后来我在用Yii 1做表单的时候,基本上不用ActiveField的方式输出input,而是直接写HTML代码,觉得这样还更简单一些。

而到了Yii 2,表单的代码变成如下:

<?php $form = ActiveForm::begin(['id' => 'login-form','layout' => 'horizontal','options' => ['class' => 'ldo-login-form',],'fieldConfig' => ['horizontalCssClasses' => ['label' => 'col-sm-3 col-md-2','wrapper' => 'col-sm-9 col-md-10','error' => 'text-left','offset' => 'col-sm-offset-3 col-md-offset-2',]],
]); ?>
<?= $form->field($model, 'username')->textInput(['autofocus' => true]) ?>
<?= $form->field($model, 'password')->passwordInput() ?>
<?= $form->field($model, 'rememberMe')->checkbox()  ?>
<div class="form-group"><div class="col-sm-9 col-md-10 col-sm-offset-3 col-md-offset-2"><?= Html::submitButton('登录', ['class' => 'btn btn-primary', 'name' => 'login-button']) ?></div>
</div>
<?php ActiveForm::end(); ?>

忽然发现表单代码清爽很多,没有了每一行外面的HTML包装器,想输出什么字段就直接放上一个ActiveField就好了。

1.1.3 Yii 2表单思路

用Yii 2实现表单,其基本思路是在ActiveForm::begin()中对整个表单的样式进行统一的初始化,然后在表单区域使用ActiveField输出想要的字段,同时可以在这里设置个别字段个性的显示样式。

1.1.4 Yii 2表单主要属性

在上面的Yii 2表单中,最主要的是如下几个属性:

l layout

这个是用来设置整个表单的布局的,按照官方文档的说明,可以取值为“default”、“horizontal”和“inline”,default和inline还没时间研究,horizontal是水平布局,就是指每一个字段占据一行的方式(效果图参见3.4.1)。

l fieldConfig

每个表单字段可以有Label、Input、Hint、Error、Offset等几种控件,在这里为表单内所有字段配置共同的属性,这样就省下了Yii 1中每一行还要单独配置这些控件的代码。

l horizontalCssClasses

这个是配置水平布局时,每个表单字段各个控件的CSS类参数,只有在layout=horizontal时才会起作用。

l options

这个是为表单配置HTML属性的。

使用上面的配置为表单字段配置CSS类,不会修改ActiveForm和ActiveField的默认类,譬如表单内的input控件,使用ActiveField创建出来的,都会带上“control-label”类,而上面配置的Label类,不会覆盖control-label,而是在原有值的基础上添加,实际输出的Label的类为“control-label col-sm-3 col-md-2”。

1.1.5 Yii 2表单字段的几个概念

看下图:

说明:

l label

是指input控件前的标签文字;

l wrapper

Yii在input控件外面会包一个div,这个div就叫做wrapper;

l error

对字段进行校验,所显示的错误信息

l offset

如果input控件前面没有label,则为了保持与其它input控件对其,前面的空白区域就叫做offset;

l hint

这个暂时还没有搞出来;

1.1.6 Yii 2表单按钮处理

Yii 2对表单字段的处理很好,但是对于表单的按钮,就没有这么好了,还是需要按照Yii 1的方式,单独输出按钮,并且在按钮外面自己包上容器:

<div class="form-group"><div class="col-sm-9 col-md-10 col-sm-offset-3 col-md-offset-2"><?= Html::submitButton('登录', ['class' => 'btn btn-primary', 'name' => 'login-button']) ?></div>
</div>

这样,最终的效果图如下:

现在表单样式基本美化完毕,但是还是可以看到Label和错误提示都不是中文,需要进行处理,这个在下一节进行说明。

1.1.7 修改hint位置

默认表单模板的显示效果如下:

hint的位置在input的后面,看起来视觉效果不好,我们希望做到下面这样的效果:

即提示信息在输入框的下面,这样看起来一目了然,要达到这样的效果,只需要修改ActiveForm的template参数即可:

<?php $form = ActiveForm::begin(['id' => 'form','layout' => 'horizontal','options' => ['class' => '',],'action' => 'saveDeviceSn.html','fieldConfig' => ['template' => '{label}{beginWrapper}{input}{hint}{error}{endWrapper}','horizontalCssClasses' => ['label' => 'col-sm-2 col-md-1','wrapper' => 'col-sm-6 col-md-5','error' => 'text-left','offset' => 'col-sm-offset-2 col-md-offset-2','hint' => '',]],
]); ?>

主要是使用“{beginWrapper}”和“{endWrapper}”这两个标签,将input、hint和error区域包含在一个div里,同时要将hint参数设置为空,避免默认的显示类影响显示效果。

转载于:https://www.cnblogs.com/tywali/p/6545623.html

Yii2 —— 表单美化相关推荐

  1. 我为什么还要造轮子?欠踹?Monk.UI表单美化插件诞生记!

    背景 目前市场上有很多表单美化的UI,做的都挺不错,但是他们都有一个共同点,那就是90%以上都是前端工程师开发的,导致我们引入这些UI的时候,很难和程序绑定.所以作为程序员的我,下了一个决定!我要自己 ...

  2. JavaScript/jQuery 表单美化插件小结

    Niceforms Niceforms是一款独立的表单美化工具,当前版本为2.0 官方主页:http://www.emblematiq.com/lab/niceforms/ 官方演示:http://w ...

  3. html表单验证案例,HTML5表单验证(4个实用的表单美化案例)

    multipart/form-data 在使用包含文件上传控件的表单时,必须使用 autocomplete="on" 自动补全功能 novalidate 不验证 placehold ...

  4. html表单模板属性,HTML5超酷响应式表单美化模板插件

    这是一款非常效果非常酷的HTML5超酷响应式表单美化效果插件.表单的整体效果使用扁平化风格,使用media queries来为各种屏幕创建响应式效果.在大屏幕上,整个表单分三列显示,当屏幕小到一定程度 ...

  5. Web表单美化CSS框架Topcoat

    Topcoat同样是一款简洁的Web表单构建应用,和Semantic UI.BootMetro等CSS框架不同的是,Topcoat主要用于构建美化的Web表单,包括提交按钮.输入框.单选框/复选框.滑 ...

  6. 纯原生javascript下拉框表单美化实例教程

    html的表单有很强大的功能,在web早期的时候,表单是页面向服务器发起通信的主要渠道.但有些表单元素的样式没办法通过添加css样式来达到满意的效果,而且不同的浏览器之间设置的样式还存在兼容问题,比如 ...

  7. javascript实现下拉框表单美化的详细实例教程

    html的表单有很强大的功能,在web早期的时候,表单是页面向服务器发起通信的主要渠道.但有些表单元素的样式没办法通过添加css样式来达到满意的效果,而且不同的浏览器之间设置的样式还存在兼容问题,比如 ...

  8. 浅析Web表单美化CSS框架Topcoat

    Topcoat同样是一款简洁的Web表单构建应用,和Semantic UI.BootMetro等CSS框架不同的是,Topcoat主要用于构建美化的Web表单,包括提交按钮.输入框.单选框/复选框.滑 ...

  9. 表单美化-原生javascript和jQuery下拉列表(兼容IE6)

    效果: 思想:用其他标签配合脚本和隐藏的input并通过传值模拟表单元素中的select <!DOCTYPE HTML> <html lang="en-US"&g ...

  10. 学习JavaWeb的第四天(表单美化,表单与服务器连接,css初步了解)

    对于表单标签的美观问题 通过表单的格式化 <!DOCTYPE html> <html lang="zh"> <head><meta cha ...

最新文章

  1. 《番茄工作法图解》作者中国行
  2. Python selenium根据class定位页面元素,xpath定位
  3. 牛客网暑期ACM多校训练营(第一场)J Different Integers
  4. 最简化Selenium环境安装
  5. 小程序中input标签没有反应_鸢尾花预测:如何创建机器学习Web应用程序?
  6. scheduledexecutorservice 的使用_java中ThreadPool的介绍和使用
  7. 阿里巴巴发布招聘微博:新财年新增超过1800岗位需求
  8. P1828 香甜的黄油 Sweet Butter (spfa)
  9. python Selenium调用 IE/GoogleChrome/Firefox浏览器驱动的方法及下载地址
  10. 知云文献翻译打不开_推荐一个很好用的阅读英文文献工具(研究僧看过来啦!!!)...
  11. [Data]Link cut tree
  12. 用lm()拟合回归模型
  13. matlab面板数据怎么求增长率的公式,环比增长率怎么算公式表格(教你如何计算同比增长率)...
  14. Request method XXX not supported
  15. Win10开机时怎么跳过磁盘检查?
  16. 盯住Z世代增量,汽车之家818车晚透露哪些营销信号?
  17. awk从入门到入土(19)awk扩展插件,让awk如虎添翼
  18. 怎么提高python编程水平_编程新手如何提高编程能力?
  19. 云溪天工生产对接_解读工业智能网关如何快速对接百度天工IoT Hub
  20. 施耐德协议转换网关WTGNet-TWD

热门文章

  1. PyTorch之VGG16网络结构详解以及源码解读
  2. 循迹小车三个感应c语言程序,循迹小车的C语言程序(带注释)
  3. matlab算系统阻抗,基于MatlabRF系统阻抗匹配设计.pdf
  4. PCL RANSAC点云配准
  5. 【五线谱】音高表示 ( 高音谱号 | C3 60 ~ B3 71 音高表示 | C4 72 音高表示 | C5 84 音高表示 )
  6. [pion]测试你的TURN服务器
  7. Intel网卡MAC地址更改方法
  8. SAP B1打印报表实现本页合计和本单合计的方法
  9. 软件工程导论复习之总体设计
  10. 20189222 《网络攻防实践》安全工具、库的简介以及使用教程