Paveikslėlių įkrovimas

Posted by Mindaugas Kurlavičius 23/04/2007 at 22h08

Tinklapis be paveikslėlių? Na, nebent kokioje dokumentacijoje jie nereikalingi, visur kitur jau beveik nebeišsiverčiama be vaizdo ar garso klipų, ką jau kalbėti apie paveikslėlius. Logotipai, nuotraukos šiaip visumą pagyvinantys elementai... Ir svarbiausia, turi būti galimybė visą tai įkelti paprastam nepriviligijuotam vartotojui. Be to, vartotojui neturi rūpėti įkeliamo paveikslėlio dydis, t.y. tuo turi pasirūpinti tinklapio serveris.

Taigi, išties aktualus klausimas praktiškai kiekvieno tinklapio kūrėjui. Kaipgi į jį atsako "Rails"?

Deja, pats "Rails" karkasas kol kas nieko nesiūlo. Tenka kapstytis tarp trečių šalių deimančiukų (gems) ir įskiepių (plugins). Siūlomos dvi dėmesio vertos alternatyvos: "Acts as attachment" ir "File Column".

Abu įskiepiai dėl manipuliavimo paveikslėlių parametrais reikalauja "RMagick" bibliotekos, kurią man teko matyti tik "Unix" ir "Linux" platformose, bet atrodo nesunkiai galima įdiegti ir į visų taip mėgiamus "Windows".

Acts as attachment - galingas ir lankstus, sakyčiau netgi šiek tiek griozdiškas įrankis, leidžiantis įkraunamus failus saugoti DB arba failų sistemoje ir patį įkraunamą failą realizuoti kaip modelį saugomą lentelėje, kurį vėliau būtų galima perdengti kitais modeliais. Tarkime:

class File < ActiveRecord::Base
end

class Picture < File
  # Paveikslėlio matmenys, leidžiami tipai, max dydis ir t.t
end

class Xxx < File
  # ...
end

Žodžiu, per daug nesigilinant, "acts_as_attachement" API leidžia pasireikšti fantazijai, galima išspręsti sudėtingą specifinę problemą, tačiau esminis šio įskiepio trūkumas - pakankamai sudėtingas valdymo mechanizmas, be to dažniausiai tereikia tik 5% jo galimybių, o joms realizuoti nemažai laiko.

File Column - lengvesnis įrankis. Paveikslėliai (galimi ir kitokie failai) saugomi failų sistemoje, nereikia atskiro modelio ir atskiros lentelės, failus tiesiog "prikabiname" per papildomą stulpelį DB, prie jau egzistuojančio modelio. Vaizdo elementuose (rhtml) pasiekiame tuos failiukus, paruoštais pagalbiniais metodais (helpers). Taip pat "File Column" automatiškai saugo tarpinį, jau pakrautą į formą, paveiksliuką. Tad, klientui neteisingai užpildžius tam tikrus formos laukus ir "renderinus" vaizdo elementą atgal, paveikslėlis bus laikinai išsaugomas į katalogą serveryje ir tik priėmus teisingai užpildytą formą, "prikabintas" į failų sistemą ir duomenų bazę.

# Migracija
class CreateBooks < ActiveRecord::Migration
  def self.up
    create_table "books" do |t|
      #t.column :name,   :string
      #t.column :author, :string
      t.column :cover,  :string
    end
  end

  def self.down
    drop_table "books"

  end
end

# Modelis
class Books < ActiveRecord::Base
  file_column :cover, :magick => {:geometry => "100x200>"}
end

# Vaizdas
<%= image_tag url_for_file_column(@book, "cover") %>
    

no comments | no trackbacks

Comments

Trackbacks

Use the following link to trackback from your own site:
http://www.rubyonrails.lt/trackbacks?article_id=6

(leave url/email »)

reCaptcha

   Comment Markup Help Preview comment