公告:分类目录网(www.flml.net)为广大站长提供免费收录网站服务(违法站勿扰),快审10元/站,永久收录!合作QQ:405593121。

快速审核,网站广告合作请联系我们
新站提交
  • 网站:211317
  • 待审:216
  • 小程序:53
  • 文章:2637

先说一下使用场景:一个数码网站,会有 “品牌介绍”栏目,同时也有“手机资讯”栏目,又可能还有“资源下载”栏目

所以我们会创建3个栏目:品牌介绍、手机资讯、资源下载。

品牌介绍,类似于聚合页的专题性质,里面包含该品牌各个维度的介绍等信息。自定义个模型即可实现。

在手机资讯发内容时,将资讯与品牌页关联起来要怎么实现?

所以最方法方法就是自定义个字段,所有品牌写进去,发文章直接下拉选择即可(当然也可把每个品牌都建立个栏目,这种用法灵活,如果新建个品牌栏目,还要创建对应的资讯、下载子栏目,过于麻烦)。

即:新增一个叫手机品牌的字段,那么,正常情况下,品牌应该是单选框或下拉框,选择里有苹果,华为,小米

如果有一天,手机又加了“板砖”牌手机,需要在自定义字段,增加一组“板砖”数据。同时也在品牌模型下发个板砖品牌的文章。

可以看到这2步是重复工作。如果多个模型都使用了品牌这字段(比如资源下载模型),那么这样需要在每个品牌字段,都增加一组数据,是不是觉得复杂很多?

时间长,可能自己都不记得这个品牌数据是否是完整的。漏加。

所以基于当前情况,我们就需要把自定义字段的数据,将设定的sql语句查询的结果,作为自定义数据的选项,是不是解决了这一点?

实现这个功能,首先自定义字段得可填sql语句,其次要本着尽量少改动系统文件的原则。校验未通过的提示信息的字段似乎不常用,就把它作为sql语句的设置处。

假如我们的手机品牌表名叫 pinpai,那么sql语句就是 select id,title from yzmcms_pinpai 填到设置处。因为我们只要品牌id和品牌标识。所以只需查id,title二字段。

选项列表,因为动态sql调用,所以设置处已不再需要,可随便填。

字段类型,我用下拉框。当然可以用单选框及多选框,凭自已使用场景来选择。

自定义设置处已经完成,到目前没有改动系统核心文件。下面就是文件修改了。

打开文件:/application/admin/common/lib/content_form.class.php

在新增文章的函数content_add()处,找到elseif($fieldtype == 'select'){

即修改下位列表框数据控制处。

1、增加sql调用,如果未通过提示设置不空,那么代表调用sql数据,否则仍使用固定选项数据。

        $sqlarr='';

        if($val['errortips']<>''){

            $db = D('test');

            $arr_db=$db->fetch_all($db->query($val['errortips']));

            foreach ($arr_db as $arr_tmp){

                                $sqlarr[]=implode(':',$arr_tmp);

                            }

             }else{

                 $sqlarr=string2array($val['setting']);

             }

2、调用的将调用的固定数据,修改成上面的数据

将红色部分改成 $sqlarr 

$string .= $this->tag_start($val['name'], $val['isrequired']).'<span class="select-box">'.form::select($val['field'],$val['defaultvalue'],string2array($val['setting'])).'</span>'.$this->tag_end();

3、按上面方法把编辑文章时的content_edit($data)函数,也改一下即可。

下面是content_add的完整代码:

public function content_add() {

$modelinfo = $this->get_modelinfo();

$string = getcache($this->modelid.'_model_string');

if($string === false){

$string = '';

 

foreach($modelinfo as $val){

   // print_r($val);

$fieldtype = $val['fieldtype'];

if($fieldtype == 'input' || $fieldtype == 'number'){

$errortips = !empty($val['errortips']) ? $val['errortips'] : '必填项不能为空';

$required = $val['isrequired'] ? ' required" errortips="'.$errortips : '';

$string .= $this->tag_start($val['name'], $val['isrequired']).'<input type="text" class="input-text'.$required.'" value="'.$val['defaultvalue'].'" name="'.$val['field'].'" placeholder="'.$val['tips'].'">'.$this->tag_end();    

}elseif($fieldtype == 'textarea'){

$errortips = !empty($val['errortips']) ? $val['errortips'] : '必填项不能为空';

$required = $val['isrequired'] ? ' required" errortips="'.$errortips : '';

$string .= $this->tag_start($val['name'], $val['isrequired']).'<textarea name="'.$val['field'].'" class="textarea'.$required.'"  placeholder="'.$val['tips'].'" >'.$val['defaultvalue'].'</textarea>'.$this->tag_end();

}elseif($fieldtype == 'select'){

    

        $sqlarr='';

        if($val['errortips']<>''){

            $db = D('test');

            $arr_db=$db->fetch_all($db->query($val['errortips']));

            foreach ($arr_db as $arr_tmp){

                                $sqlarr[]=implode(':',$arr_tmp);

                            }

             }else{

                 $sqlarr=string2array($val['setting']);

             }

             

             

$string .= $this->tag_start($val['name'], $val['isrequired']).'<span class="select-box">'.form::select($val['field'],$val['defaultvalue'],$sqlarr).'</span>'.$this->tag_end();

}elseif($fieldtype == 'radio' || $fieldtype == 'chec**ox'){

    

        $sqlarr='';

        if($val['errortips']<>''){

            $db = D('test');

            $arr_db=$db->fetch_all($db->query($val['errortips']));

            foreach ($arr_db as $arr_tmp){

                                $sqlarr[]=implode(':',$arr_tmp);

                            }

             }else{

                 $sqlarr=string2array($val['setting']);

             }

             

$string .= $this->tag_start($val['name'], $val['isrequired']).form::$fieldtype($val['field'],$val['defaultvalue'],$sqlarr).$this->tag_end();

 

 

}elseif($fieldtype == 'datetime'){

$string .= $this->tag_start($val['name'], $val['isrequired']).form::datetime($val['field'], '', $val['setting']).$this->tag_end();

}else{

$string .= $this->tag_start($val['name'], $val['isrequired']).form::$fieldtype($val['field']).$this->tag_end();

}

 

}

setcache($this->modelid.'_model_string', $string);

}

return $string;

}

 

好了,下拉框的已经实现。通过这种方法,试着把单选框也改一下!

这种数据用着很灵活,可以在发文章时任意调用所有表的数据。比如下拉选作者,专题等。可以关联任意数据。

  admin

注册时间:

网站:0 个   小程序:3 个  文章:0 篇

  • 1317

    网站

  • 53

    小程序

  • 37

    文章

  • 46

    会员

赶快注册账号,推广您的网站吧!
最新入驻小程序

美兔去水印2021-10-31

美兔去水印小程序,支持解析图集、

小勇去水印2021-07-08

短视频去水印神器,微信搜索小勇去

夜郎影音小程序2021-02-16

夜郎影音包含各类热门电影,热门连

91视频分享小程序2021-02-16

91视频,性感美女,JK制服视频,韩国女

皮皮影吧小程序2021-02-16

全网最新vip影视在线,皮皮影吧小

证件照X小程序2021-02-16

各类证件照快速裁、换底色等,1寸