コンテンツを更新するための非常にユーザーフレンドリーな方法でWebサイトを構築するように要求したクライアントがいます。彼らはワードプレスに精通していることを表明し、wordpressフロントエンドを使用してコンテンツを更新できることに関心を示しています。
私はもともと、投稿を作成したり、他の種類のコンテンツを追加したりできる簡単な管理ページを作成するつもりでしたが、wordpressにはほとんどの機能がすでに備わっているようです。
主な問題は、私がRoR開発者であるということです。私は自分が行うすべてのことにhamlを使用することを好み、サイトの動作を100%完全に制御できます。
だから私は誰かがRailsとhamlを使ってサイトを構築する方法のアイデアを持っているが、それでも私のクライアントがワードプレスを使って更新できるようにする方法のアイデアを持っていることを望んでいた。 wordpress api、そしてコンテンツをプルして好きなように表示しますか?または別のCMSを使用する必要があります.. Refinery ?
正直なところ、私は本当にPHPに触れる必要はなく、できればhtmlではなくhamlを使用する必要があります。 O_o
古い答えはもう関係ありません。 WordPressは、ここからアクセスできるRest APIを提供するようになりました: https://developer.wordpress.org/rest-api/
1)Railsアプリにすべてのルーティングを(記事から「スラッグ」を取得して)統合して、記事を正しく提供し、素敵な「ショー」ビューを表示することをお勧めします。
2)Railsシステム(ルーティングや速度の向上など)にデータを保存する場合は、wp_articlesというデータベーステーブルを作成し、記事リスト全体を読むか、関連する記事を更新します。次に、通常のコードと同様にそれらを提示します。
私はメンテナンスされていないMOMAgem(もう必要ない、メンテナンスされていない)を見て、直接データベースアクセス(多大な労力、遅い、時代遅れ)で上記の答えをチェックし、ここで非常に複雑な直接javascriptベースのソリューションについて読みました(- http://marydickson.com/how-to-use-the-wordpress-rest-api-in-Rails/ )ですが、関連する情報をシステムにコピーして、それらを提示するだけだと思います。通常のMVCプロセスが最も簡単な方法です。
短所:いくつかの追加のWPプラグインは、より多くのデータベースフィールドやその他の情報を提供し、APIを介してそれらに常にアクセスできるかどうかが明確ではありません。そのため、機能が少し制限されている可能性があります。
これは私にとってはうまくいっているようです(私はWordpressからセカンダリデータベースとしてロードしているので、establish_connection()
を呼び出し、table_name
をオーバーライドします。これでほとんどのそこに行くと、ActiveRecordオブジェクトとしてWordpressデータにアクセスできます。投稿をもう少しユーザーフレンドリーにするためのラッパー(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
次に、データへのアクセスを容易にする単純な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
これが私のdatabase.ymlです(ActiveRecordの事故を避けるために、dbユーザーがwordpress dbへの読み取り専用アクセス権を持っていることを確認してください):
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
近代美術館にはWordPressこの正確な目的のために構築されたJSONAPIプラグインがありました: https://github.com/dphiffer/wp-json-api
これにより、WordPress主導のバックエンドレイヤーを維持しながら、RoRベースのフロントエンドレイヤーを構築することができました。
Wordpressをインストールしてから、wordpressデータベースをModel
sとして再現し、wordpress use次に、Railsフロントエンドに入力されたwordpressを使用して、データにアクセスできるようになります。私は過去にこのようなことをしましたが、永続的なソリューションですが、別のソリューションに移行するためのデータソースとして使用できます。可能性はありますが、ニースではありませんが、機能します。
しかし、1つの質問:なぜあなたはwordpressを十分に強力ではないものに使用しているのですか?!それは挑戦的なタスクのためのフレームワークではありません。それが貸衣装業者のニーズに合わない場合、それは単に使用するのが正しいことです。Railsを使用して、ワードプレスをいじって、同様のGUIを構築することもできます。
HAMLに関しては、ビューをhamlで記述してから、コマンドラインでhaml input.haml output.html
を使用できます。少し退屈ですが、htmlを書く必要はありません。