Отображение сокращенной версии статьи с содержанием HTML - PullRequest
0 голосов
/ 12 декабря 2011

Я создаю сайт, используя rails 3.1, который по своей сути состоит из множества статей (похожих на сообщения в блоге). Они хранятся и форматируются как HTML. Теперь мне нужно создать предварительный просмотр содержимого статьи, чтобы в ленте этих статей отображалась только короткая версия. Содержание должно быть сокращено, не нарушая его HTML.

Есть ли простой способ сделать это? Драгоценный камень был бы идеальным, но идеи для чистого способа реализации функции сокращения тоже были бы хороши. Спасибо!

Edit: Продолжая эксперименты, я в настоящее время работаю с чем-то в этом роде, используя Sanitize gem , и, похоже, это хорошо работает:

def shortened_content(length)
    Sanitize.clean(content[0..length], Sanitize::Config::RELAXED)
end

Мне не нравится разбавлять и менять направление моего вопроса, но я думаю, что должен.

Есть ли лучшее решение для подобных вещей? (Я полагаю, что sanitize gem удаляет нежелательный контент, а также очищает HTML. Мне только он нужен для очистки HTML здесь)

Правильно ли я думаю, что мне, вероятно, следует перенести эту обработку на верхнюю сторону вещей? То есть хранить сокращенный контент, а также полный контент. Я полагаю, что это сэкономит мне достаточно времени на обработку, чтобы оно стоило дополнительного хранилища.

Ответы [ 4 ]

1 голос
/ 17 марта 2012

Используйте гем 'HtmlSlicer' для Rails.

Поместите эту строку в свой Gemfile:

gem 'html_slicer'

Тогда связка:

% bundle

Ваша модель:

class YourModel < ActiveRecord::Base
  slice :content, :as => :shorten, :slice => {:maximum => 100, :limit => 1, :text_break => "..."}
end

Ваш взгляд:

<%= @your_model.shorten %>
1 голос
/ 12 декабря 2011

Вам нужно что-то усечь html, не нарушая теги, попробуйте этот плагин усечения jquery

1 голос
/ 12 декабря 2011

Да, камень Sanitize - это верный путь.Я сделал нечто подобное, используя драгоценный камень Nokogiri, который, как вы можете видеть, основан на драгоценном камне Sanitize.Определенно разумнее хранить сокращенный предварительный просмотр HTML в новом столбце в дополнение к полному HTML.Так что-то вроде этого в before_save

def generate_preview
   self.preview_content ||= shortened_content(100)
end

Приятным побочным эффектом является то, что администратор теперь может вручную написать предварительный просмотр, если это необходимо.

0 голосов
/ 12 декабря 2011

Вы можете поместить весь текст в div (или любой элемент уровня блока, который вы хотели бы использовать), установить его на фиксированный размер и затем положить overflow: hidden; на него.Вы также можете использовать text-overflow: ellipsis;, и браузер отобразит ... там, где он обрезает текст - если он его поддерживает.

#synopsis {
    width: 300px;
    height: 100px;   
    overflow: hidden;
    text-overflow: ellipsis;
}

Возможно, в конечном итоге вы получите много лишнего текста, который будет только служитьчтобы увеличить размер HTML-кода, который необходимо загрузить.

Пример скрипта

...