广告:本人承接迁移织梦到wordpress的业务.
本文阐述了从织梦的Mysql数据库读取数据表,生成所有文章链接的方法。
本文中使用了封装了Mysql常用函数的一个模块DBUtil,代码见链接
1、确认链接的组成结构
这个信息记录在dede的分类表dede_arctype的namerule字段中;
执行SQL语句:SELECT namerule ?FROM dede_arctype;
会看到返回结果都是一个值(一般都没有修改):{typedir}/{Y}/{M}{D}/{aid}.html
这意思是,链接由以下字段组成:
{typedir}:类型的目录,来源于dede_arctype的typedir字段;{Y}{M}{D}:文章发布的时间,来源于dede_archives表的pubdate字段;{aid}:文章ID,来源于dede_archives的ID字段;
2、读取Mysql,拼凑URL
大致过程:
读取mysql的dede_arctype表和dede_archives,得到所有链接信息(包括文章ID、类型名称、类型目录、标题、发布日期、自定义文件名)对于每一个链接,根据第1步骤的介绍装备链接;至此已经拿到了所有的链接ID、链接标题和链接URL。
# -*- encoding:utf8 -*-from common import DBUtilimport pprintimport datetimedbUtil = DBUtil.DB('127.0.0.1',3306,'root','','oiayafnq_lwqn')site_home_url = "http://www.crazyant.net"class Link(): def __init__(self, p_linkid, p_title, p_linkurl): self.linkid=p_linkid self.title=p_title self.linkurl=p_linkurl def __str__(self): strv="%s\n%s\n%s\n"%(self.linkid,self.title,self.linkurl) return strvclass DedeLinks(): def __init__(self): self.allLinks=[] def getDbArticlesInfo(self): ''' 获取数据库中链接的信息以及对应的分类 ''' rs = dbUtil.query(''' SELECT dede_archives.id,dede_arctype.typename,dede_arctype.typedir,typeid,title,pubdate,filename FROM dede_archives,dede_arctype WHERE dede_archives.typeid=dede_arctype.id; ''') return rs def equipLink(self, typedir, urldate, filename, linkid): ''' 根据分类目录、发布文章日期、自定义连接名(可以为空),链接ID,拼接成一个URL ''' article_date=str(datetime.date.fromtimestamp(urldate)).replace("-","") #print filename link_dir = "%s/%s/%s"%(typedir,article_date[:4],article_date[4:]) if filename.strip()!="": link = "%s/%s.html"%(link_dir,filename) else: link = "%s/%s.html"%(link_dir,linkid) link = link.replace("{cmspath}",site_home_url) return link def getAllDedeLinks(self): rs = self.getDbArticlesInfo() for row in rs: (linkid,typename,typedir,typeid,title,pubdate,filename) = row linkurl =self.equipLink(typedir, pubdate, filename, linkid) linkNode = Link(linkid, title, linkurl) self.allLinks.append(linkNode) def process(self): self.getAllDedeLinks()if __name__=="__main__": dlinks = DedeLinks() dlinks.process() for linkNode in dlinks.allLinks: print linkNode
其他模块可以访问该模块,采用dlinks.allLinks来访问所有的链接,其中的每个列表元素均包括链接ID、链接标题和链接URL。
转载请注明来源:织梦dede迁移读取织梦mysql生成所有文章链接
原文地址:[织梦DEDE迁移]读取织梦MySQL生成所有文章链接, 感谢原作者分享。 读书须用意,一字值千金。