dedecms 添加自定义标签显示非dede表数据
需求:调用一个商城系统里面的产品数据到dedecms文章页,希望对需要类似需求的人有所帮助
功能实现:为了不用垮数据库查询,dedecms安装到商城系统数据库里面
下面是实现的代码(请根据自己的环境进行修改)
include/taglib/hongyungoods.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
|
<?php /** * @author http://blog.runphp.net/ */ if (!defined( 'DEDEINC' )) exit ( 'Request Error!' ); function lib_hongyungoods(& $ctag , & $refObj ) { global $dsql , $envs , $cfg_cmsurl ; //属性处理 $attlist = "row|6,titlelen|0,tid|0" ; FillAttsDefault( $ctag ->CAttribute->Items, $attlist ); extract( $ctag ->CAttribute->Items, EXTR_SKIP); //只在指定栏目显示 if ( $tid >0 && $tid != $envs [ 'typeid' ]) return '' ; if ( ! $dsql ->IsTable( "sl_products" ) ) return '没安装鸿运产品模块' ; $innertext = $ctag ->GetInnerText(); //@todo hongyungoods.htm if (trim( $innertext )== '' ) $innertext = GetSysTemplets( "hongyungoods.htm" ); //@todo 智能条件 $where = 1; $limit = 5; $ctp = new DedeTagParse(); $ctp ->SetNameSpace( 'field' , '[' , ']' ); $ret = '' ; $query = "SELECT p.`Name` AS title, FROM `sl_products` AS p LEFT JOIN `sl_products_sort` AS ps ON p.`SID` = ps.`ID` WHERE " . $where . " ORDER BY RAND() LIMIT " . $limit ; $dsql ->Execute( 'me' , $query ); while ( $rs = $dsql ->GetArray( 'me' )) { $rs [ 'title' ] = 0 == $titlelen ? $rs [ 'title' ]:cn_substr( $rs [ 'title' ], $titlelen ); $ctp ->LoadSource( $innertext ); foreach ( $ctp ->CTags as $tagid => $ctag ) { if (! empty ( $rs [ strtolower ( $ctag ->GetName())])) { $ctp ->Assign( $tagid , $rs [ $ctag ->GetName()]); } } $ret .= $ctp ->GetResult(); } return $ret ; } ?> |
调用页面使用:
1
2
3
4
5
6
|
{dede:hongyungoods} < dd > < span class = "tlink" >< a href = "[field:url/]" >< img src = "[field:img/]" alt = "[field:title/]" /></ a > < a href = "[field:url/]" target = "_blank" >[field:title/]</ a ></ span > </ dd > {/dede:hongyungoods}
|