广告:本人承接迁移织梦到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 DBUtil
import pprint
import datetime

dbUtil = DBUtil.DB('127.0.0.1',3306,'root','','oiayafnq_lwqn')

site_home_url = "http://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 strv

class 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生成所有文章链接” 有 1 条评论

发表评论

电子邮件地址不会被公开。 必填项已用*标注