Tworze galerie zdjec i do uploadu plikow uzylem attachent fu. Pierwszy raz tego uzywam, wiec jestem zielony w temacie
Utworzylem tabele:
create_table "pliks", :force => true do |t|
t.string "filename"
t.integer "size"
t.string "content_type"
t.string "thumbnail"
t.integer "parent_id"
t.integer "height"
t.integer "width"
t.text "description"
t.string "title"
t.string "gallery_nazwa"
t.datetime "created_at"
t.datetime "updated_at"
end
Musialem dodac pole do galerii, bo uzytkownik bedzie tez tworzyl galerie, do ktorych bedzie pozniej wlasnie te zdjecia wrzucal.
Niestety przy zapisywaniu:
[code]def dodaj_zdjecie_do
@galerie=Gallery.find(:all)
if request.post? and params[:plik]
plik = Plik.new(params[:plik])
plik.save
flash[:notice] = "zdjecie dodane"
end
end[/code]
attachment_fu ma (jak dla mnie) jakas dziwna strategie zapisywania plikow… Tworzy katalog 0000 a wnim podkatalogi 0001, 0005 To by jeszcze uszlo, gdyby w bazie danych zapisywal normalnie… Niestety jest tam tak:
Zapisuje do gallery_nazwa tylko dla pliku o pelnym rozmiarze.
Tutaj moje pierwsze pytanie: Czy mozna gdzies ustawic, zeby zapisywal tez do tego pola dla miniatur tego pliku?
Drugie pytanie dotyczy zapisywania tych plikow… Sa porozrzucane po katalogach… Mozna zmienic moze cos w jakichs ustawieniach, zeby wszystkie byly w jednym katalogu?
Czesto uzywalem skryptu do generowania galerii: http://www.kurshtml.boo.pl/skrypty/skrypt_galerii,galeria.html
Bo… jest naprawde “sympatyczny”
Mozna go jakos teraz wykorzystac? Dokladnie, to czy mozna za pomocą attachment_fu pobierać lokalizację plików potrzebną do skryptu, bo w bazie ich nie ma
Ewentualnie… mogl bym zrobic model/tabele ‘picture’, ktora miala by 1 do 1 tabele plik… (powiedzcie, czy to dobre rozwiazanie?). Tylko to tez nie rozwiazuje problemu miejsca w ktorym znajduje sie plik do skryptu, ktory chcial bym uzyc…
Aby zmienić sposób zapisywania, musisz przerobić metodę partitioned_path w file_system_backend.rb.
A co do tych miniaturek, to attachment_fu traktuje zarówno oryginalne zdjęcie i miniaturki jako jeden rekord, dlatego zapisuje nazwę galerii tylko w głównym zdjęciu.
rysic: to “dziwaczne” zapisywanie jest po to, żeby przy bardzo dużej ilości plików zmniejszyć liczbę katalogów w jednym podkatalogu (maksymalnie 1000). Inaczej przy dużej liczbie zdjęć system może mieć problemy.
Chyba macie racje Jakos udalo mi sie to wszystko ogarnac i uproscic Zostala tylko ta nieszczesna paginacja…
Powiedzcie mi tylko co daje powkladanie tego do katalogow dla systemu? Nie musi wyszukiwac wsrod wielkiej ilosci plikow w jednym katalogu?
Jeszcze pytanko, co jesli uzytkownik bedzie chcial miec wiecej zdjec, niz 1000 (gdy to napisalem, to wydaje mi sie nie mozliwe, ale jesli… )?
EDIT:
Jest jeszcze jeden problem zwiazany z tematem
Mam powiazana galerie z plikami nie za pomoca pliku id, tylko nazwy galerii i przy usuwaniu galerii musze usunac tez pliki zdjecia.
Robie to tak:
[code]def usun_galerie
@galerie = Gallery.find(:all)
if params[:id]
@galeria = params[:id]
Gallery.delete(Gallery.find_by_nazwa(@galeria))
@pliki = Plik.find_all_by_gallery_nazwa(@galeria)
@pliki.each do |plik|
Plik.delete(plik)
end
flash[:notice] = "Galeria '#{@galeria}' oraz jej zdjęcia usunięte!"
end
end[/code]
Ale po pierwsze attachment_fu gallery_nazwa przypisuje tylko do pliku glownego a po drugie w ten sposob usuwam tylko wpisy w bazie W jaki spob usunac pliki a nie tylko wpisy?
Probowalem wczesniej zrobic to bez petli, ale niestety wywala sie w ten sposob…
[code]def usun_galerie
@galerie = Gallery.find(:all)
if params[:id]
@galeria = params[:id]
Gallery.delete(Gallery.find_by_nazwa(@galeria))
Plik.delete_all(Plik.find_all_by_gallery_nazwa(@galeria))
flash[:notice] = "Galeria '#{@galeria}' oraz jej zdjęcia usunięte!"
end