Тестово съдържание за уеб сайт

Винаги нещо в червата ми се преобръща, когато представяме продукцията за първи път пред клиента. Дори и преди това да сме гледали дизайн, да сме обсъждали прототипи, и така нататък, знам много добре, че в повечето случай е блял по стените или просто сега ще му дойде нещо ново на акъла. За това и прекарах известно време умувайки какво мога да направя по въпроса първата (пък и по-нататъшните) презентации по-благи.

Както немалко умни глави са казвали, “content is king”. Старателно пеем тази песен пред клиентите, обясняваме им как дизайна на сайта не трябва да “задушава” съдържанието си, как на преден план трябва да изпъкне информацията и други мили неща. Той кима и се съгласява. И ето – иде ред за първата презентация. Къде го обаче прекрасното съдържание, което искаме да покажем на преден план? Една-две новини със заглавие

djlkqwj d1ggggm

Маймуна била по клавиатура. В последния момент сме въвели нещо, да се види, че работи (работи). В най-добрия случай – няколко пасажа лорем ипсум. Какво правим? Клиентът почва да се почесва дето не го сърби и се чуди как да каже, че му стои постно. Което е вярно, с това увяхнало съдържание. Прекрасния сайт е показан далеч не в най-доброто му състояние. Какво правим?

В най-добрия случай имаме под ръка някой безполезен и бездеен Project Manager или QA, на който казваме “напълни тука нещо”. В най-добрия случай имаме и малко предварително взето от клиента съдържание, което да качим.

При нас обаче нито имаме някой без работа, нито разполагаме с реално съдържание. Какво правим? Логично – решаваме проблема програмистката.

В Ruby on Rails има една работа, която се нарича fixtures. Ако не сте ги гледали – Ето тук ги описват. Много приличат на това, което на мен ми трябва – примерно съдържание. След като говорих със Стефан обаче се схванах, че всъщност не са точно те правилния инструмент за това, което ми трябва. Правени са за статични данни за тестови цели, а пък и yml формата не е много приятен за работа. Аз искам максимално “органично” изглеждащи случайни данни.

За това – запретнах ръкави и се метнах на това да си напиша собствена rake задача. Първото, което си сглобих беше домашнярка lipsum генератор.


class Lipsum def initialize @f = File.read File.join(RAILS_ROOT, ‘lib’, ‘tasks’, ‘lipsum.txt’) end

def rand_sentence sentences.rand end def rand_paragraph paragraphs.rand end def rand_excerpt sent = “” 3.times do sent << rand_sentence + ‘. ‘ end sent end def rand_content sent = “” 3.times do sent << rand_paragraph end sent end def rand_name “s %s” [words.rand.humanize, words.rand.humanize] end private def paragraphs p ||= f.split(”\n”) end def sentences s ||= f.split(”. “) end def words w ||= f.split(/[\s\.,]/).uniq w.delete "" w end

end

в lipsum.txt има 15 параграфа латински, генерирани от http://lipsum.com.

Дотук добре. Нека да произведем малко съдържание за блог. Какво друго да направиш на рейлс, ако не блог?

task :clean_posts do p “# Destroying posts” Post.destroy_all Post.connection.execute(‘truncate posts’) end task :create_posts => [:clean_posts] do l = Lipsum.new cats = Cat.find(:all) pic_folders = [‘pics1’, ‘pics2’, ‘pics4’, ‘pics5’, ‘pics6’] files = [] pic_folders.each do |folder| files << File.open(File.join(RAILS_ROOT, ‘lib’, ‘tasks’, ‘content’, folder, ’100.png’)) end 75.times do f = files.rand created_at = Date.today – (1..40).to_a.rand post = { :title => l.rand_sentence, :announce => l.rand_excerpt, :content => l.rand_content, :comments_allowed => true, :active => true, :image => f, :created_at => created_at, :small_image => f } cat = cats.rand p “# creating post for #{cat.name} with tilte #{post[:title]}” cat.posts.create(post) end end

$ Rake acme:create_posts

Така. 75 поста в рамките на 40 дни. Доста продуктивен блог. Към всеки дори има прикачена картинка от надърпаните на случаен принцип от интернет такива. file_column плъгина се справя идеално с така подаденото.

Нека да има и коментари към тези постове.

  task :create_comments => [:create_posts] do 
    l = Lipsum.new
    posts = Post.find(:all)
    250.times do 
      created_at = Date.today – (1..40).to_a.rand
      posts.rand.comments.create(
        :author => l.rand_name,
        :email => ‘akme@akme.org’,
        :comment => l.rand_paragraph,
        :created_at => created_at
      )
      p “# creating comment”
    end

end

Няколко секунди по-късно сайта е пълен с постове, озаглавени
Nulla adipiscing, с по три-четири коментара от Vivamus Gravida и Nisl Sed. Различни по обем текстове. Цъфнаха няколко бъга по лейаута, от това, че не съм съобразил размерите на текста.

Разбира се, може да се стигне и доста по-далеч. Имах смелата идея да парсвам rss на някой спамест сайт (да речем – slashdot), и динамично да присурвам примерно съдържание оттам; или да тегля картинки от flickr. За момента обаче и това стига, за да може сайта да бъде представен във възможно по-добра светлина.

— Петьо Иванов · 25 февруари 2008, 22:52

Коментирай

  1. Корчев · 26 февруари 2008, 00:29 · #

    В Събсоника има подобна свинщина (синтактична захар, чак мож та докара до диабед):

    string loremIpsum = SubSonic.Sugar.Web.GenerateLoremIpsum(100, “c”);

    За удобство може да кажеш и какво е това “100” – букви, думи, параграфи.

    Ей го и скрийнкасто

  2. Петьо · 26 февруари 2008, 11:10 · #

    Мазно това със събсоника. Тия ютилитита направо са изригнали с тях; дори повече, отколкото на релсите 10.years.ago ;).

  3. Корчев · 26 февруари 2008, 11:58 · #

    Бах. Написал съм “диабеД” (сигурно съм се объркал с Гарабед).
    Още една причина да не се пишат коментари в 1:29…

  4. Aлександър Гьошев · 26 февруари 2008, 12:01 · #

    В допълнение към статията, за български клиенти, е доста по-удачно да се ползва нещо по-различно от lorem ipsum… например, части от ‘История Славянобългарска’ ;)

  5. Петьо · 26 февруари 2008, 14:39 · #

    Хм, трябва да взема да пробвам резултатите от подменянето на латинския със старобългарски. Не знам само какви имена ще излязат, подозирам предимно Неразумний Юрод.

    ГарабеД и ДиабеД; Ексел и Юксел… има ли значение?

  6. Боби · 26 февруари 2008, 14:59 · #

    Интересно, че в РССа част от хавите не излязоха форматирани като код, а като обикновен параграф…

  7. Нубизус · 9 март 2008, 23:01 · #

    Евала Петьо, доста важна тема.
    Даде ми повод за размисъл и блогване.

Помощ за Textile