Joomla.it Forum
Non solo Joomla... => Sviluppo => : pino8314 21 Jul 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
class CompModelPrimo extends JModel
{
function saluto()
{
return 'ciao';
}
}
class CompModelSecondo extends JModel
{
function saluto2()
{
return 'ciaoooo';
}
}
VIEW
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
-
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.
-
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
-
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 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:
$model =& $this->getModel('primo');
$items = $model->saluto();
$items2 = $model->saluto2();
-
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
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
-
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...
-
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
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.