找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 138|回复: 0

[cms教程] 织梦文章tag标签或者文章keyword关键字调用相关文章

[复制链接]

该用户从未签到

发表于 2019-5-15 09:53:56 | 显示全部楼层 |阅读模式

您需要 登录 才可以下载或查看,没有账号?立即注册

×
官方的dede:likearticle并没有那么精准的输出相关文章,下面我们自定义一个类库文件来实现精准获取相关文章,支持直接输出自定义字段,支持flag文章属性,非常适合SEO
         
        eregtype='all|tag|keyword',单用tag来调用相关文章,也可用tag|keyword来调用相关文章(默认tag优先于keyword,可以自己排序)
         
        在 /include/taglib 下添加一个 liketags.lib.php 文件代码如下
         
       
        if(!defined('DEDEINC')) exit('Request Error!');
        function lib_liketags(&$ctag,&$refObj)
        {
            global $dsql,$envs;
            
            //属性处理
            $attlist="row|12,titlelen|30]infolen|250]col|1,tablewidth|100]typeid|0]byabs|0]imgwidth|120]imgheight|90]flag|";
            FillAttsDefault($ctag->CAttribute->Items,$attlist);
            extract($ctag->CAttribute->Items, EXTR_SKIP);
            $revalue = '';
            
            if(empty($tablewidth)) $tablewidth = 100;
            if(empty($col)) $col = 1;
            $colWidth = ceil(100/$col);
            $tablewidth = $tablewidth."%";
            $colWidth = $colWidth."%";
        $orwheres = '';
        if($flag != '') {
        $flags = explode(',', $flag);
        for($i=0; isset($flags[$i,); $i++) $orwheres .= " AND FIND_IN_SET('{$flags[$i,}', arc.flag)>0 ";
        }
         
            $ids = array();
            $tids = array();
            
            if(!empty($refObj->Fields['tags',)) {
                $keyword = $refObj->Fields['tags',;
            }
            else {
                $keyword = ( !empty($refObj->Fields['keywords',) ? $refObj->Fields['keywords', : '' );
            }
            
            $typeid = ( !empty($typeid) ? $typeid : 0 );
            if(empty($typeid))
            {
                if(!empty($refObj->Typelink->TypeInfos['reid',)) {
                     $typeid = $refObj->Typelink->TypeInfos['reid',;
                }
                else {
                     if(!empty($refObj->Fields['typeid',)) $typeid = $refObj->Fields['typeid',;
                }
            }
            
            if( !empty($typeid) && !preg_match('#,#', $typeid) ) {
                $typeid = GetSonIds($typeid);
            }
            
        if(!empty($refObj->Fields['tags',) && $eregtype != 'keyword' )
        {
        $tags = explode(',', addslashes($refObj->Fields['tags',));
        $getsql = " tag like '".join("' OR tag like '", $tags)."' ";
        $dsql->Execute('me', "Select * From `dede_tagindex` where $getsql ");
        while($arow = $dsql->GetArray('me'))
        {
        $tids[, = $arow['id',;
        }
        $tid = join(',', $tids);
        if($tid!='')
        {
        $dsql->Execute("me", "Select aid From `dede_taglist` where tid in($tid) And arcrank > -1 group by aid order by aid desc");
        while($arow = $dsql->GetArray("me"))
        {
        $ids[, = $arow['aid',;
        $arcid =  $refObj->Fields['aid',;
        }
        }
        }
         
        //获得附加表的相关信息
        $addField = "";
        $addJoin = "";
        if(is_object($refObj->ChannelUnit))
        {
        $addtable  = $refObj->ChannelUnit->ChannelInfos['addtable',;
        if($addtable!="")
        {
        $addJoin = " LEFT JOIN $addtable ON arc.id = ".$addtable.".aid ";
        $addField = "";
        $fields = explode(",",$refObj->ChannelUnit->ChannelInfos['listfields',);
        foreach($fields as $k=>$v)
        {
        $nfields[$v, = $k;
        }
        foreach($refObj->ChannelUnit->ChannelFields as $k=>$arr)
        {
        if(isset($nfields[$k,))
        {
        if(!empty($arr['rename',))
        {
        $addField .= ",".$addtable.".".$k." as ".$arr['rename',;
        }
        else
        {
        $addField .= ",".$addtable.".".$k;
        }
        }
        }
        }
        }
         
        if($eregtype == 'tag' && count($ids) == 0 )
        {
        return;
        }
        else
        {
        if(count($ids) > 0)
        {
        if(!empty($typeid))
        {
        $typeid = " And arc.typeid in($typeid) And arc.id$arcid ";
        }
        $idsStr = join(',', $ids);
        $query = "Select arc.*,tp.typedir,tp.typename,tp.corank,tp.isdefault,tp.defaultname,tp.namerule,
        tp.namerule2,tp.ispart,tp.moresite,tp.siteurl]tp.sitepath $addField
        from `dede_archives` arc left join `dede_arctype` tp on arc.typeid=tp.id $addJoin
        where arc.arcrank>-1 and arc.id in($idsStr) $typeid order by arc.id desc limit 0] $row";
        }
        else
        {
        $limitRow = $row - count($ids);
        $keyword = '';
        if(!empty($refObj->Fields['keywords',))
        {
        $keywords = explode(',' , trim($refObj->Fields['keywords',));
        $keyword = '';
        $n = 1;
        foreach($keywords as $k)
        {
        if($n > 3)  break;
         
        if(trim($k)=='') continue;
        else $k = addslashes($k);
         
        $keyword .= ($keyword=='' ? " CONCAT(arc.keywords,' ',arc.title) like '%$k%' " : " OR CONCAT(arc.keywords,' ',arc.title) like '%$k%' ");
        $n++;
        }
        }
        $arcid = (!empty($refObj->Fields['id',) ? $refObj->Fields['aid', : 0);
        if( empty($arcid) || $byabs==0 )
        {
        $orderquery = " order by arc.id desc ";
        }
        else
        {
        $orderquery = " order by ABS(arc.id - ".$arcid.") ";
        }
        if($keyword != '')
        {
        if(!empty($typeid))
        {
        $typeid = " And arc.typeid in($typeid) And arc.id$arcid ";
        }
        $query = "Select arc.*,tp.typedir,tp.typename,tp.corank,tp.isdefault,tp.defaultname,tp.namerule,
        tp.namerule2,tp.ispart,tp.moresite,tp.siteurl]tp.sitepath $addField
        from `dede_archives` arc left join `dede_arctype` tp on arc.typeid=tp.id $addJoin
        where arc.arcrank>-1 and ($keyword)  $typeid $orderquery limit 0] $row";
        }
        else
        {
        if(!empty($typeid))
        {
        $typeid = " arc.typeid in($typeid) And arc.id$arcid ";
        }
        $query = "Select arc.*,tp.typedir,tp.typename,tp.corank,tp.isdefault,tp.defaultname,tp.namerule,
        tp.namerule2,tp.ispart,tp.moresite,tp.siteurl]tp.sitepath $addField
        from `dede_archives` arc left join `dede_arctype` tp on arc.typeid=tp.id $addJoin
        where arc.arcrank>-1 and  $typeid $orderquery limit 0] $row";
        }
        }
        }
         
            $innertext = trim( $ctag->GetInnerText() );
            if($innertext=='') $innertext = GetSysTemplets('part_arclist.htm');
            $dsql->SetQuery($query);
            $dsql->Execute('al');
            $artlist = '';
            if($col > 1){
                $artlist = "";
            }
            $dtp2 = new DedeTagParse();
            $dtp2->SetNameSpace('field', '[', ',');
            $dtp2->LoadString($innertext);
            $GLOBALS['autoindex', = 0;
            $line = $row;
            for($i=0; $i
            {
                if($col>1) $artlist .= "";
                for($j=0; $j
                {
                    if($col>1) $artlist .= "    ";
                    if($row = $dsql->GetArray("al"))
                    {
                        $ids[, = $row['id',;
                        //处理一些特殊字段
                        $row['info', = $row['infos', = cn_substr($row['description',,$infolen);
                        $row['id', =  $row['id',;
         
                        if($row['corank', > 0 && $row['arcrank',==0)
                        {
                            $row['arcrank', = $row['corank',;
                        }
         
                        $row['filename', = $row['arcurl', = GetFileUrl($row['id',,$row['typeid',,$row['senddate',,$row['title',,$row['ismake',,
                        $row['arcrank',,$row['namerule',,$row['typedir',,$row['money',,$row['filename',,$row['moresite',,$row['siteurl',,$row['sitepath',);
         
                        $row['typeurl', = GetTypeUrl($row['typeid',,$row['typedir',,$row['isdefault',,$row['defaultname',,$row['ispart',,
                        $row['namerule2',,$row['moresite',,$row['siteurl',,$row['sitepath',);
         
                        if($row['litpic', == '-' || $row['litpic', == '')
                        {
                            $row['litpic', = $GLOBALS['cfg_cmspath',.'/images/defaultpic.gif';
                        }
                        if(!preg_match("#^http://#i", $row['litpic',) && $GLOBALS['cfg_multi_site', == 'Y')
                        {
                            $row['litpic', = $GLOBALS['cfg_mainsite',.$row['litpic',;
                        }
                        $row['picname', = $row['litpic',;
                        $row['stime', = GetDateMK($row['pubdate',);
                        $row['typelink', = "[url=".$row[,".$row['typename',."[/url]";
                        $row['image', = "
[img]".$row[[/img]

                        $row['fulltitle', = $row['title',;
                        $row['title', = cn_substr($row['title',, $titlelen);
                        if($row['color',!='') $row['title', = "
[color=,".$row['title',."
";
                        if(preg_match('#b#', $row['flag',)) $row['title', = "".$row['title',."";
                        $row['textlink', = "[url=".$row[,".$row['title',."[/url]";
                        $row['plusurl', = $row['phpurl', = $GLOBALS['cfg_phpurl',;
                        $row['memberurl', = $GLOBALS['cfg_memberurl',;
                        $row['templeturl', = $GLOBALS['cfg_templeturl',;
                        
                        if(is_array($dtp2->CTags))
                        {
                            foreach($dtp2->CTags as $k=>$ctag)
                            {
                                if($ctag->GetName()=='array') {
                                    $dtp2->Assign($k,$row);
                                }
                                else {
                                    if(isset($row[$ctag->GetName()])) $dtp2->Assign($k,$row[$ctag->GetName()]);
                                    else $dtp2->Assign($k,'');
                                }
                            }
                            $GLOBALS['autoindex',++;
                        }
         
                        $artlist .= $dtp2->GetResult();
                    }
                    //if hasRow
                    else
                    {
                        $artlist .= '';
                    }
                    if($col>1) $artlist .= "    ";
                }
                //Loop Col
                if($col>1) $i += $col - 1;
                if($col>1) $artlist .= "    ";
            }
            //loop line
            if($col>1) $artlist .= "";
            $dsql->FreeResult("al");
            return $artlist;
        }
        前台模板标签调用写法
         
        {dede:liketags row='3' typeid='6' titlelen='250' eregtype='all|tag|keyword' flag='c' infolen='250'}
        [*,
        [url=,
       
       
[img][/img]

       
       
        [field:title/]

        ¥[field:jiage/]元

       
        [/url]
       
        {/dede:liketags}
回复

使用道具 举报

网站地图|页面地图|文字地图|Archiver|手机版|小黑屋|找资源 |网站地图

GMT+8, 2024-11-29 05:42

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表