投稿 评论 顶部

dedecms织梦tag+keyword调用相关文章

佚名 织梦教程

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146

147

148

149

150

151

152

153

154

155

156

157

158

159

160

161

162

163

164

165

166

167

168

169

170

171

172

173

174

175

176

177

178

179

180

181

182

183

184

185

186

187

188

189

190

191

192

193

194

195

196

197

198

199

200

201

202

203

204

205

206

207

208

209

210

211

212

213

214

215

216

217

218

219

220

221

222

223

224

225

226

227

228

<?phpif(!defined('DEDEINC')) exit('Request Error!');function lib_liketags(&$ctag,&$refObj){

    global $dsql;

     

    //属性处理

    $attlist="row|12,titlelen|30,infolen|250,col|1,tablewidth|100,mytypeid|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($mytypeid) ? $mytypeid : 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'];

            }

        } 

    }

    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 

            from `dede_archives` arc left join `dede_arctype` tp on arc.typeid=tp.id 

            where 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 

                from `dede_archives` arc left join `dede_arctype` tp on arc.typeid=tp.id 

                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 

                from `dede_archives` arc left join `dede_arctype` tp on arc.typeid=tp.id 

                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 = "<table width='$tablewidth' border='0' cellspacing='0' cellpadding='0'>\r\n";

    }

    $dtp2 = new DedeTagParse();

    $dtp2->SetNameSpace('field', '[', ']');

    $dtp2->LoadString($innertext);

    $GLOBALS['autoindex'] = 0;

    $line = $row;

    for($i=0; $i < $line; $i++)

    {

        if($col>1) $artlist .= "<tr>\r\n";

        for($j=0; $j < $col; $j++)

        {

            if($col>1) $artlist .= "    <td width='$colWidth'>\r\n";

            if($row = $dsql->GetArray("al"))

            {

                $ids[] = $row['id'];

                //处理一些特殊字段 www.dede58.com织梦模板

                $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'] = "<a href='".$row['typeurl']."'>".$row['typename']."</a>";

                $row['image'] = "<img src='".$row['picname']."' border='0' width='$imgwidth' height='$imgheight' alt='".preg_replace("#['><]#","",$row['title'])."'>";

                $row['imglink'] = "<a href='".$row['filename']."'>".$row['image']."</a>";

                $row['fulltitle'] = $row['title'];

                $row['title'] = cn_substr($row['title'], $titlelen);

                if($row['color']!='') $row['title'] = "<font color='".$row['color']."'>".$row['title']."</font>";

                if(preg_match('#b#', $row['flag'])) $row['title'] = "<strong>".$row['title']."</strong>";

                $row['textlink'] = "<a href='".$row['filename']."'>".$row['title']."</a>";

                $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()."\r\n";

            }

            //if hasRow

            else

            {

                $artlist .= '';

            }

            if($col>1) $artlist .= "    </td>\r\n";

        }

        //Loop Col

        if($col>1) $i += $col – 1;

        if($col>1) $artlist .= "    </tr>\r\n";

    }

    //loop line

    if($col>1) $artlist .= "    </table>\r\n";

    $dsql->FreeResult("al");

    return $artlist;}

 

 

前台模板调用

1

2

3

4

5

6

7

8

9

10

11

12

13

{dede:liketags row='3' mytypeid='6' eregtype='all|tag|keyword' titlelen='250' infolen='250'}

<li>

<a href="[field:arcurl/]" title="[field:title/]" target="_blank">

<div>

<img src="[field:litpic/]" alt="[field:title/]"/>

</div>

<div>

<p>[field:title/]</p>

<p>[field:description /]</p>

</div>

</a>

</li>

{/dede:liketags}

官方的dede:likearticle并没有那么精准的输出相关文章,下面我们自定义一个类库文件来实现精准获取相关文章

单用tag来调用相关文章,也可用tag+keyword来调用相关文章(默认tag优先于keyword,可以自己排序)非常适合SEO

在 \include\taglib\ 下添加一个liketags.lib.php 代码如下