Rails - Redcloth, как мне конвертировать существующий wysiwyg crap html? - PullRequest
1 голос
/ 28 января 2011

Я видел свет, я конвертирую свой сайт в RedCloth , чтобы использовать замечательную текстильную разметку.

Проблема в том, что у меня в базе данных есть html-контент на пару лет, который не является текстильной разметкой. Как мне превратить это в текстиль? Есть ли не ручной способ?

Если нет, при выводе контента мне следует проверять наличие html, если он есть, не использовать RedCloth?

пример:

// not sure of best way to check if a string has html
if (@content.description has html)
    <%= @content.description.html_safe %>
else
    <%= RedCloth.new(@content.description).to_html %>
end

Что такое рубиновый способ? Помогите новичку! : -)

Ответы [ 2 ]

1 голос
/ 28 января 2011

Нашел это: http://clothred.rubyforge.org/

И это: https://github.com/jystewart/html2textile

И это: https://github.com/mattt/pricetag

edit

Я пошел с html2textile.Я установил его, используя инструкцию из этого SO вопроса , который я задал.

Затем я создал задачу в /lib/tasks/app.rake с именем textile_ize.Это выглядит так:

namespace :db do
  desc "Convert html to textile on desc columns"
  task :textile_ize => :environment do
    puts "Starting Desc"

    contents = Content.all
    contents.each do |c|
                    #desc
        parser = HTMLToTextileParser.new
        parser.feed(c.desc)
        c.desc_textile = parser.to_textile
        c.save
    end

    puts "Finished with Desc"

end

Я мог бы тогда запустить rake db:textile_ize и пуф, готово.Я фактически добавил дополнительный столбец для хранения текстиля и создания html из текстиля с помощью :before_save.Это выглядело так (в моей модели):

before_save :textile_ize

# convert textile to html
def textile_ize
    self.desc = RedCloth.new(self.desc_textile).to_html     
end

Надеюсь, это кому-нибудь поможет!

1 голос
/ 28 января 2011

Я использую Rdiscount для разбора разметки, он работает как с HTML, так и с текстовым вводом. Я полагаю, что текстиль позволяет HTML, на самом деле, если я поставлю сильный тег в этом редакторе, это работает!

что произойдет, если вы просто разберете html и текстиль с красной тканью?

<%= RedCloth.new(@content.description).to_html %>
...