Ban*_*eil 17 php wordpress ruby-on-rails content-management-system ruby-on-rails-3
我有一个客户要求我建立一个网站,用一种非常用户友好的方式来更新内容.他们表达了对wordpress的熟悉,并表示有兴趣能够使用wordpress前端更新其内容.
我原本打算建立一个简单的管理页面,在那里他们可以创建帖子,或添加其他类型的内容..但似乎wordpress已经有大部分功能.
主要问题是我是一名RoR开发人员.我喜欢在我做的每件事情上使用haml,并且100%完全控制网站的工作方式.
所以我希望那里有人会想到我仍然可以使用rails和haml构建网站,但仍允许我的客户端使用wordpress进行更新.我想也许我可以访问wordpress api,只是拉出内容并按照我想要的方式显示它?或者我应该去另一个CMS ..像Refinery?
老实说,我真的不想触摸PHP,最好使用haml而不是html.O_O
Ari*_*her 21
这似乎对我有用(我从Wordpress加载作为辅助数据库,因此establish_connection()调用和覆盖table_name.这应该大部分都在那里,让你可以访问Wordpress数据作为ActiveRecord对象.我还没有写Posts(WPPost)周围的包装器使它们从API的角度来看更加用户友好,但这对于基于Rails的Wordpress数据显示应该很有用.
class Term < ActiveRecord::Base
establish_connection "wordpress-#{Rails.env}"
self.table_name = "wp_terms"
has_one :term_taxonomy
end
class TermTaxonomy < ActiveRecord::Base
establish_connection "wordpress-#{Rails.env}"
self.table_name = "wp_term_taxonomy"
belongs_to :term
has_many :term_relationship
end
class TermRelationship < ActiveRecord::Base
establish_connection "wordpress-#{Rails.env}"
self.table_name = "wp_term_relationships"
belongs_to :post, :foreign_key => "object_id"
belongs_to :term_taxonomy
has_one :term, :through => :term_taxonomy
end
class Post < ActiveRecord::Base
establish_connection "wordpress-#{Rails.env}"
self.table_name = "wp_posts"
has_many :term, :through => :term_relationship
has_many :term_relationship, :foreign_key => "object_id"
has_one :postmeta
# we only care about published posts for notifications
default_scope where("post_type = 'post' and post_status = 'publish'")
end
class Postmeta < ActiveRecord::Base
establish_connection "wordpress-#{Rails.env}"
self.table_name = "wp_postmeta"
belongs_to :post
end
Run Code Online (Sandbox Code Playgroud)
然后我在一个简单的ruby对象中包装该类别,这使得访问数据变得容易:
class WPCategory
attr_accessor :id
attr_accessor :name
attr_accessor :description
attr_accessor :term
def self.categories()
categories = Term.all()
categories = categories.select{|term| term.term_taxonomy.taxonomy == "category"}
return categories.map{|term| WPCategory.new(term)}
end
def self.category(id=nil)
if id
term = Term.find(id)
if term.term_taxonomy.taxonomy == "category"
return WPCategory.new(term)
end
end
return nil
end
def initialize(term)
@id = term.term_id
@name = term.name
@description = term.term_taxonomy.description
@term = term
end
def to_s
return "Wordpress Category: '#{@name}' (id=#{@id})"
end
end
Run Code Online (Sandbox Code Playgroud)
这是我的database.yml(确保您的db用户具有对wordpress db的只读访问权限,以避免任何ActiveRecord事故):
test:
adapter: mysql2
encoding: utf8
database: test-rails
pool: 5
username: test
password: XXXXXX
socket: /var/lib/mysql/mysql.sock
wordpress-test:
adapter: mysql2
encoding: utf8
database: test-wordpress
pool: 5
username: test
password: XXXXXXX
socket: /var/lib/mysql/mysql.sock
wordpress-development:
adapter: mysql2
encoding: utf8
database: wordpress
pool: 5
username: dev
password: XXXXXX
socket: /var/lib/mysql/mysql.sock
development:
adapter: mysql2
encoding: utf8
database: dev
pool: 5
username: dev
password: XXXXXX
socket: /var/lib/mysql/mysql.sock
Run Code Online (Sandbox Code Playgroud)
Kev*_* C. 10
现代艺术博物馆有一个WordPress JSON API插件,专为此目的而构建:https://github.com/dphiffer/wp-json-api
这使他们能够构建基于RoR的前端层,同时保持WordPress驱动的后端层.
较旧的答案不再相关。WordPress 现在提供了一个 Rest API,可以在这里访问:https : //developer.wordpress.org/rest-api/
1) 您可能希望在 Rails 应用程序中集成所有路由(通过从文章中获取“slug”)以正确提供文章并以漂亮的“显示”视图呈现它们。
2) 如果你想在 Rails 系统中存储数据(例如用于路由和提高速度),你可以创建一个名为 wp_articles 的数据库表,只需阅读完整的文章列表或更新相关文章,然后以类似于你的正常代码的方式呈现它们。
我查看了非维护的 MOMA gem(不再需要,不再维护),通过直接数据库访问(巨大的努力,速度较慢,过时)检查了上述答案,并在此处阅读了一个基于 javascript 的简单复杂的直接解决方案(http: //marydickson.com/how-to-use-the-wordpress-rest-api-in-rails/ ),但我认为简单地将相关信息复制到您的系统中,然后用正常的 MVC 流程呈现它们是最简单的道路。
缺点:一些额外的 WP-Plugins 提供了更多的数据库字段和其他信息,并不清楚您是否总是可以通过 API 访问这些信息。因此,您的功能可能略有限制。
| 归档时间: |
|
| 查看次数: |
21982 次 |
| 最近记录: |