m_Orchestrate learning system---三十一、模板和需求的关系
一、总结
一句话总结:模板为了适应广大用户,有很多功能样式,但是,你需要的只是部分,所以删掉不需要的,如果有需要,需要的时候再加上
删 需
1、bootstrap-switch(checkbox)怎么让switch在on的状态下传递值1过去控制器?
switch value 1
只需要将switch的value设置为1即可
因为thinkphp里面的checkbox的机制是选中才传值过去,不选中是不会传值的
就算switch的值设置为1,不选中的时候还是没有办法传递值过去
2、树形结构的上下级选中的js代码?
checkbox-parent checkbox-child dataid
1 <script type="text/javascript"> 2 /* 权限配置 */ 3 $(function () { 4 //动态选择框,上下级选中状态变化 5 $('input.checkbox-parent').on('change', function () { 6 var dataid = $(this).attr("dataid"); 7 $('input[dataid^=' + dataid + ']').prop('checked', $(this).is(':checked')); 8 }); 9 $('input.checkbox-child').on('change', function () { 10 var dataid = $(this).attr("dataid"); 11 dataid = dataid.substring(0, dataid.lastIndexOf("-")); 12 var parent = $('input[dataid=' + dataid + ']'); 13 if ($(this).is(':checked')) { 14 parent.prop('checked', true); 15 //循环到顶级 16 while (dataid.lastIndexOf("-") != 2) { 17 dataid = dataid.substring(0, dataid.lastIndexOf("-")); 18 parent = $('input[dataid=' + dataid + ']'); 19 parent.prop('checked', true); 20 } 21 } else { 22 //父级 23 if ($('input[dataid^=' + dataid + '-]:checked').length == 0) { 24 parent.prop('checked', false); 25 //循环到顶级 26 while (dataid.lastIndexOf("-") != 2) { 27 dataid = dataid.substring(0, dataid.lastIndexOf("-")); 28 parent = $('input[dataid=' + dataid + ']'); 29 if ($('input[dataid^=' + dataid + '-]:checked').length == 0) { 30 parent.prop('checked', false); 31 } 32 } 33 } 34 } 35 }); 36 }); 37 </script>
3、Auth权限管理规则无限级分类权限组选择权限的树形结构操作中,获取祖先id代码?
静态数组
注意代码里面的静态数组已经清空静态数组的操作
算法操作的思路为:從孩子id開始,通過遞歸一直找到所有祖先,並且返回
算法应用的场景为:规则格式化函数中
1 //最後一個字段true的作用是為了清空下面的靜態數組 2 public static function getparentid($authRuleId){ 3 $AuthRuleRes=db('auth_rule')->select(); 4 return self::_getparentid($AuthRuleRes,$authRuleId,True); 5 } 6 7 //從孩子id開始,通過遞歸一直找到所有祖先,並且返回 8 public static function _getparentid($AuthRuleRes,$authRuleId,$clear=False){ 9 static $arr=array(); 10 if($clear){ 11 $arr=array(); 12 } 13 foreach ($AuthRuleRes as $k => $v) { 14 if($v['aru_id'] == $authRuleId){ 15 $arr[]=$v['aru_id']; 16 self::_getparentid($AuthRuleRes,$v['aru_pid'],False); 17 } 18 } 19 asort($arr);//父級編號始終比子集編號小 20 $arrStr=implode('-', $arr); 21 return $arrStr;//輸出結果為孩子id和祖先id,比如1-6 22 }
4、input标签内能否直接套用原生php(input标签<内能否套用<?php ?>)?
可以
<input name="rules[]" value="{$authRule.id}" <?php $arr=explode(',', $authgroups['rules']); if(in_array($authRule['id'], $arr)){echo 'checked="checked"';} ?> dataid="id-{$authRule.dataid}" class="inverted checkbox-parent {if condition="$authRule['level'] neq 0"} checkbox-child {/if} " type="checkbox">
5、如何判断一个数是否在数组中(php中函数)?
in_array()
<input name="rules[]" value="{$authRule.id}" <?php $arr=explode(',', $authgroups['rules']); if(in_array($authRule['id'], $arr)){echo 'checked="checked"';} ?> dataid="id-{$authRule.dataid}" class="inverted checkbox-parent {if condition="$authRule['level'] neq 0"} checkbox-child {/if} " type="checkbox">
6、php判断字段为空?
is_null empty isset
empty
如果 变量 是非空或非零的值,则 empty() 返回 FALSE。换句话说,””、0、”0″、NULL、FALSE、array()、var $var、未定义;以及没有任何属性的对象都将被认为是空的,如果 var 为空,则返回 TRUE。
- 如果e是未定义或值为NULLL, e=NULL,它肯定是空,即empty($e)=true;
- 如果e是int类型, e=0,就相对于数字,0代表为零,即empty($e)=true;
- 如果e是string类型, e=”“,相对于字符串,”“就代表为是空,即empty($e)=true;
- 如果e是string类型, e=”0”,相对于字符串,”0“就代表为是零,即empty($e)=true;
- 如果e是bool类型, e=false,相对true,false就代表为空,即empty($e)=true;
- 如果e是array类型, a=array(),相对数组来说,没有元素的数据就为空,即empty($e)=true;
isset
如果 变量 存在(非NULL)则返回 TRUE,否则返回 FALSE(包括未定义)。变量值设置为:null,返回也是false;unset一个变量后,变量被取消了。注意,isset对于NULL值变量,特殊处理。
is_null
检测传入值【值,变量,表达式】是否是null,只有一个变量定义了,且它的值是null,它才返回TRUE . 其它都返回 FALSE 【未定义变量传入后会出错!】
== VS ===
在有些情况下,推荐使用isset来判断一个变量是否为NULL。
但是从语义上来说,一个变量”是否已显示初始化“和”是否为NULL“是不同的概念,在某些场景下使用isset是不合适的,比如检查一个函数的返回值是否为NULL。
此时可以使用”==”和”===“来判断它们是否为NULL。
对于”==”和”===“,它们直接的区别还是很大。对于”==”,它认同空字符串,0,false都为NULL。而对于”===”,只有一个变量真的为NULL,它才代表NULL。
另外”===”相对于”isset”来说,性能基本接近,甚至要好点。
因此综上述,判断一个变量是否为NULL最好的办法就是直接使用”===”,这样就不用在is_null,isset之间犹豫。其实上述的结论也同理于False的判断。
附录:
测试代码:
$data = 0;
$data1 = '0';
$data2 = array();
$data3 = null;
$data4 = false;
$data5 = "";
结果:
if (!变量)全部为true
if (isset(变量))全部为true
if (empty(变量))全部为true
if (is_null(变量)) 只有null为true 其他为为false
if (变量==null) 只有'0'为false,其他为true
if (变量===null) 只有null为true,其他false
7、sm尺寸下占1/6,xs尺寸下占全部如何實現?
col-sm-2
col-sm-2
1 <div class="form-group"> 2 <label for="inputEmail3" class="col-sm-2 control-label">Email</label> 3 4 <div class="col-sm-10"> 5 <input type="email" class="form-control" id="inputEmail3" placeholder="Email"> 6 </div> 7 </div>
8、实现任何看到的样式?
css 查看
因为都是html,css,所以完全可以查看然后copy样式实现相同的效果,非常简单方便
9、聚合查找,查找学校拥有的的班级数?
group
$school_class=db('school_class')->field('sc_s_id,count(sc_s_id)')->group('sc_s_id')->select(); dump($school_class);die;
结果:
array(3) { [0] => array(2) { ["sc_s_id"] => int(8) ["count(sc_s_id)"] => int(4) } [1] => array(2) { ["sc_s_id"] => int(9) ["count(sc_s_id)"] => int(4) } [2] => array(2) { ["sc_s_id"] => int(11) ["count(sc_s_id)"] => int(5) } }
10、input:file显示样式优化的原理?
重叠 透明度 size 定位
显示出来的是button,button和input重叠了,点到button点到了input
input的透明度是0,input的size是50rem,而且是绝对定位
1 <div class="fry_file"> 2 <button type="button" class="btn btn-danger btn-sm"> 3 <i class="fa fa-upload"></i> Select images to upload</button> 4 <input class="fry_file_input" id="doc-form-file" type="file" accept="image/*" name="ep_picture[]" multiple=""> 5 </div> 6 <div id="file-list"></div> 7 <!--上傳顯示圖片的js--> 8 <script> 9 $(function() { 10 $('#doc-form-file').on('change', function() { 11 var fileNames = ''; 12 $.each(this.files, function() { 13 fileNames += '<span class="badge">' + this.name + '</span> '; 14 }); 15 $('#file-list').html(fileNames); 16 }); 17 }); 18 </script> 19 <!--END 上傳顯示圖片的js-->
1 /*===================== input_file顯示樣式 =====================*/ 2 .fry_file{ 3 position: relative;overflow: hidden;margin-bottom: 1.5rem; 4 } 5 .fry_file .fry_file_input{ 6 position: absolute;left: 0;top: 0;z-index: 1;width: 100%;opacity: 0;cursor: pointer;font-size: 50rem; 7 }