分类目录归档:DEDECMS技巧

DEDECMS技巧

织梦DEDECMS超简单获取上级栏目ID及顶级栏目ID

使用时请把前面的序号去除!!!

获取上级栏目ID

XML/HTML代码
  1. {dede:field.reid/}

获取顶级栏目ID

XML/HTML代码
  1. {dede:field.typeid function=‘GetTopid(@me)’/}

获取顶级栏目id,名称及链接

XML/HTML代码
  1. {dede:field.typeid function=“gettoptype(@me,id)”/} //id
  2. {dede:field.typeid function=“gettoptype(@me,name)”/} //名称
  3. {dede:field.typeid function=“gettoptype(@me,link)”/} //链接

修改 include/helpers/extend.helper.php,在结尾增加如下代码 :

XML/HTML代码
  1. /**
  2. * 获取一个类目的顶级栏目
  3. * @param string $tid 栏目ID
  4. * @return string
  5. */
  6. if ( ! function_exists(‘gettoptype’))
  7. {
  8. function gettoptype($tid,$action)
  9. {
  10. global $dsql,$cfg_Cs;
  11. if(!is_array($cfg_Cs))
  12. {
  13. require_once(DEDEDATA.”/cache/inc_catalog_base.inc”);
  14. }
  15. if(!isset($cfg_Cs[$tid][0]) || $cfg_Cs[$tid][0]==0)
  16. {
  17. $topid = $tid;
  18. }
  19. else
  20. {
  21. $topid = GetTopid($cfg_Cs[$tid][0]);
  22. }
  23. $row = $dsql->GetOne(“SELECT * FROM `#@__arctype` WHERE id=$topid”);
  24. $toptypename = $row[‘typename’];
  25. $toptypeurl = $topid;
  26. if($action==’id’) return $topid;
  27. if($action==’name’) return $toptypename;
  28. if($action==’link’) return GetOneTypeUrlA($row);
  29. }
  30. }

dedecms列表页加载更多功能的实现

Infinite Ajax Scroll  简称 ias,无限的ajax滚动,是一款jQuery滚动ajax分页插件,当页面滚动到容器可见部分将自动异步加载数据。

插件说明

  • 炒鸡简单,不用改动程序内核文件,不用懂php代码
  • 支持“加载更多”
  • 支持“无限下拉”
  • 支持动静态
  • 支持图片延迟加载

插件的集成很简单,分以下几个步骤:

1、页面中引用jquery.js  jquery-ias.min.js

注意:jquery.js库版本必须大于1.6

<script src='/js/jquery.js'></script>
<script src="/js/jquery-ias.min.js"></script>

jquery-ias.min.js 下载链接: https://pan.baidu.com/s/1NJ8KCLj_zAJ0yB6WQxdimg 密码: p6j6

2、接着上面的js,在页面中写上插件参数

<script type="text/javascript">
var ias = $.ias({
    container: ".listbox", //包含所有文章的元素
    item: ".item", //文章元素
    pagination: ".pagelist", //分页元素
    next: ".pagelist a.nextpage", //下一页元素
});
ias.extension(new IASSpinnerExtension({
    src: "/img/load.gif", //此选项为加载时缓冲图片
    html: '<p style="text-align: center;"><img src="{src}"/></p>'
}));
ias.extension(new IASTriggerExtension({
    text: '点击加载更多', //此选项为需要点击时的文字
    html: '<p style="text-align: center; cursor: pointer;"><a>{text}</a></p>',
    offset: !1, //设置此项,如 offset:2 页之后需要手动点击才能加载,offset:!1 则一直为无限加载
}));
ias.extension(new IASNoneLeftExtension({
    text: '已经加载完成!', // 加载完成时的提示
    html: '<p style="text-align: center; cursor: pointer;"><a>{text}</a></p>',
}));
</script>

3、dedecms列表模板html代码示范,注意html代码中的 listboxitempagelistnextpage 要与上面js中的统一

<div class=”listbox“>
<ul class=”e2″>
{dede:list pagesize=’10’}
<li class=”item“><a href=”[field:arcurl/]” class=”title”>[field:title/]</a></li>
{/dede:list}
</ul>
</div>
<ul class=”pagelist“>
{dede:pagelist listitem=”next” listsize=”1″ runphp=yes}
@me = preg_replace(‘/<a\shref=([\'”]?).+?\1/’, ‘$0 class=”nextpage“‘, @me);
{/dede:pagelist}
</ul>

本站下载链接:dedecms列表页加载更多功能的实现   点击下载!!!!

dedecms最新版手机端网站上一篇下一篇链接错误的解决方法

在用织梦dedecms最新版做手机站模板的朋友都知道,织梦dedecms默认手机端网站如果用pc站的调用方式调用上一篇和下一篇,出现的网址是错误的。下面跟版网的小编为您提供解决方法,希望对您有帮助。

打开 \include\arc.archives.class.php 文件
首先查找:
1 $this->PreNext['pre'] = "上一篇:<a href='$mlink'>{$preRow['title']}</a> ";
在这段代码后面增加:
1 $this->PreNext['prem'] = "上一篇:<a href='view.php?aid={$preRow['id']}'>{$preRow['title']}</a> ";
继续查找:
1 $this->PreNext['next'] = "下一篇:<a href='$mlink'>{$nextRow['title']}</a> ";
在这段代码后面增加:
1 $this->PreNext['nextm'] = "下一篇:<a href='view.php?aid={$preRow['id']}'>{$nextRow['title']}</a> ";
继续往下查找:
1 else if($gtype=='nextimg'){
2   $rs =  $this->PreNext['nextimg'];
3 }
在这段代码后面增加:
1 else if($gtype=='prem'){
2   $rs =  $this->PreNext['prem'];
3 }
4 else if($gtype=='nextm'){
5   $rs =  $this->PreNext['nextm'];
6 }

 

手机版本专用调用标签
手机版上一篇调用代码:

1 {dede:prenext get='prem'/}
手机版下一篇调用代码:

1 {dede:prenext get='nextm'/}

织梦dedecms手机站m目录下不生成index.html实现动态更新

用dedecms会手机站首页不更新的苦恼,每次PC更新,要去删除m目录下的index.html,手机站首页才会更新,这样很麻烦,通过以下修改,让手机站首页是动态的,不生成index.html,PC端更新后,手机端首页自动更新。

把\m\index.php里面的

1
2
3
4
5
6
7
8
9
10
$row['showmod'] = isset($row['showmod'])? $row['showmod'] : 0;
if ($row['showmod'] == 1)
{
   $pv->SaveToHtml(dirname(__FILE__).'/index.html');
   include(dirname(__FILE__).'/index.html');
   exit();
else {
   $pv->Display();
   exit();
}

改成

1
2
3
$pv->SetTemplet($cfg_basedir $cfg_templets_dir "/" $row['templet']);
$pv->Display();
exit();

 

Dede实现1次同时一级、二级、三级栏目循环调用

一、修改文件:\include\taglib目录下的channel.lib.php,请将以下代码全部复制替换上述文件

<?php
function lib_channel(&$ctag,&$refObj)
{
    global $_sys_globals,$envs,$dsql;
    $attlist "typeid|0,reid|0,row|100,col|1,type|son,currentstyle|";
    FillAttsDefault($ctag->CAttribute->Items,$attlist);
    extract($ctag->CAttribute->Items, EXTR_SKIP);
    $innertext $ctag->GetInnerText();
        $cacheid = trim($cacheid);
    if($cacheid !='') {
        $likeType = GetCacheBlock($cacheid);
        if($likeType != ''return $likeType;
    }
    $reid = 0;
    $topid = 0;
    if(empty($typeid) && $envs['typeid']!=0)
    {
        $typeid $envs['typeid'];
        $reid $envs['reid'];
    }else{
        $reid=0;
    }
    if($type==''||$type=='sun'$type="son";
    if($innertext==''$innertext = GetSysTemplets("channel_list.htm");
    if($reid==0 && $typeid>0)
    {
        $dbrow $dsql->GetOne("Select reid From dede_arctype where id='$typeid' ");
        if(is_array($dbrow)) $reid $dbrow['reid'];
    }
    $likeType '';
    if($type=='top')
    {
        $sql = "Select id,typename,typedir,isdefault,ispart,defaultname,namerule2,moresite,siteurl,sitepath,description
          From dede_arctype where reid=0 And ishidden<>1 order by sortrank asc limit 0,$row";
    }
    else if($type=="son")
    {
        //if($_sys_globals['typeid']>0) $typeid = $_sys_globals['typeid'];
        if($typeid==0) {
            return '';
        }
        $sql = "Select id,typename,typedir,isdefault,ispart,defaultname,namerule2,moresite,siteurl,sitepath,description
          From dede_arctype where reid='$typeid' And ishidden<>1 order by sortrank asc limit 0,$row";
    }
    else if($type=="self")
    {
        if($reid==0) {
            return '';
        }
        $sql = "Select id,typename,typedir,isdefault,ispart,defaultname,namerule2,moresite,siteurl,sitepath,description
            From `dede_arctype` where reid='$reid' And ishidden<>1 order by sortrank asc limit 0,$row";
    }
    //And id<>'$typeid'
    $needRel = false;
    $dtp2 new DedeTagParse();
    $dtp2->SetNameSpace("field","[","]");
    $dtp2->LoadSource($innertext);
    $dsql2 clone $dsql;
    $dsql->SetQuery($sql);
    $dsql->Execute();
    $line $row;
        //检查是否有子栏目,并返回rel提示(用于二级菜单)
    if(ereg(':rel'$innertext)) $needRel = true;
   
    if(empty($sql)) return '';
    $dsql->SetQuery($sql);
    $dsql->Execute();
   
    $totalRow $dsql->GetTotalRow();
    $GLOBALS['autoindex'] = 0;
    for($i=0;$i $line;$i++)
    {
        if($col>1) $likeType .= "<dl>\r\n";
        for($j=0;$j<$col;$j++)
        {
            if($col>1) $likeType .= "<dd>\r\n";
            if($row=$dsql->GetArray())
            {
                            $row['sonids'] = $row['rel'] = '';
                if($needRel)
                {
                    $row['sonids'] = GetSonIds($row['id'], 0, false);
                    if($row['sonids']==''$row['rel'] = '';
                    else $row['rel'] = " rel='dropmenu{$row['id']}'";
                }
                //处理同级栏目中,当前栏目的样式
                if( ($row['id']==$typeid || ($topid==$row['id'] && $type=='top') ) && $currentstyle!='' )
                {
                    if($currentstyle!='')
                    {
                    $linkOkstr $currentstyle;
                    $row['typelink'] = GetOneTypeUrlA($row);
                    $linkOkstr str_replace("~rel~",$row['rel'],$linkOkstr);
                    $linkOkstr str_replace("~id~",$row['id'],$linkOkstr);
                    $linkOkstr str_replace("~typelink~",$row['typelink'],$linkOkstr);
                    $linkOkstr str_replace("~typename~",$row['typename'],$linkOkstr);
                    $likeType .= $linkOkstr;
                    }
                }else
                {
                    $row['typelink'] = $row['typeurl'] = GetOneTypeUrlA($row);
                    if(is_array($dtp2->CTags))
                    {
                        foreach($dtp2->CTags as $tagid=>$ctag){
                            if(isset($row[$ctag->GetName()]))
                            {
                                $dtp2->Assign($tagid,$row[$ctag->GetName()]);
                            }
                            elseif (preg_match('/^sonchannel[0-9]*$/',$ctag->GetName()))
                            {
                                $dtp2->Assign($tagid,lib_channel_son($ctag,$row['id'],$dsql2));
                            }
                        }
                    }
                    $likeType .= $dtp2->GetResult();
                }
            }
            if($col>1) $likeType .= "</dd>\r\n";
            $GLOBALS['autoindex']++;
        }//Loop Col
        if($col>1)
        {
            $i += $col - 1;
            $likeType .= "    </dl>\r\n";
        }
    }//Loop for $i
    reset($dsql2);
    $dsql->FreeResult();
    return $likeType;
}
function lib_channel_son($ctag,$typeid = 0,$dsql2)
{
    $attlist "row|100,col|1,currentstyle|";
    FillAttsDefault($ctag->CAttribute->Items,$attlist);
    extract($ctag->CAttribute->Items, EXTR_SKIP);
    $innertext $ctag->GetInnerText();
    $dsql3 clone $dsql2;
    $likeType '';
    //if($_sys_globals['typeid']>0) $typeid = $_sys_globals['typeid'];
    if($typeid==0) {
        return '';
    }
    $sql = "Select id,typename,typedir,isdefault,ispart,defaultname,namerule2,moresite,siteurl,sitepath,description
          From dede_arctype where reid='$typeid' And ishidden<>1 order by sortrank asc limit 0,$row";
    //And id<>'$typeid'
    $dtp2 new DedeTagParse();
    $dtp2->SetNameSpace("field","[","]");
    $dtp2->LoadSource($innertext);
    $dsql2->SetQuery($sql);
    $dsql2->Execute();
    $line $row;
    for($i=0;$i $line;$i++)
    {
        if($col>1) $likeType .= "<dl>\r\n";
        for($j=0;$j<$col;$j++)
        {
            if($col>1) $likeType .= "<dd>\r\n";
            if($row=$dsql2->GetArray())
            {
                $row['typelink'] = $row['typeurl'] = GetOneTypeUrlA($row);
                if(is_array($dtp2->CTags))
                {
                    foreach($dtp2->CTags as $tagid=>$ctag){
                        if(isset($row[$ctag->GetName()]))
                        {
                            $dtp2->Assign($tagid,$row[$ctag->GetName()]);
                        }
                        elseif (preg_match('/^sonchannel[0-9]*$/',$ctag->GetName()))
                        {
                            $dtp2->Assign($tagid,lib_channel_son($ctag,$row['id'],$dsql3));
                        }
                    }
                }
                $likeType .= $dtp2->GetResult();
            }
            if($col>1) $likeType .= "</dd>\r\n";
        }//Loop Col
        if($col>1)
        {
            $i += $col - 1;
            $likeType .= "    </dl>\r\n";
        }
    }//Loop for $i
    reset($dsql3);
    $dsql2->FreeResult();
    return $likeType;
}
?>
二、在模板调用实例:
{dede:channel type='son' typeid='改成你的大栏目ID'}
              [field:typename/]
                    <ul>
                    [field:sonchannel0]
                    <li><a href="[field:typelink/]">[field:typename/]</a></li>
                         [field:sonchannel1]
                        <li><a href="[field:typelink/]">---[field:typename/]</a></li>
                             [field:sonchannel2]
                            <li><a href="[field:typelink/]">===[field:typename/]</a></li>
                                [field:sonchannel3]
                                <li><a href="[field:typelink/]">===[field:typename/]</a></li>
                                 [/field:sonchannel3]
                             [/field:sonchannel2]
                         [/field:sonchannel1]
                    [/field:sonchannel0]
                    </ul>
 {/dede:channel}
模板调用    [field:sonchannel0] [/field:sonchannel0] 这个是用来取子栏目用的(使用[sonchannel+数字] 作为标签名是为了防止嵌套的时候无法正确解析标签)这个的作用就是当你的栏目有很多子栏目 无限分级的时候方便你取子栏目的。

织梦自定义表单用js控制必填选项

织梦自定义表单用js控制必填选项代码如下:

 

<script language='javascript'>
function Checkfeedback() {
if (document.myform.name.value.length == 0) {
alert('您的姓名 不能为空');
document.myform.name.focus();
return false;
}
if (document.myform.qq.value.length == 0) {
alert('QQ号码 不能为空');
document.myform.qq.focus();
return false;
}
if (document.myform.email.value.length == 0) {
alert('email 不能为空');
document.myform.email.focus();
return false;
}
if (document.myform.tel.value.length == 0) {
alert('手机 不能为空');
document.myform.tel.focus();
return false;
}
}
</script>


<form action="http://127.0.0.1/plus/diy.php" method="post"

name='myform' onSubmit='return Checkfeedback();'>

关于人人商城小程序开发中遇到的坑

一、首次登陆下叫程序获取用户openid不准确问题
如第一次获取sns_wa
第二次获取sns_wa_sns_wa
等这些空数据 ,使用户进入会员中心也重复验证 还是无法或许信息,只能关闭重新打开小程序才可以

  • 文件路径:..\addons\ewei_shopv2\plugin\app\core\mobile\wxapp.php

修复代码如下:

  • //方法名
  • function check()
  • //修改如下 判断多增加两个条件 openid赋值时也判断下前缀是否重复
  • if( empty($openid) || $openid == ‘sns_wa_’ || $openid == ‘sns_wa_sns_wa_’)
  • {
  • app_error(AppError::$ParamsError);
  • }
  • if(strpos($openid,‘sns_wa_’)!==false){
  • $wxopenid = $openid;
  • }else{
  • $wxopenid = “sns_wa_” . $openid;
  • }

解决思路大概就是获取空openid时返回错误信息 让小程序前端重新获取用户信息,然后传入sns_wa_开头的openid时将重复头部去除来获取正常的openid进行查询,避免重复插入sns_wa_及sns_wa_sns_wa_,也避免重复获取该无用户的用户数据
二、自动授权弹出废除后导致重复授权的解决方法
原理:微信小程序更新后,只有第一次打开页面时调用app.js里的onLaunch方法,解决方法就是用户获取用户信息后再次调用改方法
> bindgetuserinfo
> 用户点击该按钮时,会返回获取到的用户信息,回调的detail数据与wx.getUserInfo返回的一致 open-type=”getUserInfo”
> 基础库1.3.0
WXML
//授权按钮增加获取用户信息方法同意`
JS

  • var i = getApp();
  • bindGetUserInfo:function(e){
  • i.onLaunch()
  • },

三、因二中重复获取用户信息,ios可能存在打开分享页面丢失上级参数mid的问题(无法绑定上级关系)
原理: 在首次调用login的时候把mid存在了全局变量$_W里,在分销方法中判断:如果全局变量$_W的mid存在,而$_GPC的mid不存在,则让$mid=$_W里的mid。
路径1:addonsewei_shopv2pluginappcoremobilewxapp.php
方法名:login()

  • //保存mid
  • if($_GPC[‘mid’]){
  • $_W[‘up_mid’] = intval($_GPC[‘mid’]);
  • }

路径2:addonsewei_shopv2plugincommissioncoremodel.php
方法名:checkAgent()

  • $parent = false;
  • $mid = intval($_GPC[‘mid’]);
  • //获取保存的mid
  • if (empty($mid) &amp;&amp; $_W[‘up_mid’]&gt;0){
  • $mid = $_W[‘up_mid’];
  • }
  • if (!(empty($mid)))
  • {
  • $parent = m(‘member’)-&gt;getMember($mid);
  • }
 

织梦多条件联动筛选带删除功能教程

多条件筛选功能常用在图片、装修、机械设备、商城网站等,一般筛选的条件是用户较关注的项目,没必要什么条件都加入。DedeCMS多条件筛选PHP开发并不带有删除所选条件功能,PHP筛选和JS筛选原理不一样,实现起来并不复杂。

装修效果图实现多条件联动筛选带删除功能分享给大家。

效果参考图

点击“x”符号即可删除筛选条件。

52918-1pq0104pk55

先参考文章《织梦多条件筛选以筛选词为SEO标题教程》,下载两个必要的文件

修改下载后的extend.func.php文件,找到

}

}

}

}

echo $dede_addonfields;

}

在这段代码之前(switch条件case 2 的下面增加case 3)增加如下代码:

1
2
3
4
5
6
7
8
9
case 3:
  $addonfields_items = explode(“,”,$ctag->GetAtt(‘default’));
  for ($i=0; $i<count($addonfields_items); $i++)
  {
  $href = stripos($filterarr,$ctag->GetName() . ‘=’ ) ?  str_replace(“=” . $fields_value,”=” . urlencode($addonfields_items[$i]),$filterarr) : $filterarr . ‘&’ . $ctag->GetName() . ‘=’ . urlencode($addonfields_items[$i] );//echo $href;
  $dede_addonfields .= $fields_value != urlencode($addonfields_items[$i]) ? ” : ‘<span class=”tiao”>’ . $addonfields_items[$i];
  }
  $dede_addonfields .= (preg_match(“/&”.$ctag->GetName().”=/is”,$filterarr,$regm) ? ‘<a title=”删除” href=”‘ . $GLOBALS[‘cfg_basehost’] . str_replace(“&” . $ctag->GetName() . “=” . $fields_value,””,$filterarr) . ‘”> x </a></span>’ : ”);
  break;

模板部分PHP调用

增加未筛选时不显示“筛选条件”字样,用PHP判断自定义字段不为空则显示。

 

<p class="textc yixuan">
  {dede:php}
  $a = $_GET['zxfg'];
  $b = $_GET['hx'];
  $c = $_GET['zxmj'];
  if($a != '' || $b != '' || $c != '')
  echo "筛选条件:";
  AddFilter(7,3,'zxfg,hx,zxmj'); //“7”是自定义字段(橙色部分)所在的频道模型ID,“3”是上面修改部分,下面同理;
  {/dede:php}
  </p>
  <div class="shaixuanbox">
  {dede:php}
  AddFilter(7,1,'zxfg,hx,zxmj');
  {/dede:php}
  </div>


CSS样式:
.shaixuanbox{width:100%;height:auto;margin:0 auto 10px;border-bottom:1px solid #c0c0c0}
  .shaixuan{padding:10px;text-align:left;font-size:14px;line-height:14px}
  .shaixuan a{margin:0 6px;color:#000}
  .shaixuan a:hover{color:#32B9AB}
  .shaixuan .hover,.shaixuan span{padding:0 5px;color:#fff;background:#32B9AB}
  .tiao{position:relative;padding:0 20px 0 5px;border:1px solid #eee;border-radius:5px;margin-right:5px;}
  .tiao a{position:absolute;right:5px;top:0;font-size:20px;color:#ccc;line-height:31px;}
  .tiao a:hover{text-decoration:none;}

qq企业邮箱价格计算公式-html源码+js

qq企业邮箱价格计算公式

qq企业邮箱价格计算公式

qq企业邮箱价格计算公式

qq企业邮箱价格计算公式

qq企业邮箱价格计算公式

qq企业邮箱价格计算公式

qq企业邮箱价格计算公式

qq企业邮箱价格计算公式

qq企业邮箱价格计算公式

qq企业邮箱价格计算公式

qq企业邮箱价格计算公式

qq企业邮箱价格计算公式

qq企业邮箱价格计算公式

qq企业邮箱价格计算公式