Joomla.it Forum

Non solo Joomla... => Sviluppo => : Cybassh 24 Nov 2010, 12:20:40

: [RISOLTO]visualizzare immagini da blob 2
: Cybassh 24 Nov 2010, 12:20:40
Salve,
  ho un problema nel visualizzare immagini da un db nel mio componente all'interno fra i contenuti delle viste.
in primis, data una vista primo, ho aggiunto nel modello primo il metodo
:
class DocentiModelHome extends JModel
                     ...
                     public function VisuaFoto($foto){
$document =& JFactory::getDocument();
$document->setMimeEncoding('image/jpeg');
header('Content-type: image/jpeg');
//echo del contenuto del campo blob
echo $foto;
//exit;
return;
    }
e nella vista primo ho messo
:
$i=$arr_foto[0][blobdata];
//$session->set('foto',$id_anagrafica);
//$path=JPATH_COMPONENT.DS."include/";
//echo "<pre>";
//var_dump($i);
$model->VisuaFoto($i);

il risultato è che mi scrive così:
http://localhost/Docenti/index.php/docenti?view=home&id_anagrafica=1323
e sul titolo della scheda in firefox:
nomecomponente(Immagine JPEG)

Dov'è che sbaglio? con il debug son entrato nel metodo ed il passaggio di valore sembra corretto.

Andrea
: Re:visualizzare immagini da blob 2
: mau_develop 24 Nov 2010, 14:11:19
mi verrebbero un po di domande

MVC ... te parli di MV ..e C?

public function
-----------------------
function va bene ... public toglilo pure

VisuaFoto($foto)
------------------------
vuol dire che gli passi $foto... dov'è?

  echo $foto;
--------------------------
... un echo nel model nn serve, serve il return e il print lo fai nel controller dove dovresti istanziare model e view passando a view i dati che recuperi nel model.

e nella vista primo ho messo
---------------------------------------
immagino ti riferisca al default del template e non alla view, poichè non vedo classi e funzioni

$model->VisuaFoto($i);
---------------------------------
questo non si fa ne nella view ne nel template ma nel controller in un ipotetico metodo visualizza foto che prende i dati dal model e li passa alla view il cui template visualizzerà

$i=$arr_foto[0][blobdata];
-------------------------------------
... da dove viene $arr_foto[0] ?

M.
: Re:visualizzare immagini da blob 2
: Cybassh 02 Dec 2010, 12:18:02
scusa il ritardo ma son stato occupato
  Allora, mi  spiego meglio:

cercando di stare in  un'ottica mvc:

nel controller principale, visto che son dati comuni  nel componente, prendo l'array relativo alla foto $fotocomprensivo di ext per eventuale mime e il blob
:
... {puntini stanno per seri di istruzioni}
$model=$controller->getmodel();
...
$foto=$model->daiFoto($id_anagrafica);
...
$ris_foto=$session->set('foto',$foto);
...
JRequest::setVar('view','home');

in com_xxxxx->views->home->view.html.php setto
:
...
$foto=$session->get('foto',null);
...
$this->assignRef('foto', $foto);

ed infine su  com_xxxxx->views->home->tmpl->default.php ottengo l'array famosa contenente il blob
:
...$foto=$this->foto;
...
$i=$foto[0][blobdata]; //$i contiene il blob dell'immagine

ora come si puo' visualizzare l'imagine contenuta nel blob?
: Re:visualizzare immagini da blob 2
: Cybassh 03 Dec 2010, 11:04:40
public function
-----------------------
function va bene ... public toglilo pure

diamogli una parvenza di programmazione ad oggetti hehehe
: Re:visualizzare immagini da blob 2
: mau_develop 03 Dec 2010, 14:50:57
cosa fa questa?

$model=$controller->getmodel();

M.
: Re:visualizzare immagini da blob 2
: Cybassh 06 Dec 2010, 09:55:08
fa riferimento all'istanza del model principale (ComponenteModelsComponente).
questo per caricare ed elaborare alcuni dati  comuni a tutte le viste del componente
: Re:visualizzare immagini da blob 2
: mau_develop 06 Dec 2010, 11:36:21
si ma non ho capito $controller da dove viene, perchè dovrebbe avere quel metodo getModel(), perchè quel metodo getModel non ha argomenti ... http://docs.joomla.org/API16:JController/getModel

M.
: Re:visualizzare immagini da blob 2
: Cybassh 06 Dec 2010, 12:43:41
mmmm questo presuppone che abbia sbagliato qualcosa immagino

siamo nella pagina  componente.php nella root del compoonente
$controller è l'istanza del controller principale
da cui chiamo lì'istanza del modello  ($model  ) principale per chiamare alcuni metodi.
l'ho chiamata senza parametri perchè mi da automaticamente il modello principale.

per tornare alle immagini, credo poi si possa utilizzare :
:
<img  src="stream.php?tipo=<?php echo $ext;?>" alt="Foto personale"/>no?
il problema ce l'ho anche nel trovare il path corretto.
la struttura componente è:
com_ccomponente
|_>models
!_>controllers
|_>views
|_>include
controller.php
componente.php

che path gli dovrei dare?

grazie
: Re:visualizzare immagini da blob 2
: mau_develop 06 Dec 2010, 13:03:40
il controller "gestisce" le task, nessuna task = task default

la task non è ne più ne meno di un metodo del controller che si occuperà di scegliere (istanziare) un model $miomodel=getModel(nome_model);

usarne un metodo $mieidati = $miomodel->faiQualcosa();

passare alla view questi dati con un assign dopo aver scelto una view e il suo formato di dati getView(nome, formato).

M.
: Re:visualizzare immagini da blob 2
: Cybassh 06 Dec 2010, 13:20:34
ok,
  il blob lo passo alla view. ma mi visualizza i caratteri del blob e non l'immagine.
io pensavo di creare un file stream.php dove si settava il  mime in base all'estensione e poi fare il print del blob(magari preso dalla sessione) con  la dicitura che avevo riportato prima cioè:
:
<img  src="components/com_componente/include/stream.php?tipo=<?php echo $ext;?>" alt="Foto personale"/> ma non funziona...
: Re:visualizzare immagini da blob 2
: mau_develop 06 Dec 2010, 13:39:12
le immagini sono memorizzate nel db? o viene memorizzato il link?

perchè lo stream... comunque non può farlo un file esterno

mi aspetto qs: task->vedi_immagine
controller:
   function vedi_immagine(){
      $model = $this->getModel('nome');
       $view =& $this->getView('visualizza_immagine', 'html');

       if($img=$model->get_mia_img()){
          $view->assign('img', $img);
                 }

       $view->setModel($model);
      $view->display();
   }

model:

function get_mia_img(){
            query al db;
            return risultato;
}

view:

$img = getVar('img');
$this->assign( 'img',   $img );

template:

$mia_immagine = $this->img;

M.
: Re:visualizzare immagini da blob 2
: Cybassh 06 Dec 2010, 14:45:32
si + o -, la tua è piu' raffinata, pero' (c'è sempre un pero')
è che devo visualizzare questa immagine all'interno di un content che ha altre informazioni tipo nome cognome struttura etc... ed ho problemi a visualizzarla.
pensavo di creare una cartella include nella root del componente, e metterci un file stram.php al quale passi la ext per il mime ed il blob dell'immagine. ma non me la cattura.
dal template scrivo  quello che avevo scritto prima(non era chiaro) ma mi restituisce il valore alt, cioe "foto personale"


non riesco a passare stream.php il blob attraverso la sessione...cioè..ovviamente. volevo cercare una soluzione...

anche poter scrivere su una cartlla temporanea le foto, associate all'id x es

: Re:visualizzare immagini da blob 2
: Cybassh 07 Dec 2010, 14:37:14
Aspetta un secondo,
quando sul template della view ottieni l'immagine sottoforma di blob, che faresti poi per farla visualizzare insieme ad altri contenuti?
: Re:visualizzare immagini da blob 2
: mau_develop 07 Dec 2010, 16:37:16
se quel file che tu chiami stream ha una classe che manipola le gd porti la classe nel tuo componente (model)

M.
: Re:visualizzare immagini da blob 2
: Cybassh 09 Dec 2010, 15:21:38
ok. risolto cosi':
aggiunto task del controller Visuafoto()
:
$document =& JFactory::getDocument();
//echo del contenuto del campo blob
$id_anagrafica=JRequest::getVar('id_anagrafica');
$model = $this->getModel();
$arr_foto=$model->daiFoto($id_anagrafica);
$ext=$arr_foto[0][fileext];
$foto=$arr_foto[0][blobdata];
//echo "aio!";
//var_dump($foto);
//exit;

$document->setMimeEncoding("image/$ext");
//header("Content-type: image/$ext");

print($foto);
return;
poi nel template delle viste (essendo la foto una info comune) ho messo questa istruzione:
:
<img src="<?php echo JRoute::_("https://web.unipg.it/personale/index.php/docenti?format=raw&task=VisuaFoto&id_anagrafica=$id_anag"); ?>" alt="Foto personale" />
e funziona con mio sommo sbigottimento hehehehe
grazie mille (ho anche capito la differenza tra mvc e mv c ;) )