• 万能字段使用技巧整理


    http://bbs.phpcms.cn/thread-868750-1-1.html

    http://bbs.phpcms.cn/thread-869106-1-1.html
    这是高级用法的说明.
    先来对万能字段做一个简单的修改.
    让万能字段能进进简单的判断,
    以后的技巧都将基于上面教程中的高级用法进行;

    /phpcms/modules/content/fields/omnipotent/form.inc.php
    这是万能字段的类方件.当更新缓存的时候会读这里的文件写到缓存,然后使用的时候再从缓存里读取;
    所以我们要修改就改这里!改完后更新缓存!

            function omnipotent($field, $value, $fieldinfo) {
                    extract($fieldinfo);
                    $formtext = str_replace('{FIELD_VALUE}',$value,$formtext);
                    $formtext = str_replace('{MODELID}',$this->modelid,$formtext);
                    preg_match_all('/{FUNC((.*))}/',$formtext,$_match);
                    foreach($_match[1] as $key=>$match_func) {
                            $string = '';
                            $params = explode('~~',$match_func);
                            $user_func = $params[0];
                            $string = $user_func($params[1]);
                            $formtext = str_replace($_match[0][$key],$string,$formtext);
                    }
                    preg_match_all('/{if((.*))}/',$formtext,$_match);
                    foreach($_match[1] as $key=>$match_func) {
                            $string = '';
                            $params = explode(',',$match_func);
                            $str = $params[0];
                            if($str){
                                    $string = $params[1];
                            }else{
                                    $string = $params[2]?$params[2]:'';
                            }
                            $formtext = str_replace($_match[0][$key],$string,$formtext);
                    }
                    $id  = $this->id ? $this->id : 0;
                    $formtext = str_replace('{ID}',$id,$formtext);
                    $errortips = $this->fields[$field]['errortips'];
                    if($errortips) $this->formValidator .= '$("#'.$field.'").formValidator({onshow:"",onfocus:"'.$errortips.'"}).inputValidator({min:'.$minlength.',max:'.$maxlength.',onerror:"'.$errortips.'"});';
    
                    if($errortips) $this->formValidator .= '$("#'.$field.'").formValidator({onshow:"'.$errortips.'",onfocus:"'.$errortips.'"}).inputValidator({min:1,onerror:"'.$errortips.'"});';
                    return $formtext;
            }

    改过了文件之后.(更新缓存)
    万能字段就多了一个语法
    {if(条件,值1,值2)}
    这个判断用来干嘛?
    万能字段.特色就是可以放入别的字段.
    通常我都把万能字段做成选项.选中就显示附加字段内容.
    但万能字段本身没有判断的语法,用JS么?增加内容的时候,字段值 为空,
    JS判断就会出错;
    所以就要这么一个简单的判断语法了!
    使用方法例:

    <input type="radio" id="external1" name="info[external]"  value="1"  {if({FIELD_VALUE},checked,)}/>启用
    <input type="radio"  id="external0"  name="info[external]"  value="0" {if({FIELD_VALUE},,checked)}/>关闭
    <div style="80%; [color=Red]{if({FIELD_VALUE}, ,display:none;)}[/color] "id="external">
     接口地址{userapi}
    </div>
    <script type="text/javascript">
    $(document).ready(function(){
      $("#external1").click(function(){
        $("#external").css("display","block");
      });
      $("#external0").click(function(){
        $("#external").css("display","none");
      });
    });
    
    </script>

    注意这里面的 , 逗句的用法.(英文半角符号)
    用判断配合JS就可以实现选中后再显示附加字段!
    第一个用法完成.请等待更新!

    万能字段技巧 -- 调用外表字段

    这是我之前一直想做的事!
    调用别的表里面的一个字段的值.
    现在给大家分享

    因为我的系统没什么内容.就调用自定义表单里的字段吧
    我要调用的表名为 form_wei_attention   字段名为 name 条件是当前投稿用户,后台则不限条件


    首先增加万能字段,我这里把他叫  
    字段名  gname
    字段别名  公众号名称
    表单内容  {FUNC(wei_cal_name~~{FIELD_VALUE},gname)}
    这里的写法,多了一个 , 逗号和一个gname 这是为了传递当前字段名称,这样的话,我们更改当前字段名也不用改方法
    保存在主表,(怎么存在主表,见上一楼)
    其它随意,
    1.jpg

    昨天 19:09 上传
    下载附件 (79.54 KB)



    然后去自定义函数文件中增加方法

    //万能字段使用
    
            function wei_cal_name($field){
                    $fields = explode(",", $field);
                    $userid = param::get_cookie('_userid');                                //获取当前用户ID
                    if ($userid)$where = array('userid'=>$userid);                
                    //设置调用条件为当前用户,后台增加的时候,此条件为空,就会调用所有的内容
                    $db = pc_base::load_model('sitemodel_field_model');
                    $db->change_table('form_wei_attention');                        //要调用的表名
                    $data = $db->select($where,'name');                                        //这是要调用的字段名
                    $srt = "<select name="info[{$fields[1]}]" id="{$fields[1]}" >";
                    foreach ($data as $value) {
                            if ($fields[0] == $value['name']) {
                               $srt.="<option value='{$value['name']}' selected = 'selected'>{$value['name']}</option>";
                            }else {
                                $srt.="<option value='{$value['name']}'>{$value['name']}</option>";
                            }
                    }
                    $srt.="</select>";
                    return $srt;
            }

    然后去后台增加一个信息,
    你就会看到这个字段变成了一个下拉选择框.里面是所有的信息列表...
    如果你觉得多了,那就自己设置一下条件吧!

    2.jpg

  • 相关阅读:
    Git本地windows凭证账号更改
    解决vue ui创建项目很慢的原因
    跨域问题总结
    JS柯里化
    vue diff算法讲解
    当面试官问你闭包时,他究竟想听到些什么?
    JS中的 ==
    必须知道的 prototype, [[prototype]], __proto__
    Deepcopy in Javascript
    http问题整理
  • 原文地址:https://www.cnblogs.com/wawahaha/p/3357191.html
Copyright © 2020-2023  润新知