Autore Topic: info su come richiamare i model dalle view  (Letto 3486 volte)

Offline pino8314

  • Nuovo arrivato
  • *
  • Post: 40
    • Mostra profilo
info su come richiamare i model dalle view
« il: 21 Lug 2010, 19:54:56 »
Salve,
avrei bisogno di una dritta cosi vengo direttamente al punto... sappiamo che, per convenzione, il framework di joomla passa automaticamente alla view, attraverso il controller, la classe model con il nome corrispondente a quello della view stessa... e se invece volessi richiamare dalla view un'altra classe presente sempre sullo stesso Model... quindi un file model che al suo interno ha due classi del tipo

class CompModelPrimo extends JModel
class CompModelSecondo extends JModel

es. banale per per capirci
1. file model primo.php con al suo interno la classe -> class CompModelPrimo extends JModel e la classe class CompModelSecondo extends JModel
2. cartella view primo -> che ottiene automaticamente l'assegnazione della classe del modulo soprastante

MODEL
Codice: [Seleziona]
class CompModelPrimo extends JModel
{
    function saluto()
    {
        return 'ciao';
    }
}

class CompModelSecondo extends JModel
{
    function saluto2()
    {
        return 'ciaoooo';
    }
}

VIEW
Codice: [Seleziona]
class CompViewPrimo extends JView
{
    function display($tpl = null)
    {
        $model =& $this->getModel();
        $var = $model->saluto();
        $this->assignRef( 'saluto',        $var );
 
        parent::display($tpl);
    }
}
 

io invece vorrei richiamare la seconda classe e non quella che viene assegnata per convenzione da joomla... ho provato con $model =& $this->getModel('Secondo'); ma non funziona

Offline t3cnoSite

  • Esploratore
  • **
  • Post: 98
    • Mostra profilo
Re:info su come richiamare i model dalle view
« Risposta #1 il: 21 Lug 2010, 20:33:56 »
Sbagli approccio.
Le convenzioni solitamente servono per semplificare, non ha senso dunque cercare di aggirarle.

Nel tuo caso, hai due possibilità:
  • ti crei due file model, uno con la prima classe, l'altro con la seconda, potendo richiamare nella view o l'uno o l'altro
  • includi all'interno della prima classe il metodo della seconda; risultato: un solo modello con due funzioni differenti

Spero di esserti stato d'aiuto.

Offline pino8314

  • Nuovo arrivato
  • *
  • Post: 40
    • Mostra profilo
Re:info su come richiamare i model dalle view
« Risposta #2 il: 21 Lug 2010, 21:25:02 »
Sbagli approccio.
Le convenzioni solitamente servono per semplificare, non ha senso dunque cercare di aggirarle.

Nel tuo caso, hai due possibilità:
  • ti crei due file model, uno con la prima classe, l'altro con la seconda, potendo richiamare nella view o l'uno o l'altro
  • includi all'interno della prima classe il metodo della seconda; risultato: un solo modello con due funzioni differenti

Spero di esserti stato d'aiuto.


grazie mille per avermi risposto, in effetti c'hai ragione, però alcune volte nasce l'esigenza di aggirarle...

nel primo caso come posso fare a richiamare in una view uno dei due model??
nel secondo caso dici di usare un extend??

se non ti dispiace potresti farmi degli esempi

Offline t3cnoSite

  • Esploratore
  • **
  • Post: 98
    • Mostra profilo
Re:info su come richiamare i model dalle view
« Risposta #3 il: 22 Lug 2010, 06:40:31 »

grazie mille per avermi risposto, in effetti c'hai ragione, però alcune volte nasce l'esigenza di aggirarle...

nel primo caso come posso fare a richiamare in una view uno dei due model??
nel secondo caso dici di usare un extend??

se non ti dispiace potresti farmi degli esempi

Per il primo caso, a pensarci meglio non sono sicuro se all'interno di una view puoi chiamare un modello differente da quello associato alla view. (Se non comprendi cosa significhi associato, mi riferisco alla convenzione dei nomi delle classi per cui ad una view col nome "CompViewPrimo"deve essere associato il model "ComponentModelPrimo" ).
Quindi dovresti creare per due modelli due view
Citazione
CompModelPrimo e CompViewPrimo, CompModelSecondo e CompViewSecondo
, seguendo il secondo caso, che ora ti spiego.


Nel secondo caso non so cosa sia un extend.
Io volevo semplicemente dire di definire due funzioni all'interno della stessa classe model.
Queste due funzioni potrai richiamarle nel file view.html.php con le seguenti istruzioni:
Codice: [Seleziona]
$model =& $this->getModel('primo');
$items = $model->saluto();
$items2 = $model->saluto2();

Offline pino8314

  • Nuovo arrivato
  • *
  • Post: 40
    • Mostra profilo
Re:info su come richiamare i model dalle view
« Risposta #4 il: 22 Lug 2010, 09:55:32 »
grazie per il tempo che mi stai dedicando, sei molto gentile....

presumevo che non si potesse richiamare più di un model da una view.
Per il secondo caso, da quanto ho capito, tu dici di passare la funzione nella prima classe cosi da poterla richiamare... però è ovvio che cosi funzioni... io pensavo che tu dicessi di fare un extend della seconda classe sulla prima, cioè quella del model... tra l'altro non so se joomla lo permette. una cosa di questo tipo

Codice: [Seleziona]

class CompModelSecondo extends JModel
{
    function saluto2()
    {
        return 'ciaoooo';
    }
}

class CompModelPrimo extends CompModelSecondo
{
    function saluto()
    {
        return 'ciao';
    }
}


ed eredito tutto

però poi diventa fantascienza... niente vale la pena che metto tutto sulla prima classe

Offline pino8314

  • Nuovo arrivato
  • *
  • Post: 40
    • Mostra profilo
Re:info su come richiamare i model dalle view
« Risposta #5 il: 22 Lug 2010, 13:57:28 »
perfetto alla fine ho risolto pasando più file moduli alle view che voglio... non pensavo che si poteva ovviare facendo passare i model alle view direttamente dal controller.

vi faccio un esempio

controller

$document =& JFactory::getDocument();
$viewType = $document->getType();
$model = $this->getModel('primo'); // è il primo model primo.php
$model_2 = $this->getModel('secondo'); // è il secondo model secondo.php
$view = $this->getView("prova", $viewType); // qui dico al controller che deve caricare la view che voglio io
$view->setModel( $modelCat ); // e setto questi due model da caricare all'interno della view
$view->setModel( $modelCat_2 );
$view->display();


Subito dopo nella view carico il model che voglio io

$model = $this->getModel("Primo");
$model_2 = $this->getModel("Secondo");

$var = $model->saluto();

$var_2 = $model_2->saluto2();

e via dicendo...

Offline t3cnoSite

  • Esploratore
  • **
  • Post: 98
    • Mostra profilo
Re:info su come richiamare i model dalle view
« Risposta #6 il: 22 Lug 2010, 14:34:31 »
grazie per il tempo che mi stai dedicando, sei molto gentile....

presumevo che non si potesse richiamare più di un model da una view.
Per il secondo caso, da quanto ho capito, tu dici di passare la funzione nella prima classe cosi da poterla richiamare... però è ovvio che cosi funzioni... io pensavo che tu dicessi di fare un extend della seconda classe sulla prima, cioè quella del model... tra l'altro non so se joomla lo permette. una cosa di questo tipo

Codice: [Seleziona]

class CompModelSecondo extends JModel
{
    function saluto2()
    {
        return 'ciaoooo';
    }
}

class CompModelPrimo extends CompModelSecondo
{
    function saluto()
    {
        return 'ciao';
    }
}


ed eredito tutto

però poi diventa fantascienza... niente vale la pena che metto tutto sulla prima classe
L'estensione di una classe è una proprietà che non dipende da Joomla, ma dal tipo di linguaggio, ovvero il PHP.
Naturalmente, per fare l'estensione di una classe dovresti avere dei validi motivi, è una operazione che va fatta in determinate condizioni, altrimenti non ha alcun senso farla.
 

 

Host

Torna su