CMSimple Drupal Yii 內容管理系統三方案 - 提升台灣中小企業競爭力

目前位置:   首頁 > CMS Projects > CMSimply

CMSimply

CMSimply 是一個希望利用 Python + CherryPy 編寫類似 CMSimple 的簡潔網際內容管理系統, CMSimple 內容管理系統建構的原理非常簡單, 使用者透過網際介面負責維護一個 content.htm 超文件檔案, 而 CMSimple 則負責解讀 content.htm 中的 h1, h2 與 h3 標註, 分別將 h1, h2, h3 標註中的標題當作頁面標題, 而各標題所屬的內容則是各分段頁面內容, 而且標題標註有從屬關係, h1 代表第一階的頁面標題, h2 則隸屬 h1, 而 h3 則隸屬 h2 標題等.

初步的 Python3 程式如下:

#coding: utf-8
import re
def file_get_contents(filename):
    # 以 utf-8 編碼開啟檔案, 之後再讀取檔案內容傳回
    with open(filename, encoding="utf-8") as file:
        return file.read()
def parse_content():
    subject = file_get_contents("content.htm")
    content_sep = '#@CMSIMPLY_SPLIT@#'
    head_level = 3
    content = re.split('</body>', subject)
    result = re.sub('<h[1-'+str(head_level)+']>', content_sep, content[0])
    # 去掉第一個包含 html 與 body 標註的元素
    data = result.split(content_sep)[1:]
    head_list = []
    page_list = []
    order = 1
    for 索引 in range(len(data)):
        #page_data = re.sub('</h[1-'+str(head_level)+']>', content_sep, data[索引])
        page_data = re.sub('</h', content_sep, data[索引])
        # 標題尾碼以 @@_1_@@ ~ @@_3_@@ 標示 level
        '''
        head = page_data.split(content_sep)[0]+"@@_"+ \
                    page_data.split(content_sep)[1][0:1]+"_"+str(order)+"@@"
        '''
        head = page_data.split(content_sep)[0]
        order += 1
        head_list.append(head)
        # 將頁面內容之前兩個字元 1> 或 2> 或 3> 去除
        page = page_data.split(content_sep)[1][2:]
        page_list.append(page)
    return head_list, page_list
        #print(head.encode("utf-8"))
        #print(page.encode("utf-8"))
        #print(data[索引].encode("utf-8"))
# 由 head 標題搜尋對應的頁面內容
def search_content(head, page, search):
    return page[head.index(search)]
head = []
page = []
head, page = parse_content()
'''
for 索引 in range(len(head)):
    print(head[索引].encode("utf-8"))
    print(page[索引].encode("utf-8"))
print(head.index('延伸程式執行'))
'''
print(search_content(head, page, "News02"))

 納入 CherryPy:

#coding: utf-8
'''
CMSimply 是一個以 Python3 與 CherryPy 編寫的簡單內容管理系統, 主要建構流程參考 CMSimple
'''
import cherrypy
import re
import os.path
def file_get_contents(filename):
    # 以 utf-8 編碼開啟檔案, 之後再讀取檔案內容傳回
    with open(filename, encoding="utf-8") as file:
        return file.read()
# 由 head 標題搜尋對應的頁面內容
def search_content(head, page, search):
    return page[head.index(search)]
def parse_content():
    if not os.path.isfile("content.htm"):
        return ["heading"], ["content"]
    subject = file_get_contents("content.htm")
    content_sep = '#@CMSIMPLY_SPLIT@#'
    head_level = 3
    content = re.split('</body>', subject)
    result = re.sub('<h[1-'+str(head_level)+']>', content_sep, content[0])
    # 去掉第一個包含 html 與 body 標註的元素
    data = result.split(content_sep)[1:]
    head_list = []
    page_list = []
    order = 1
    for 索引 in range(len(data)):
        #page_data = re.sub('</h[1-'+str(head_level)+']>', content_sep, data[索引])
        page_data = re.sub('</h', content_sep, data[索引])
        # 標題尾碼以 @@_1_@@ ~ @@_3_@@ 標示 level
        '''
        head = page_data.split(content_sep)[0]+"@@_"+ \
                    page_data.split(content_sep)[1][0:1]+"_"+str(order)+"@@"
        '''
        head = page_data.split(content_sep)[0]
        order += 1
        head_list.append(head)
        # 將頁面內容之前兩個字元 1> 或 2> 或 3> 去除
        page = page_data.split(content_sep)[1][2:]
        page_list.append(page)
    return head_list, page_list
        #print(head.encode("utf-8"))
        #print(page.encode("utf-8"))
        #print(data[索引].encode("utf-8"))
class HelloWorld(object):
    @cherrypy.expose
    def index(self, heading=None):
        目錄 = ""
        head, page = parse_content()
        for 索引 in range(len(head)):
            目錄 += "<a href='/get_page?heading="+head[索引]+"'>"+head[索引]+"</a><br />"
        if heading == None:
            #  這裡要考慮連 content.htm 全部無內容時的情況處理
            return "<table border=1><tr><td>目錄</td><td>內容</td></tr><tr><td>"+ \
            目錄+"<td><h1>"+head[0]+"</h1>"+search_content(head, page, head[0])+"</td></tr></table>"
        else:
            return "<table border=1><tr><td>目錄</td><td>內容</td></tr><tr><td>"+ \
            目錄+"<td><h1>"+heading+"</h1>"+search_content(head, page, heading)+"</td></tr></table>"
    @cherrypy.expose
    def index_old(self):
        目錄 = ""
        # 解讀 content.html, 取得各頁面的標題與內容
        head, page = parse_content()
        for 索引 in range(len(head)):
            目錄 += "<a href='/get_page?heading="+head[索引]+"'>"+head[索引]+"</a><br />"
        #print(search_content(head, page, "News02"))
        return 目錄
    @cherrypy.expose
    def get_page(self, heading=None):
        目錄 = ""
        head, page = parse_content()
        for 索引 in range(len(head)):
            目錄 += "<a href='/get_page?heading="+head[索引]+"'>"+head[索引]+"</a><br />"
        if heading == None:
            return page[0]
        else:
            return "<table border=1><tr><td>目錄</td><td>內容</td></tr><tr><td>"+ \
            目錄+"<td><h1>"+heading+"</h1>"+search_content(head, page, heading)+"</td></tr></table>"
    @cherrypy.expose
    def edit_page(self):
        網站內容 =file_get_contents("content.htm")
        outstring = "<form method='post' action='savePage'> \
     <textarea name='page_content' cols='50' rows='10'>"+網站內容+"</textarea> \
     <input type='submit' value='send'></form>"
        return outstring
    @cherrypy.expose
    def savePage(self, page_content=None):
        # 這裡必須檢查頁面標題是否重複
        # 或者設法讓頁面標題可以重複??
        檔案 = open("content.htm", "w", encoding="utf-8")
        # 在 Windows client 端操作, 避免 textarea 每次新增 \n
        page_content = page_content.replace("\n","")
        檔案.write(page_content)
        檔案.close()
        return "已經存檔!"
        
cherrypy.quickstart(HelloWorld())

Powered by CMSimple_XH| Template: ge-webdesign.de| 登入