Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

PHP/Symfony - Galerija slika

[es] :: PHP :: PHP/Symfony - Galerija slika

[ Pregleda: 1346 | Odgovora: 5 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Vai.God
Mladen Stupar
Novi Sad

Član broj: 144808
Poruke: 32
*.ptt.rs.



Profil

icon PHP/Symfony - Galerija slika15.01.2011. u 21:54 - pre 161 meseci
Pokusavam da napravim galeriju slika, koja je skoro gotova, ali mi ipak nesto ne funkcionise najbolje i nece da prikaze thumbnail, originalnih slika. Originalne slike se nalaze u folderu na serveru, a meni program treba da putanju do originalne slike prosledi do funkcije unutar action klase. U ovoj funkciji koristim sfThumbnailPlugin, s kojim originalnu sliku treba da smanjim, snimim je u drugi folder i redirektujem putanju do nje, da bi se ona prikazala na stranici.

Deo koda unutar templates dela, gde uz pomoc url_for funkcije saljem URL na osnovu kog treba da mi se pozove executeThumbnail metoda:
Code:

$picid=0;
foreach ($files as $file) {
   if($rownum == 4) {
      echo '</tr><tr>';
      $rownum = 1;
   }
   echo '<td class="dir1" background=' . url_for('galeria/thumbnail?d='.$folder.$file) . '">
           <a onclick="open_picture_in_window_new(' . $picid . ')"><div class="fedo"><span class="kor">' 
           . htmlspecialchars($file) . '</span></div></a>' . $c . '</td>';
   $rownum++;
   $picid++;
}

Promenljive:
$picid-trenutno nebitna, jer ce sluziti za preusmeravanje na originalnu sliku, koja treba da se pojavi uz pomoc JS funkcije.
$files-globalna promenljiva koju akcija salje, i sadrzi listu imena slika, koja se nalaze unutar trenutne galerije.
$folder-globalna promenljiva koju akcija salje, i sadrzi putanju podfoldera do same slike, a unutar definisanog root foldera, odakle galerija pocinje

metoda unutar klase action koja treba da preuzme parametar 'd' i da obradi sliku:
Code:

public function executeThumbnail(sfWebRequest $request) {
  $galery_dir = sfConfig::get('app_default_folder_fotogalery');
  $thumb_dir = sfConfig::get('app_default_folder_fotogalery_icons');
    
  $origimg = realpath($galery_dir . $request->getParameter('d', ''));
  $thumbimg = realpath($thumb_dir . $request->getParameter('d', ''));

  // Provera da li postoji trazeni fajl, i da li je citljiv
  if (!is_readable($origimg) || !is_file($origimg)){
    $this->forward404();
  }
  else{
    // Provera da li postoji thumb slika, zadatog fajla
    if(!is_readable($thumbimg) || !is_file($thumbimg) || filemtime($thumbimg)<filemtime($origimg)){
      // Initialize the object for 240x180 thumbnails
      $thumbnail = new sfThumbnail(240, 180);
      // Load the image to reduce
      $thumbnail->loadFile($origimg);
      $direktorijum = dirname($origimg);
      $slika = basename($origimg);
      // Save the thumbnail
      $thumbnail->save($direktorijum.'/'.$slika, 'image/jpeg');
    }
    else{
      // Redirect to thumbnail link
      $this->redirect($thumbimg);
    }
  }
}

Promenljive:
$galery_dir i $thumb_dir - preuzimaju apsolutnu putanju do root direktorijuma za galeriju, i thumbnail galeriju.
$origimg i $thumbimg - uz pomoc gornjih promenljivih i vrednosti koje iz parametra 'd', sadrze putanju do same slike, i putanju do thumb slike (radi provere da li thumb slika vec postoji)
Mislim da mi ovde poslednji red za redirekciju, nije bas najbolje napisan? Mada meni ni gornji deo ne radi, tacnije ne kreira mi samu thumbnail sliku, i ne snimi je na zadato mesto. A gledano po sfThumbnailPlugin dokumentaciji, sve sam dobro napisao?

Evo jos ova dva konfiguraciona fajla, koja su kljucna za ovaj postupak.
routing.yml:
Code:

galeria:
  url:      /galeria.php
  param: { module: galeria, action: index, type: html }

galeria_thumb:
  url:   /galeria/thumbnail/
  param: { module: galeria, action: thumbnail }

app.yml:
Code:

all:
  default_folder:
    fotogalery:        %SF_WEB_DIR%/fotogalery/
    fotogalery_icons:    %SF_WEB_DIR%/fotogalery_icons/


Pri testiranju, mi se nikakva greska ne ispise, ali isto mi ni ne prikaze slicice, niti ih snimi u predvidjeni folder.
Ako zbog testiranja, direktno u address bar upisem direktnu adresu: ...../frontend_dev.php/galeria/thumbnail?d=galeria1/slika01.jpg. Tada mi ispise gresku:
404 | Not Found | sfError404Exception
Empty module and/or action after parsing the URL "/galeria/thumbnail" (/).
 
Odgovor na temu

Nikola Poša
Backend (PHP) developer
Beograd

Član broj: 173839
Poruke: 1616
*.adsl-4.sezampro.yu.



+33 Profil

icon Re: PHP/Symfony - Galerija slika16.01.2011. u 10:11 - pre 161 meseci
Pretpostavljam da je ta funkcija url_for() neki view helper za generisanje URL-ova. E sad, po načinu na koji je pozivaš, meni se čini da ona ne radi ništa kompleksno, već verovatno samo prepend-uje neki base url na taj parametar koji joj proslediš. Shodno tome, čini mi se da je problem to što nisi encode-ovao taj "d" parametar. U slučaju da se unutar njega nađe npr. kosa crta (a velika je šansa za tako nešto budući da taj parametar predstavlja putanju), dobićeš potpuno drugačiji "efekat". Tako da, prvi korak je da to $folder.$file napišeš ovako: urlencode($folder.$file).

Takođe, ne sviđa mi se ta upotreba redirect() metode za dobijanje sadržaja fajla. Siguran sam da Symfony nudi neka bolja rešenja, tipa da pošalješ odgovarajuće header-e (Content-Type, Content-Disposition, Content-Transfer-Encoding, Content-Length, itd.) i da onda odradiš samo readfile($putanja).
 
Odgovor na temu

taksistaZR
zrenjanin

Član broj: 124170
Poruke: 80
*.dynamic.isp.telekom.rs.



Profil

icon Re: PHP/Symfony - Galerija slika16.01.2011. u 18:53 - pre 161 meseci
url_for() helper samo vraca rutiran url tako da on nece pozvati akciju koja ce da ti obradi sliku. Thumbnail kontroler se ne poziva nigde iz ovog tvog template koda.

Druga stvar je ovo sto Nikola rece. Ustvari, zasto uopste saljes url kroz GET? Zar ne mozes da prosledis samo ime slike pa da u Thumbnail kontroleru izvuces folder?

Treca stvar, routing.yml deluje kao da zelis samo da prihvatis /galeria/thumbnail/ . Zbog ovog mislim da dobijas error kad rucno pozoves Thumbnail kontroler. Ili ti taj ruting uopste ne treba ili vidi nekako ovako:
Code:

galeria_thumb:
  url:   /galeria/thumbnail/*
  param: { module: galeria, action: thumbnail }

Code:

galeria_thumb:
  url:   /galeria/thumbnail/:d
  param: { module: galeria, action: thumbnail }

Code:

galeria_thumb:
  url:   /galeria/thumbnail/
  param: { module: galeria, action: thumbnail }
galeria:
  url:   /galeria/:action/*
  param: { module: galeria }
 
Odgovor na temu

taksistaZR
zrenjanin

Član broj: 124170
Poruke: 80
*.dynamic.isp.telekom.rs.



Profil

icon Re: PHP/Symfony - Galerija slika16.01.2011. u 19:07 - pre 161 meseci
Pogledaj jsThumbnailPlugin . Ovaj plugin "on the fly" kreira thumb sliku odredjene velicine i smesta je u cash za dalje koriscenje.

koriscenje je veoma jednostavno, dobijas helper koji koristis ovako :

Code:

<?php echo thumbnail_tag('/path/to/orig-image.jpg', 100, 70); ?>



Jeste da je ovaj plugin pravljen za sf verziju 1.1 ali uz minimalne izmene bi trebalo da ti radi na novijim verzijama. Ako se dobro secam samo u ThumbnailHelper.php na pocetku treba dodati:
Code:

sfProjectConfiguration::getActive()->loadHelpers('Url');
sfProjectConfiguration::getActive()->loadHelpers('Tag');
 
Odgovor na temu

Vai.God
Mladen Stupar
Novi Sad

Član broj: 144808
Poruke: 32
*.ptt.rs.



Profil

icon Re: PHP/Symfony - Galerija slika17.01.2011. u 02:01 - pre 161 meseci
Hvala na odgovorima, ali za sada nisam nista konkretno postigao. jsThumbnailPlugin mi deluje ko najbolje resenje, ali nije hteo da mi instalira plugin, jer koristim Symfony 1.4.
Kod routing.yml podesavanja, treca varijanta je proradila, da udje u samu metodu kad treba. A nesto vise sam postigao, i uspeo da kreiram umenjenu sliku i snimim je, kad sam radi testiranja,
umesto: $thumbnail->loadFile($origimg);
stavio: $thumbnail->loadFile($galery_dir.'fiksna/putanja/do/originalne/slike.jpg');
i umesto: $thumbnail->save($thumbimg, 'image/jpeg');
stavio: $thumbnail->save($thumb_dir.'fiksna/putanja/do/thumbnail/slike.jpg', 'image/jpeg');
Ovo mi je cudno jer bi trebalo, da je: $origimg == $galery_dir.'fiksna/putanja/do/originalne/slike.jpg', isto tako treba da je i kod thumbnail varijante.
 
Odgovor na temu

taksistaZR
zrenjanin

Član broj: 124170
Poruke: 80
*.dynamic.isp.telekom.rs.



Profil

icon Re: PHP/Symfony - Galerija slika17.01.2011. u 12:42 - pre 161 meseci
Sto se tice plugina ne moras da ga instaliras preko komande kako se navodi u uputstvu. Na stranici plugina ima Download package link. Tu preuzmes fajlove, raspakujes u svoj plugins folder i dalje podesavas settings.yml fajl, obrises cache i sve ostalo sta vec treba kao da si ga preuzeo sa komandom symfony plugin-install. Ja imam preradjeni jsTumbnailPlugin koji koristim na sf 1.4 verziji ako ti zatreba mogu ti i poslati.

Sto se tice rutiranja, mislim da ti uopste ne treba to ruting podesavanje. Default routing je /:module/:action/* i to u ovom slucaju zadovoljava tvoje potrebe.

Sto se tice putanja, moze svasta da bude. Verovatno ti je realpath() nepotreban ili imas problem ako guras putanju kroz url. Moras malo da debagujes i da vidis kako izgleda tvoj $origimg, ovako samo nagadjamo.
 
Odgovor na temu

[es] :: PHP :: PHP/Symfony - Galerija slika

[ Pregleda: 1346 | Odgovora: 5 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.