8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png
模型字段中想增加一个关联其他模型的字段!
wminw 7月前

在模型中增加字段类型为,其他模型,如果添加一个模型ID

然后在发布内容时,会出现一个下拉,可选择所选模型的所有文章。这个用aliyui的下拉搜索框就行。

这样发布文章就可以和所选模型的文章关联

这种效果 https://fly.layui.com/extend/xmSelect/

在发布内容页面,建议用这个带搜索的下拉。不然内容太多时不好直接选择

最后于 7月前 被wminw编辑 ,原因:
最新回复 (3)
  • admin
    7月前 2
    0
    近期会有
  • Log
    7月前 3
    0

    这个其实并不困难,可以自己动手的,

    第一步:

    首先在\YZNCMS\application\cms\controller\Field.php 创建一个新的方法:

       public function getfieldinfo()
        {
            $field = $this->request->param('field/s', 0);
            empty($field) && $this->error('参数不能为空!');
            try {
                $FieldInfo = Db::query("SHOW FULL COLUMNS FROM {$field}");
            } catch (\Exception $e) {
                $this->error($e->getMessage());
            }
            $this->success("提取成功!","",$FieldInfo);
        }

    第二步:

    在文件 \YZNCMS\application\cms\controller\Field.php 字段控制器内找到 增加字段 (add) 

    添加 代码:

    $TABLElist = array_map('array_change_key_case', Db::query('SHOW TABLE STATUS')); //全部小写
    $this->assign([
                    'modelType' => $modelInfo['type'],
                    "modelid" => $modelid,
                    'fieldType' => $fieldType,
                    'TABLElist' => $TABLElist,
                   ]);


    第四步:

    找到字段添加模板文件,位置:\YZNCMS\application\cms\view\field\add.html

    用最新版本的yzn ,找到下面的代码:

       <div class="layui-form-item">
                        <label class="layui-form-label">选项</label>
                        <div class="layui-input-inline w300">
                            <textarea name="setting[options]" placeholder="值:描述
    值:描述
    值:描述
    ....." class="layui-textarea"></textarea>
                        </div>
                    </div>

    改为:

      <div class="layui-form-item">
                     <label class="layui-form-label">选项数据</label>
                     <div class="layui-input-inline">
                         <input type="radio" lay-filter="datasource" name="setting[datastate]" value="0" title="自定义" checked>
                         <input type="radio" lay-filter="datasource" name="setting[datastate]" value="1" title="关联数据库">
                     </div>
                 </div>
                <div class="layui-form-item datasource" style="display:none">
                    <label class="layui-form-label">数据库</label>
                    <div class="layui-input-inline w190">
                     <select lay-filter="datatable" name="setting[datasource][datatable]">
                         <option data-define="">选择数据库</option>
                         {volist name="TABLElist" id="vo"}
                         <option value="{$vo.name}">{$vo.comment} [{$vo.name}]</option>
                         {/volist}
                     </select>
                    </div>
                    <div class="layui-input-inline w150">
                        <select id="datavalue" name="setting[datasource][datavalue]">
                            {if condition="$FieldInfo neq null"}
                            {volist name="FieldInfo" id="vo"}
                            <option value="{$vo.Field}">[{$vo.Field}] {$vo.Comment}</option>
                            {/volist}{else /} 
                            <option data-define="">选择字段【值】</option>
                            {/if}
                        </select>
                    </div>
                    <div class="layui-input-inline w150">
                        <select id="datadesc" name="setting[datasource][datadesc]">
                            {if condition="$FieldInfo neq null"}
                            {volist name="FieldInfo" id="vo"}
                            <option value="{$vo.Field}">[{$vo.Field}] {$vo.Comment}</option>
                            {/volist}{else /} 
                            <option data-define="">选择字段【描述】</option>
                            {/if}
                        </select>
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">选项</label>
                    <div class="layui-input-inline w300">
                        <textarea name="setting[options]" placeholder="值:描述
    值:描述
    值:描述
    ....." class="layui-textarea"></textarea>
                    </div>
                </div>

    在底部加上JS代码:

       form.on('radio(datasource)', function(data) {
            if (data.value == 1) {
                $('.datasource').show().next().hide();
        } else {
                $('.datasource').hide().next().show();
            }
        });
        
        form.on('select(datatable)', function(data) {
            var field = data.value;
            tp.request.get(
                {
                    url:'{:url("getfieldinfo")}',
                    data:{field:field}
                },
                function(res){
                    var data = res.data;
                    $('#datavalue').html('<option data-define="">选择字段【值】</option>');
                    $('#datadesc').html('<option data-define="">选择字段【描述】</option>');
                    data.map(function(i, e) {
                        var desc = i.Comment||i.Field;
                        var html = '<option value="'+i.Field+'">['+i.Field+'] '+desc+' </option>';
                        $('#datavalue,#datadesc').append(html);
                    }); form.render();
                });
        });

    到这,当你选择字段类型为下拉的时候,会出现下拉的选项内容是自定义还是关联数据库。当然,这也可以扩展到其他字段类型,比如radio,或者checkbox;


    现在已经可以正常选择下拉的数据源了。


    现在选择数据源后提交后会在字段setting自动添加datasource和datastate响应设置内容。

    最后一步 找到文件\YZNCMS\application\cms\model\Cms.php

    在getFieldList方法内最修改。

    在  $value['setting'] = unserialize($value['setting']); 下添加代码

     if ($value['type'] == 'select') 
            if ($value['setting']['datastate']) {
                            $datatable = $value['setting']['datasource']['datatable'];
                            $tabledata = Db::table($datatable)->select();
                            foreach ($tabledata as $k => $v) {
                                $value['setting']['options'] .= $v['id'].':'.$v['name']."\n";
                            }
                        }
                    }


    好了,现在大功告成了!


  • wminw
    7月前 4
    0
    @Log,可以加你QQ吗,我QQ8355763
    • YznCMS交流社区
      5
        登录 注册 QQ登录
返回