У меня есть клиент, который попросил меня создать веб-сайт с очень удобным для пользователя способом обновления контента. Они выразили знакомство с wordpress и выразили заинтересованность в возможности использовать внешний интерфейс wordpress для обновления своего контента.
Изначально я намеревался создать для них простую административную страницу, где они могли бы создавать сообщения или добавлять другие типы контента... но похоже, что WordPress имеет большую часть функциональности уже на месте.
Основная проблема в том, что я разработчик RoR. Я предпочитаю использовать haml для всего, что я делаю, и иметь 100% полный контроль над работой сайта.
Поэтому я надеялся, что у кого-нибудь появится идея, как я все еще мог бы создать сайт, используя рельсы и haml, но при этом позволить моему клиенту обновляться с помощью wordpress. Я подумал, может быть, я мог бы получить доступ к API WordPress, просто вытащить контент и отобразить его так, как я хочу? или, может быть, мне следует использовать другую CMS, например Refinery?
Честно говоря, я просто очень не хочу трогать PHP, и желательно использовать haml, а не html. О_о
Пожалуйста, не собирайте что-то, пытаясь объединить то, что вам нравится, с тем, что хочет ваш клиент, что какому-нибудь бедному будущему сопровождающему придется расшифровывать... Michael Berkowski 14.02.2012
Используйте Вордпресс. Нет смысла изобретать велосипед. Свободное время позволит вам заняться другими проектами, над которыми вы МОЖЕТЕ работать в предпочитаемой вами среде. MunkiPhD 14.02.2012
Ты молоток, а это не гвоздь. Бывают моменты, когда приходится говорить клиентам, что я не подхожу для этой работы. Вы по-прежнему можете участвовать в проекте, помогая им конкретизировать требования к проекту, и вы можете помочь им найти компетентного специалиста по PHP. Однако мысль собрать воедино какой-нибудь ужасный франкенштейновский сайт RoR/Wordpress заставляет меня содрогнуться. Marc Talbot 14.02.2012
1) Вы, вероятно, захотите интегрировать всю маршрутизацию (взяв "слаг" из статей) в свое приложение rails, чтобы правильно обслуживать статьи и представлять их в хорошем "показном" виде.
2) Если вы хотите хранить данные в системе rails (например, для маршрутизации и увеличения скорости), вы можете создать таблицу базы данных с именем wp_articles, просто прочитать полный список статей или обновить соответствующие статьи, а затем представить их как ваш обычный код.
Я просмотрел неподдерживаемый гем MOMA (больше не требуется, не поддерживается), проверил приведенный выше ответ с прямым доступом к базе данных (огромные усилия, медленный, устаревший) и прочитал здесь о небольшом сложном решении на основе прямого javascript (http://marydickson.com/how-to-use-the-wordpress-rest-api-in-rails/), но я думаю, что проще всего просто скопировать соответствующую информацию в вашу систему, а затем представить ее с помощью обычного процесса MVC.
Недостатки: некоторые дополнительные WP-плагины предоставляют больше полей базы данных и другую информацию, и неясно, всегда ли вы можете получить к ним доступ через API. Таким образом, у вас может быть немного ограниченная функциональность.
Ответ 2 · рейтинг 22 · Ari Gesher
Кажется, это работает для меня (я загружаю из Wordpress в качестве вторичной базы данных, следовательно, вызовы establish_connection() и переопределение table_name. Это должно получить большую часть пути, предоставляя вам доступ к данным Wordpress как к объектам ActiveRecord. Я не еще написал оболочку для сообщений (WPPost), чтобы сделать их немного более удобными для пользователя с точки зрения API, но это должно хорошо работать для отображения данных Wordpress на основе Rails.
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
Затем я заключаю категорию в простой рубиновый объект, упрощающий доступ к данным:
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 (убедитесь, что ваш пользователь базы данных имеет доступ только для чтения к базе данных wordpress, чтобы избежать каких-либо сбоев ActiveRecord):
Это позволило им создать внешний слой на основе RoR, сохранив при этом внутренний слой, управляемый WordPress.
Ответ 4 · рейтинг 2 · davidb
Вы можете установить Wordpress, а затем воспроизвести базу данных wordpress как Models и добавить ассоциации, как их использует WordPress. Тогда вы сможете получить доступ к данным, используя рельсы, которые были введены в интерфейсе WordPress. Я делал что-то подобное в прошлом, но не как постоянное решение, а как источник данных для перехода на другое решение. Это возможно, это некрасиво, но это работает.
Но один вопрос: почему вы используете WordPress для чего-то, что недостаточно мощно?! Это CMS, а не фреймворк для решения сложных задач. Если это не соответствует потребностям клиента, это просто не то, что нужно использовать. Вы могли бы скорее создать аналогичный графический интерфейс, используя рельсы, чем возиться с wordpress.
Ответ 5 · рейтинг 1 · ksol
Что касается HAML, вы по-прежнему можете писать свои представления на haml, а затем использовать haml input.haml output.html в командной строке. Немного скучно, но вам не нужно писать html.
Ответ 6 · рейтинг -1 · nana
используйте MAMP и установите wordpress. откройте страницу на локальном хосте. затем вы можете использовать инструмент Firefox, чтобы увидеть HTML-код.