CMS软件下的CROSS FIRE

CMS整合之道
本文探讨了如何利用SiteFactory的多数据源能力实现不同CMS系统间的无缝整合。通过扩展其功能,让其他系统也能调用SiteFactory的XPOWER处理引擎,从而在不同平台上实现数据互通。

 在上次的文章里,我谈到CMS发展前景时,说过我的理想是世界大同,也就是尽力让各类CMS可以打破边界,互相调用数据,目前的SiteFactory在数据源获取方面已经初步做到这一目标,通过各类外部SQL标签和格式化的XML查询,SiteFactory标签显示的内容已经不在局限于本地数据库,而是任何一个你能找到的数据源,拓扑结构如下:


 SiteFactory拥有的多数据源能力,使得CMS可以整合不同系统中的数据成为可能,CMS不在是简单的列表工具,而是可以作为一个完整的信息化解决方案核心。

 

 然而,光有多数据输入能力还是不够的,很多情况下我们还需要在整合的其他系统中调用外部数据,而大部分其他的系统并没有SiteFactory的这种多数据处理能力,如果我们可以扩展SiteFactory的功能,让其他外部系统可以使用SiteFactory的XPOWER处理引擎,那么完成这类任务就很容易了,逻辑框图如下:


 这样扩展以后,理论上任何一种外部系统(例如帝国CMS,DEDE,DISCUZ等PHP平台下的产品,各类OA,ERP等),均可以直接在它自己的模板中使用动易SiteFactory格式的标签{PE.Label …./}并在显示时取得对应的结果。经过这样的处理后,可以说同一个项目中,各类软件都可以完美的整合在一起,用户拥有极高的自由度,并且任何WEB系统经这种改造后,都可以拥有SiteFactory强大的处理数据能力。下面,我通过一个实例来简单演示一下。

 

 外部系统我选用的是SiteWaver6.8,这虽然也是动易的产品,但它是基于ASP平台,与SiteFactory毫无关联的一套程序。通过简单的改造,给SW增加外部引擎处理接口,如下图:

  
 图中的外部引擎地址API/TemplateProc.aspx就是为SiteFactory增加的一个简单的外部模板处理接口,使用HTTP协议接收请求和返回结果。经过这样的改造,就可以在SiteWaver中使用SiteFactory的标签了,下图演示为在SW的模板编辑器中中直接插入SiteFactory格式的标签。


然后在SiteFactory中建立标签“SF测试标签”

 

 

刷新SW首页,可以看到标签内容已经显示在红框内,跨站使用SiteFactory标签成功。


 

 

 用同样的方法,我们可以给任何系统增加这个功能,以PHP类软件Empire CMS举例,传统上PHP系统与.NET是两个平台下的产物,融合二者的功能并不容易,但增加了标准的调用接口后,该软件后台也可使用SiteFactory的专用标签,并能正确解析得到结果: 
 

 

应用标签后的首页效果


 

 

 

 

注:本文旨在探讨CMS类软件的发展前景,本文涉及到的产品为演示需要均经过适当修改,并不代表该产品公开发布版已具备本文所演示的功能。欢迎有同样开发兴趣的TX们探讨,我的邮箱nt2003@gmail.com

{ "name": "edx", "version": "0.1.0", "repository": "https://github.com/openedx/edx-platform", "scripts": { "postinstall": "scripts/copy-node-modules.sh", "build": "npm run webpack && npm run compile-sass", "build-dev": "cross-env npm run webpack-dev && npm run compile-sass-dev", "webpack": "cross-env NODE_ENV=development webpack --config webpack.dev.config.js", "webpack-dev": "NODE_ENV=development webpack --config=webpack.dev.config.js", "compile-sass": "scripts/compile_sass.py --env=${NODE_ENV:-production}", "compile-sass-dev": "scripts/compile_sass.py --env=development", "watch": "{ npm run watch-webpack& npm run watch-sass& } && sleep infinity", "watch-webpack": "npm run webpack-dev -- --watch", "watch-sass": "scripts/watch_sass.sh", "test": "npm run test-jest && npm run test-karma", "test-jest": "jest", "test-karma": "npm run test-karma-vanilla && npm run test-karma-require && echo 'WARNING: Skipped broken webpack tests. For details, see: https://github.com/openedx/edx-platform/issues/35956'", "test-karma-vanilla": "npm run test-cms-vanilla && npm run test-xmodule-vanilla && npm run test-common-vanilla", "test-karma-require": "npm run test-cms-require && npm run test-common-require", "test-karma-webpack": "npm run test-cms-webpack && npm run test-lms-webpack && npm run test-xmodule-webpack", "test-karma-conf": "${NODE_WRAPPER:-xvfb-run --auto-servernum} node --max_old_space_size=4096 node_modules/.bin/karma start --single-run=true --capture-timeout=60000 --browsers=FirefoxNoUpdates", "test-cms": "npm run test-cms-vanilla && npm run test-cms-require && npm run test-cms-webpack", "test-cms-vanilla": "npm run test-karma-conf -- cms/static/karma_cms.conf.js", "test-cms-require": "npm run test-karma-conf -- cms/static/karma_cms_squire.conf.js", "test-cms-webpack": "npm run test-karma-conf -- cms/static/karma_cms_webpack.conf.js", "test-lms": "npm run test-jest && npm run test-lms-webpack", "test-lms-webpack": "npm run test-karma-conf -- lms/static/karma_lms.conf.js", "test-xmodule": "npm run test-xmodule-vanilla && npm run test-xmodule-webpack", "test-xmodule-vanilla": "npm run test-karma-conf -- xmodule/js/karma_xmodule.conf.js", "test-xmodule-webpack": "npm run test-karma-conf -- xmodule/js/karma_xmodule_webpack.conf.js", "test-common": "npm run test-common-vanilla && npm run test-common-require", "test-common-vanilla": "npm run test-karma-conf -- common/static/karma_common.conf.js", "test-common-require": "npm run test-karma-conf -- common/static/karma_common_requirejs.conf.js" }, "dependencies": { "@babel/core": "7.26.0", "@babel/plugin-proposal-object-rest-spread": "^7.18.9", "@babel/plugin-transform-object-assign": "^7.18.6", "@babel/preset-env": "^7.19.0", "@edx/brand": "npm:@openedx/brand-openedx@^1.2.2", "@edx/edx-bootstrap": "1.0.4", "@edx/edx-proctoring": "^4.18.1", "@edx/frontend-component-cookie-policy-banner": "2.2.0", "@edx/paragon": "2.6.4", "@edx/studio-frontend": "^2.1.0", "@testing-library/jest-dom": "^6.6.3", "@testing-library/react": "^12.1.5", "@testing-library/user-event": "^12.8.3", "babel-loader": "^9.1.3", "babel-plugin-transform-class-properties": "6.24.1", "babel-polyfill": "6.26.0", "backbone": "1.6.0", "backbone-associations": "0.6.2", "backbone.paginator": "2.0.8", "bootstrap": "4.0.0", "camelize": "1.0.1", "classnames": "2.5.1", "cross-env": "^10.0.0", "css-loader": "7.1.2", "datatables": "1.10.18", "datatables.net-fixedcolumns": "5.0.4", "edx-ui-toolkit": "1.8.7", "exports-loader": "0.6.4", "file-loader": "^6.2.0", "font-awesome": "4.7.0", "hls.js": "0.14.17", "imports-loader": "0.8.0", "jest-environment-jsdom": "^29.0.0", "jquery": "2.2.4", "jquery-migrate": "1.4.1", "jquery.scrollto": "2.1.3", "js-cookie": "3.0.5", "moment": "2.30.1", "moment-timezone": "0.5.47", "node-gyp": "11.1.0", "popper.js": "1.16.1", "prop-types": "15.8.1", "raw-loader": "0.5.1", "react": "16.14.0", "react-dom": "16.14.0", "react-focus-lock": "^1.19.1", "react-redux": "5.1.2", "react-router-dom": "5.3.4", "react-slick": "0.30.3", "redux": "3.7.2", "redux-thunk": "2.2.0", "requirejs": "2.3.7", "rtlcss": "4.3.0", "sass": "^1.54.8", "sass-loader": "^16.0.0", "scriptjs": "2.5.9", "style-loader": "4.0.0", "svg-inline-loader": "0.8.2", "uglify-js": "3.19.3", "underscore": "1.13.7", "underscore.string": "3.3.6", "webpack": "^5.90.3", "webpack-bundle-tracker": "3.2.0", "webpack-merge": "6.0.1", "which-country": "1.0.0" }, "devDependencies": { "@babel/preset-react": "^7.27.1", "@edx/mockprock": "1.0.2", "@edx/stylelint-config-edx": "2.3.3", "babel-jest": "29.7.0", "jasmine-core": "2.6.4", "jasmine-jquery": "2.1.1", "jest": "29.7.0", "karma": "^6.4.4", "karma-chrome-launcher": "^3.2.0", "karma-coverage": "2.2.1", "karma-firefox-launcher": "2.1.3", "karma-jasmine": "^5.1.0", "karma-jasmine-html-reporter": "0.2.2", "karma-junit-reporter": "2.0.1", "karma-requirejs": "1.1.0", "karma-selenium-webdriver-launcher": "latest", "karma-sourcemap-loader": "0.4.0", "karma-spec-reporter": "0.0.20", "karma-webpack": "^5.0.1", "plato": "1.7.0", "react-test-renderer": "16.14.0", "selenium-webdriver": "^2.44.0", "sinon": "19.0.2", "squirejs": "0.1.0", "string-replace-loader": "^3.1.0", "stylelint-formatter-pretty": "4.0.1", "underscore-template-loader": "^1.2.0", "webpack-cli": "^5.1.4" } } 如何运行起来
09-25
{ "name": "edx", "version": "0.1.0", "repository": "https://github.com/openedx/edx-platform", "scripts": { "postinstall": "scripts/copy-node-modules.sh", "build": "npm run webpack && npm run compile-sass", "build-dev": "npm run webpack-dev && npm run compile-sass-dev", "webpack": "cross-env NODE_ENV=development webpack --config webpack.dev.config.js", "webpack-dev": "NODE_ENV=development webpack --config=webpack.dev.config.js", "compile-sass": "scripts/compile_sass.py --env=${NODE_ENV:-production}", "compile-sass-dev": "scripts/compile_sass.py --env=development", "watch": "{ npm run watch-webpack& npm run watch-sass& } && sleep infinity", "watch-webpack": "npm run webpack-dev -- --watch", "watch-sass": "scripts/watch_sass.sh", "test": "npm run test-jest && npm run test-karma", "test-jest": "jest", "test-karma": "npm run test-karma-vanilla && npm run test-karma-require && echo 'WARNING: Skipped broken webpack tests. For details, see: https://github.com/openedx/edx-platform/issues/35956'", "test-karma-vanilla": "npm run test-cms-vanilla && npm run test-xmodule-vanilla && npm run test-common-vanilla", "test-karma-require": "npm run test-cms-require && npm run test-common-require", "test-karma-webpack": "npm run test-cms-webpack && npm run test-lms-webpack && npm run test-xmodule-webpack", "test-karma-conf": "${NODE_WRAPPER:-xvfb-run --auto-servernum} node --max_old_space_size=4096 node_modules/.bin/karma start --single-run=true --capture-timeout=60000 --browsers=FirefoxNoUpdates", "test-cms": "npm run test-cms-vanilla && npm run test-cms-require && npm run test-cms-webpack", "test-cms-vanilla": "npm run test-karma-conf -- cms/static/karma_cms.conf.js", "test-cms-require": "npm run test-karma-conf -- cms/static/karma_cms_squire.conf.js", "test-cms-webpack": "npm run test-karma-conf -- cms/static/karma_cms_webpack.conf.js", "test-lms": "npm run test-jest && npm run test-lms-webpack", "test-lms-webpack": "npm run test-karma-conf -- lms/static/karma_lms.conf.js", "test-xmodule": "npm run test-xmodule-vanilla && npm run test-xmodule-webpack", "test-xmodule-vanilla": "npm run test-karma-conf -- xmodule/js/karma_xmodule.conf.js", "test-xmodule-webpack": "npm run test-karma-conf -- xmodule/js/karma_xmodule_webpack.conf.js", "test-common": "npm run test-common-vanilla && npm run test-common-require", "test-common-vanilla": "npm run test-karma-conf -- common/static/karma_common.conf.js", "test-common-require": "npm run test-karma-conf -- common/static/karma_common_requirejs.conf.js" }, "dependencies": { "@babel/core": "7.26.0", "@babel/plugin-proposal-object-rest-spread": "^7.18.9", "@babel/plugin-transform-object-assign": "^7.18.6", "@babel/preset-env": "^7.19.0", "@babel/preset-react": "7.26.3", "@edx/brand": "npm:@openedx/brand-openedx@^1.2.2", "@edx/edx-bootstrap": "1.0.4", "@edx/edx-proctoring": "^4.18.1", "@edx/frontend-component-cookie-policy-banner": "2.2.0", "@edx/paragon": "2.6.4", "@edx/studio-frontend": "^2.1.0", "@testing-library/jest-dom": "^6.6.3", "@testing-library/react": "^12.1.5", "@testing-library/user-event": "^12.8.3", "babel-loader": "^9.1.3", "babel-plugin-transform-class-properties": "6.24.1", "babel-polyfill": "6.26.0", "backbone": "1.6.0", "backbone-associations": "0.6.2", "backbone.paginator": "2.0.8", "bootstrap": "4.0.0", "camelize": "1.0.1", "classnames": "2.5.1", "cross-env": "^10.0.0", "css-loader": "7.1.2", "datatables": "1.10.18", "datatables.net-fixedcolumns": "5.0.4", "edx-ui-toolkit": "1.8.7", "exports-loader": "0.6.4", "file-loader": "^6.2.0", "font-awesome": "4.7.0", "hls.js": "0.14.17", "imports-loader": "0.8.0", "jest-environment-jsdom": "^29.0.0", "jquery": "2.2.4", "jquery-migrate": "1.4.1", "jquery.scrollto": "2.1.3", "js-cookie": "3.0.5", "moment": "2.30.1", "moment-timezone": "0.5.47", "node-gyp": "11.1.0", "popper.js": "1.16.1", "prop-types": "15.8.1", "raw-loader": "0.5.1", "react": "16.14.0", "react-dom": "16.14.0", "react-focus-lock": "^1.19.1", "react-redux": "5.1.2", "react-router-dom": "5.3.4", "react-slick": "0.30.3", "redux": "3.7.2", "redux-thunk": "2.2.0", "requirejs": "2.3.7", "rtlcss": "4.3.0", "sass": "^1.54.8", "sass-loader": "^16.0.0", "scriptjs": "2.5.9", "style-loader": "4.0.0", "svg-inline-loader": "0.8.2", "uglify-js": "3.19.3", "underscore": "1.13.7", "underscore.string": "3.3.6", "webpack": "^5.90.3", "webpack-bundle-tracker": "3.2.0", "webpack-merge": "6.0.1", "which-country": "1.0.0" }, "devDependencies": { "@edx/mockprock": "1.0.2", "@edx/stylelint-config-edx": "2.3.3", "babel-jest": "29.7.0", "jasmine-core": "2.6.4", "jasmine-jquery": "2.1.1", "jest": "29.7.0", "karma": "0.13.22", "karma-chrome-launcher": "3.2.0", "karma-coverage": "2.2.1", "karma-firefox-launcher": "2.1.3", "karma-jasmine": "0.3.8", "karma-jasmine-html-reporter": "0.2.2", "karma-junit-reporter": "2.0.1", "karma-requirejs": "1.1.0", "karma-selenium-webdriver-launcher": "latest", "karma-sourcemap-loader": "0.4.0", "karma-spec-reporter": "0.0.20", "karma-webpack": "^5.0.1", "plato": "1.7.0", "react-test-renderer": "16.14.0", "selenium-webdriver": "^2.44.0", "sinon": "19.0.2", "squirejs": "0.1.0", "string-replace-loader": "^3.1.0", "stylelint-formatter-pretty": "4.0.1", "webpack-cli": "^5.1.4" } }
09-25
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值