dedecms织梦tag keyword怎么调用相关文章?
DEDE官方的dede:likearticle是利用文章中输入的关键词或者自动分词形成的关键词来关联文章,但是有时候自动生成的关键词并不精确,造成关联不准,这里我们通过自定义一个类库文件来实现精准获取相关文章
推荐学习:织梦cms
可以单用tag来调用相关文章,也可用tag+keyword来调用相关文章(默认tag优先于keyword,可以自己排序)
在 include aglib 下添加一个liketags.lib.php 代码如下
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
<?php if(!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|1,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!=)
{
061
$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.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
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 = "
前台模板调用
1
{dede:liketags row=3 mytypeid=6 eregtype=all|tag|keyword titlelen=250 infolen=250}
[field:title/]
[field:description /]


以上就是dedecms织梦tag keyword怎么调用相关文章的详细内容,更多请关注php中文网其它相关文章!