Saber 酱的抱枕

Fly me to the moon

01/8
2015
学习

dedecms自定义字段的使用方法

使用 dedecms添加文章时有些我们想要的字段可能没有,例如我们可能要对一个病人记录下姓名、性别、年龄、职业等信息,并且能够分别调用。这就要用到自定义字段的功能了。

我们在后台的“核心”→“频道模型”→“内容模型管理”中,找到你要修改的模型,点击编辑按钮(我这里直接编辑内置的模型了,实际操作中建议先复制一个模型,然后编辑复制得到的新模型):

在修改模型时,选择第二个选项卡“字段管理”,点击“添加字段”:


如果添加的字段在文章页以外也要使用,需要勾选前台参数的这个选项:

添加完全部字段之后,在字段管理中可以看到以可视化模式和代码模式分别显示了我们添加的字段:

然后我们进栏目设置,把栏目的模型改成我们刚才的模型。

新模型对应的模板名和默认的是不通的。例如,原本普通文章模型的文章模板名是article_article.htm,然后新建的模型别名叫a2,则它对应的文章模板名字为a2_article.htm。你可以做一个a2_article.htm的模板,如果没必要做新模板的话,可以在栏目设置里把a2_article.htm改回默认的article_article.htm。

改了栏目的模型后,当我们添加文章的时候,就会有这些选项了:

有了这些字段之后怎么调用呢?看一下列表标签里的代码:

{dede:list pagesize='6' channelid='17' addfields='name,sex,age,bingshi'}
[field:sex/],[field:age/]
{/dede:list}
{dede:arclist typeid=4 row=7 channelid='17' addfields='ziliao,bingqing,bingyin,miaoshu'}
[field:ziliao/]
{/dede:arclist}

在dede:list标签和dede:arclist里面用起来都是要标签内添加channelid,就是第一步中的的频道ID。addfields就是把你需要调用的这些自定义字段写出来。标签中的调用还是使用[field:字段名/]的形式。

在内容页中可以直接调用:

{dede:field name='字段名'/}

如果要添加图片,建议字段类型设置为“图片(仅网址)”,这样数据库里只保存图片的 url,使用方便。

如果选择的是“图片”类型,则会有字段信息,导致前台使用[field:字段名/]输出类似于:

{dede:img text='' width='250' height='149'} /uploads/150821/1-150R1104632226.png {/dede:img}

要怎么解决呢,首先在/include/extend.func.php的最下面加入以下代码:

function GetOneImgUrl($img,$ftype=1){    
    if($img <> ''){    
        $dtp = new DedeTagParse();    
        $dtp->LoadSource($img);    
        if(is_array($dtp->CTags)){    
            foreach($dtp->CTags as $ctag){    
                if($ctag->GetName()=='img'){    
                    $width = $ctag->GetAtt('width');    
                    $height = $ctag->GetAtt('height');    
                    $imgurl = trim($ctag->GetInnerText());    
                    $img = '';    
                    if($imgurl != ''){    
                        if($ftype==1){    
                            $img .= $imgurl;    
                        }    
                        else{    
                            $img .= '<img src="'.$imgurl.'" width="'.$width.'" height="'.$height.'" />';    
                        }    
                    }    
                                
                }    
            }    
        }    
        $dtp->Clear();    
        return $img;        
    }    
}  

然后调用图片的时候需要这么写:

[field:duibi1 function='GetOneImgUrl(@me,0)'/]"
/*或者*/
<img src="[field:duibi1 function='GetOneImgUrl(@me,1)'/]">

第一行的代码输出的就是img标签,第二行输出的是图片的url。

dedecms自定义字段的使用方法