分类目录归档:DEDECMS技巧

DEDECMS技巧

调用栏目内容代码

任意页面调用栏目内容

{dede:sql sql='Select content from dede_arctype where id=2'}
  [field:content function="cn_substr(@me,236)"/]
{/dede:sql}

 

dedecms调用顶级栏目

{dede:channel type='top' currentstyle="<li class='on'><a href='~typelink~' ~rel~>~typename~</a></li>"}
  <li><a href='[field:typeurl/]' [field:rel/]>[field:typename/]</a></li>
{/dede:channel}

 

dedecms调用同级栏目

{dede:channel currentstyle="<li class='on'><a href='~typelink~' ~rel~><span>~typename~</span></a></li>"}
  <li><a href="[field:typeurl/]" [field:rel/]>[field:typename/]</a></li>
{/dede:channel}

 

dedecms调用指定栏目的子栏目

{dede:channel type='son' typeid='3'}
    <li><a href="[field:typeurl/]">[field:typename/]</a></li>
{/dede:channel}

 

dedecms调用顶级栏目及其子栏目

复制代码
{dede:channelartlist typeid='top'}
<li class="type">
    <a href="{dede:field name='typeurl'/}">{dede:field name='typename'/}</a>
    <div class="sontype">
      <ul>
        {dede:channel type='son' noself='yes'}
        <li><a href="[field:typelink/]">[field:typename/]</a></li>
        {/dede:channel}
      </ul>
    </div>
</li>
{/dede:channelartlist}
复制代码

 

dedecms调用当前栏目

{dede:type}
  <a href="[field:typeurl/]" [field:rel/]>[field:typename/]</a>
{/dede:type}

 

dedecms循环输出指定栏目下的子栏目内容

{dede:channelartlist type='son' typeid='1'}
  {dede:field.content/}
{/dede:channelartlist}

 

dedemcs栏目页调用栏目内容

{dede:field.content/}

 

 

 

dede调用当前顶级栏目名称、ID、url方法

使用dede时,经常会碰到需要调用当前顶级栏目名称,而织梦默认{dede:field name=’typename’ /} 只可以获取当前栏目页上一级栏目的名称,而不是当前栏目顶级栏目名称。

在include/common.func.php的底部加入:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
//获取顶级栏目名
function GetTopTypename($id)
{
    global $dsql;
    $row $dsql->GetOne("SELECT typename,topid FROM dede_arctype WHERE id= $id");
    if ($row['topid'] == '0')
    {
        return $row['typename'];
    }
    else
    {
        $row1 $dsql->GetOne("SELECT typename FROM dede_arctype WHERE id= $row[topid]");
        return $row1['typename'];
    }
}

备注:若顶级栏目没有绑定二级域名,所调用的字段应该是 sitepath 故代码应如下所示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
//获取顶级栏目url 
function GetTopTypeurl($id)
{
    global $dsql;
    $row $dsql->GetOne("SELECT sitepath,topid FROM dede_arctype WHERE id= $id");
    if ($row['topid'] == '0')
    {
        return $row['sitepath'];
    }
    else
    {
        $row1 $dsql->GetOne("SELECT sitepath FROM dede_arctype WHERE id= $row[topid]");
        return $row1['sitepath'];
    }
}

顶级栏目其他字段调用的function 函数仿照上面所示书写即可。

 

 

同理可得获取顶级栏目url方法 (当顶级栏目绑定二级域名时调用的字段为“ siturl”)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
function GetTopTypeurl($id)
{
    global $dsql;
    $row $dsql->GetOne("SELECT siteurl,topid FROM dede_arctype WHERE id= $id");
    if ($row['topid'] == '0')
    {
        return $row['siteurl'];
    }
    else
    {
        $row1 $dsql->GetOne("SELECT siteurl FROM dede_arctype WHERE id= $row[topid]");
        return $row1['siteurl'];
    }
}

 

在文章页或者栏目列表页调用时,在所要调用栏目名称的位置加上下面这行代码即可实现。

{dede:field name=’typeid’ function=”GetTopTypename(@me)” /}    顶级栏目名

{dede:field name=’typeid’ function=”GetTopTypeurl(@me)” /}     顶级栏目url

 

dede调用顶级栏目ID 方法一:

{dede:field.typeid function=”GetTopid(@me)”/} 聚模板首推这一方法,经过测试是可行的。

 

dede调用顶级栏目ID 方法二:

1、在所需要调用顶级栏目ID的地方,添加这段标签语法

{dede:type}[feild:topid/]{/dede:type}

 

2、修改源文件,找到include目录下的taglib目录下的type.lib.php。

找到这条语句

1
2
$row $dsql->GetOne(“Select id,typename,typedir,isdefault,ispart,defaultname,namerule2,moresite,siteurl,sitepath
From `dede_arctype` where id=’$typeid’ “);

修改成为

1
2
$row $dsql->GetOne(“Select id,topid,typename,typedir,isdefault,ispart,defaultname,namerule2,moresite,siteurl,sitepath
From `dede_arctype` where id=’$typeid’ “);

在if(!is_array($row)) return ”;下一行添加

1
if$row['topid']==0){$row['topid']=$row['id'];}

这样,这条语句在顶级栏目还是子栏目,都可以调用了

 

dedecms的自定义表单信息过滤,电话+邮箱验证有效性

dedecms的自定义表单没有对提交的信息进行过滤,经常会有垃圾信息骚扰,
本站提供2条检测规则,是利用正则方法,可以检测手机号码和邮箱,
修改plus下的diy.php 再提交入库前插入下面代码即可,
其中的 $telphone和$email就是提交的手机号码和邮箱值名,如果不是我设定的可以自行修改。

 

//判断手机号码是否正确
if(!eregi(“^13[0-9]{9}|15[0-9]{9}|18[0-9]{9}|17[0-9]{9}|14[0-9]{9}$”,$tel))
{
showMsg(‘请输入正确的手机号码,以便我司更好为您服务!’, ‘-1’);
exit();
}
//增加必填字段判断
if($required!=”){
if(preg_match(‘/,/’, $required))
{
$requireds = explode(‘,’,$required);
foreach($requireds as $field){
if($$field==”){
showMsg(‘<font size=4 color=#9b231c>请完整填写申请表<br>以便我司更好为您服务!</font>’, ‘-1’);
exit();
}
}
}else{
if($required==”){
showMsg(‘<font size=4 color=#9b231c>请完整填写申请表<br>以便我司更好为您服务!</font>’, ‘-1’);
exit();
}
}
}
//end

DEDE模板标签调用str_replace()替换函数,栏目替换,字段替换

str_replace() 函数:使用一个字符串替换字符串中的另一些字符。
举个例子:
[field:sitepath function=’str_replace(“{cmspath}”,”http://localhost/”,@me) /] 
实际上是查找内容中指定的部分然后进行替换,上面是DEDE中的应用方法,第2个双引号实际是替换的内容,这里是http://localhost/
上面标签的作用就是查找内容中的{cmspath}并替换为 http://localhost/ ,实际上也就是去掉。
str_replace() 还有一个参数count ,是替换的次数,
语法为str_replace(find,replace,string,count)
所以我们可以引申出很多应用方法了。
比如下面的标签都可以应用
[field:info/] 
[field:arcurl/]
[field:typedir/] 
举个例子
[field:title function=’str_replace(“aaa”,”bbb”,@me)/]
[field:title function=’str_replace(“测试”,”test”,@me)/]
查找标题中的aaa替换成bbb,
但下面这个比较常用,主要应用于二三级栏目嵌套调用中
[field:typedir function=’str_replace(“{cmspath}”,””,@me)’/]

如何在列表语句中做if判断

列表语句中做if判断 。

{dede:list pagesize=’4′}
                                    [field:array  runphp=’yes’]
                                    if(@me[‘zhiweishuxing’]==’热招职位’)
                                    {
    @me = (strlen(@me[‘title’])>20) ? (‘<li><a href=’.@me[‘arcurl’].’>’.cn_substr(@me[‘title’],30).’…’.'</a></li>’) :(‘<li><a href=’.@me[‘arcurl’].’>’.@me[‘title’].'</a></li>’);
                                        }
                                     [/field:array]
                                  {/dede:list}
织梦的列表标签中有个弊端,就是不能在标签语句中直接使用if语句做判断,如果针对某个字段做判断的话 可以采用这样一种方法,在列表内部做判断,如果大家有更好的办法,希望能多多指点

DEDECMS 图集图片{dede:productimagelist}加自增函数

在图集内容页调用图集的时候,如果使用某些幻灯片特效或者jquery插件,难免会用到ID编号什么的,本教程将教会你如何给图集图片自动编号,也就是说,让{dede:productimagelist}标签支持自动编号,非常简单。

打开include/taglib/productimagelist.lib.php文件,找到:

$ctp->LoadSource($innerText);

在其后面另起一行加入

$GLOBALS[‘autoindex’] = 0;

找到:

$revalue .= $ctp->GetResult();

在其后面另起一行加入

$GLOBALS[‘autoindex’]++;

这里的改动就算完了,接下来是内容页里调用:

[field:global name=autoindex/]

例子:

{dede:productimagelist}

<span id=“[field:global name=autoindex/]”><img src=“[field:imgsrc/]” width=“805” height=“523” /></span>

{/dede:productimagelist}

结果:

<span id=“0”><img src=“1.jpg” width=“805” height=“523” /></span>

<span id=“1”><img src=“2.jpg” width=“805” height=“523” /></span>

<span id=“2”><img src=“3.jpg” width=“805” height=“523” /></span>

简易织梦DEDECMS自定义表单导出为excel功能

1、首先在后台修改/dede/templets/diy_main.htm

<a href="../plus/diy.php?action=daochu&diyid={dede:field.diyid/}" target="_blank">导出为EXCEL</a>

修改,后台效果如下图:

 

1218063-20170818094251256-556428396

2、核心内容修改  plus/diy.php

$action = isset($action) && in_array($action, array('post', 'list', 'view')) ? $action : 'post';
替换成:
$action = isset($action) && in_array($action, array('post', 'list', 'view', 'daochu')) ? $action : 'post';

再在最后一行下面新加代码:
当然,下面输出表头的判断语句你可以自己改!

 注意:

elseif($row['Field']=='ifcheck'){
            echo "<th>审核状态</th>";
        }

下面提及到的这个字段是系统自带的审核状态字段“建议保留”
<!--代码开始-->
else if($action == 'daochu')
{
ob_end_clean();//清除缓冲区,避免乱码
header("Content-type:application/vnd.ms-excel");
Header("Content-Disposition:attachment;filename={$diy->table}_".date("Y-m-d").".xls");   
$query = "desc `{$diy->table}`";
$res = mysql_query($query);
echo "<table><tr>";
//导出表头(也就是表中拥有的字段)
while($row = mysql_fetch_array($res)){
  $t_field[] = $row['Field']; //Field中的F要大写,否则没有结果
/*   echo "<th>".$row['Field']."</th>"; */
        if($row['Field']=='id'){
            echo "<th>ID</th>";
        }elseif($row['Field']=='zhaiwutype'){
            echo "<th>债务类型</th>";
        }elseif($row['Field']=='zhaiquanfang'){
            echo "<th>债权方</th>";
        }elseif($row['Field']=='name'){
            echo "<th>名称</th>";
        }elseif($row['Field']=='jigouhaoma'){
            echo "<th>身份证号/机构代码</th>";
        }elseif($row['Field']=='path'){
            echo "<th>住址/地址</th>";
        }elseif($row['Field']=='tel'){
            echo "<th>联系电话</th>";
        }elseif($row['Field']=='zhaiwufang'){
            echo "<th>债务方</th>";
        }elseif($row['Field']=='zhaiwufangname'){
            echo "<th>债务方名称</th>";
        }elseif($row['Field']=='zhaiwufanghaoma'){
            echo "<th>债务方身份证号/机构代码</th>";
        }elseif($row['Field']=='zhaiwufangpath'){
            echo "<th>债务方地址</th>";
        }elseif($row['Field']=='zhaiwufangtel'){
            echo "<th>债务方电话</th>";
        }elseif($row['Field']=='danbaofang1'){
            echo "<th>担保方</th>";
        }elseif($row['Field']=='danbao1name'){
            echo "<th>担保方名称</th>";
        }elseif($row['Field']=='danbao1haoma'){
            echo "<th>身份证号/机构代码</th>";
        }elseif($row['Field']=='danbao1tel'){
            echo "<th>联系电话</th>";
        }elseif($row['Field']=='zhaiwushuoming'){
            echo "<th>债务说明</th>";
        }elseif($row['Field']=='fayuanzhixing'){
            echo "<th>法院是否强制执行</th>";
        }elseif($row['Field']=='zhixingfayuan'){
            echo "<th>执行法院</th>";
        }elseif($row['Field']=='lianxiren'){
            echo "<th>联系人</th>";
        }elseif($row['Field']=='lianxidianhua'){
            echo "<th>电话</th>";
        }elseif($row['Field']=='zhaiwujine'){
            echo "<th>债务金额</th>";
        }elseif($row['Field']=='nativeplace1'){
            echo "<th>住址/地址</th>";
        }elseif($row['Field']=='jiamengtype'){
            echo "<th>加入类型</th>";
        }elseif($row['Field']=='groupname'){
            echo "<th>公司(机构)名称</th>";
        }elseif($row['Field']=='grouppath'){
            echo "<th>公司地址</th>";
        }elseif($row['Field']=='groupjianjie'){
            echo "<th>公司简介</th>";
        }elseif($row['Field']=='lianxiren'){
            echo "<th>联系人</th>";
        }elseif($row['Field']=='lianxitel'){
            echo "<th>联系电话</th>";
        }elseif($row['Field']=='lianximobile'){
            echo "<th>手机</th>";
        }elseif($row['Field']=='qq'){
            echo "<th>QQ</th>";
        }elseif($row['Field']=='name'){
            echo "<th>姓名</th>";
        }elseif($row['Field']=='xingbie'){
            echo "<th>性别</th>";
        }elseif($row['Field']=='nianling'){
            echo "<th>年龄</th>";
        }elseif($row['Field']=='danwei'){
            echo "<th>工作单位</th>";
        }elseif($row['Field']=='zhiwu'){
            echo "<th>职务</th>";
        }elseif($row['Field']=='dianhua'){
            echo "<th>联系电话</th>";
        }elseif($row['Field']=='mobile'){
            echo "<th>手机</th>";
        }elseif($row['Field']=='mail'){
            echo "<th>E-mail</th>";
        }elseif($row['Field']=='ifcheck'){
            echo "<th>审核状态</th>";
        }else{
            echo "<th>  </th>";
        }
}
echo "</tr>";
//导出数据
$sql = "select * from `{$diy->table}`";
$res = mysql_query($sql);
while($row = mysql_fetch_array($res)){
  echo "<tr>";
    foreach($t_field as $f_key){
        echo "<td>".$row[$f_key]."</td>";
    }
  echo "</tr>";
}
echo "</table>";
}

<!--代码结束-->

封面页,列表页,调用自定义相关关键词文章数据

封面页,列表页,调用网站带某关键词文章的数据

{dede:arclist row=5 titlelen=36 orderby=pubdate keyword=’关键词’ typeid=’栏目id’}

<li>[field:textlink/]</li> 或者 <li><a href=”[field:arcurl/]”>[field:fulltitle/]</a><p> [field:description/]…</p></li>

{/dede:arclist}

 

 

具体的代码根据自身网站来填写,搞定,收工

 

哈哈哈哈

Dede列表页调用图集内容多张图片的方法

新做一个以图片为主的网站,采用的DEDECMS图集,列表页要求直接调内容面的大图,解决方法如下:(主要是采用php的正则匹配函数preg_match_all函数来巩固复习下该函数:preg_match_all(“正则表达式”,匹配的内容,保存在数组中);保存在数组中的数据是 按照这样的格式进行保存的数组[0] 是 符合条件的 一条 语句;数组[1][2][3]…等等内容分别是正则表达式 第1、2、3个匹配符 所匹配的 数据preg_match_all 匹配出来的 该数组是三维数组也就是说数组[1]仍旧是一个数组)

 

1、在include/common.func.php 中添加以下函数代码

代码如下:
// 在图集列表中调出图集的所有图片
function Getimgs($aid, $imgwith = 220, $imgheight = 80, $num = 0, $style = ”){
global $dsql;
$imgurls = ”;
$row = $dsql -> getone(“Select * From`dede_addonimages` where aid=’$aid'”); //
$imgurls = $row[‘imgurls’];
preg_match_all(“/{dede:img (.*)}(.*){\/dede:img/isU”, $imgurls, $wordcount);
$count = count($wordcount[2]);
if ($num > $count || $num == 0){
$num = $count;
}
for($i = 0;$i < $num;$i++){
if($style == ‘li’){
$imglist .= “<li><a href=#” . $i . “><imgsrc=”. trim($wordcount[2][$i]) . ” width=” . $imgwith . ” height=” . $imgheight . “></a></li>”;
}else{
$imglist .= “<li><img class=’lazy’ src=’../images/grey.gif’ data-original=”. trim($wordcount[2][$i]).” width=” . $imgwith . ” height=” . $imgheight . “></li>”;
//此处用到了jquery的loadlazy延时加载插件。
}
}
return $imglist;
}

模板中 [field:id function=”Getimgs(@me,220,80,90)” /]

说明: 第一个参数 当前ID 第二个第三个, 图片尺寸。 第四个图片张数。

也可以这样用

代码如下:
{dede:arclist row=’3′} // row=3 调用三个图集
[field:id function=”Getimgs(@me,136,62,4)” /] //每个图集调用前4张
{/dede:arclist}

2、也可以这样用, 在列表页{dede:list}之间调用[field:id function=”Getimgs(@me,80,80,9)” /],例如:
{dede:list pagesize=’12’}
[field:id function=”Getimgs(@me,80,80,9)” /]
{/dede:list}
如在其它地方调用,可用:{dede:field.id function=”Getimgs(@me,400,400,10)” /}

列表页调用图集内容多张图片的方法就是以上方法,赶快试试吧!

DedeCMS一篇文章发布到多个副栏目

DedeCMS设置副栏目的功能并不完善,比如装修网站经常会出现设计师和作品进行关联;设备类型网站产品与案例关联等,封面模板一般用arclist标签调用,但调用不出来与之相关联栏目下的文章。网上的基本都是错误的,下面结合频道新增自定义字段进行修改。

开启副栏目功能

依次点击

后台 -> 系统 -> 性能选项 -> 是否启用副栏目,勾选“是”

修改部分

打开/include/taglib/arclist.lib.php,找到

if($CrossID=='') $orwheres[] = ' arc.typeid IN ('.GetSonIds($typeid).')';
else $orwheres[] = ' arc.typeid IN ('.GetSonIds($typeid).','.$CrossID.')';

修改为

if($CrossID=='') $orwheres[] = ' arc.typeid in ('.GetSonIds($typeid).') or arc.typeid2 in ('.GetSonIds($typeid).')';
else $orwheres[] = ' arctypeid in ('.GetSonIds($typeid).','.$CrossID.') or arc.typeid2 in ('.GetSonIds($typeid).','.$CrossID.')';

首页、频道封面、内容页调用方法

{dede:arclist typeid='1' channelid='1' addfields='leixing'}
标题:[field:title/]
类型:[field:leixing/]
{/dede:arclist}