Back to top

Autore Topic: Utilizzo congiunto di moduli e componenti in Joomla! 1.5.7  (Letto 5705 volte)

Offline eve

  • Nuovo arrivato
  • *
  • Post: 4
    • Mostra profilo
Ciao a tutti,

ho da poco tempo iniziato ad utilizzare Joomla!, in particolare la versione 1.5.7.
Ho provato a sviluppare delle semplici estensioni, in particolare un modulo (denominato mod_scuole) ed un componente (denominato com_visualizzazione). L'obiettivo delle estensioni è realizzare un sistema integrato di navigazione. Per la precisione, mod_scuole visualizza un menù di scuole (estratte da una corrispondente tabella in mysql 5). Il componente è finalizzato alla visualizzazione del numero di studenti iscritti alla scuola selezionata dall'utente nel menu di mod_scuole. Per realizzare questo semplice sito, ho preparato due archivi .zip: mod_scuole.zip e com_visualizzazione.zip. Li ho installati separatamente. Il menu funziona bene: legge le scuole da db, le visualizza e genera automaticamente i link al componente com_visualizzazione (inclusivi dell'id della scuola di cui visualizzare il numero di iscritti). Ho installato anche il componente, senza problemi. Il punto è che i problemi si manifestano quando creo un link (nel menu principale) al componente com_visualizzazione, per farlo comparire nella pagina principale. Per la precisione, com_visualizzazione compare nella lista dei componenti e, pertanto, riesco a selezionarlo come target del link nel menu principale. Tuttavia, nel sito risultante, cliccando su questo link ottengo un errore:

404. Componente non trovato

Lo stesso messaggio è visualizzato se si clicca su uno qualunque dei link nel menu generato da mod_scuole (che richiamano il componente),

Un messaggio simile a quello sopra riportato viene inoltre visualizzato anche quando tempo di selezionare il componente nel back-end del sito. Per la precisione, se accedo da amministratore e seleziono il componente dall'elenco dei componenti disponibili, il messaggio visualizzato è il seguente:

404 - Si è verificato un errore. Componente non trovato.

Preciso che il suddetto componente effettua soltanto la visualizzazione di un record di una tabella (il cui id è passato dal link del menu mod_scuole). Pertanto non include alcuno script php per l'amministrazione. L'archivio
com_visualizzazione.zip contiene soltanto tre file:

a. un controller, che riceve l'id della scuola di cui visualizzare il numero complessivo di iscritti, interroga il database ed invoca un altro script per la visualizzazione dei dati;
b. una vista, che rappresenta i dati estratti dal db secondo un certo layout tabellare;
c. un file xml per l'installazione.

Per quanto riguarda il suddetto file xml, include i riferimenti ai file nei punti a. e b. e contiene la seguente sezione di amministazione

...
<administration>
<menu>visualizzazione</menu>
<files/>
</administration>
...

Qualche suggerimento per far correttamente funzionare il componente ed il modulo insieme?
Inoltre, come posso far apparire il componente com_visualizzazione direttamente sulla prima pagina, senza che l'utente debba cliccare sull'apposito link nel menu principale?

Vi ringrazio in anticipo per il supporto.

Offline gmassi

  • Esploratore
  • **
  • Post: 89
  • Sesso: Maschio
    • Mostra profilo
Re: Utilizzo congiunto di moduli e componenti in Joomla! 1.5.7
« Risposta #1 il: 05 Ott 2008, 15:16:58 »
Ciao,

In com_visualizzazione.zip a occhio manca anche il cd entry point, visualizzazione.php che inizializza il controller.

Ti posto quello che di solito uso io che è ripreso dal tutorial su joomla.org

Codice: [Seleziona]
<?php
defined
('_JEXEC') or die('Restricted access');
require_once(
JPATH_COMPONENT.DS.'controller.php');
if(
$controller JRequest::getWord('controller')) {
    
$path JPATH_COMPONENT.DS.'controllers'.DS.$controller.'.php';
    if(
file_exists($path)) {
        require_once 
$path;
    } else {
        
$controller '';
    }
}
$classname 'VisualizzazioneController'.$controller;
$controller = new $classname();
$controller->execute(JRequest::getVar('task'null'default''cmd'));
$controller->redirect();
?>


Questo presumendo che la classe del tuo controller in controller.php si chiami VisualizzazioneController altrimenti cambia $classname nel codice sopra.

Se non è questo posta il formato de link generati dal menu. Dovrebbe essere qualcosa del tipo

index.php?option=com_visualizzazione&view=...

Come suggerimento, ma è una questione di gusti, visto che modulo e componente lavorano insieme io li chiamerei mod_scuole e com_scuole. A quel punto però ti cambiano i nomi dei file e delle classi.

Offline eve

  • Nuovo arrivato
  • *
  • Post: 4
    • Mostra profilo
Re: Utilizzo congiunto di moduli e componenti in Joomla! 1.5.7
« Risposta #2 il: 05 Ott 2008, 16:46:38 »
Ciao,

In com_visualizzazione.zip a occhio manca anche il cd entry point, visualizzazione.php che inizializza il controller.

Ti posto quello che di solito uso io che è ripreso dal tutorial su joomla.org

Codice: [Seleziona]
<?php
defined
('_JEXEC') or die('Restricted access');
require_once(
JPATH_COMPONENT.DS.'controller.php');
if(
$controller JRequest::getWord('controller')) {
    
$path JPATH_COMPONENT.DS.'controllers'.DS.$controller.'.php';
    if(
file_exists($path)) {
        require_once 
$path;
    } else {
        
$controller '';
    }
}
$classname 'VisualizzazioneController'.$controller;
$controller = new $classname();
$controller->execute(JRequest::getVar('task'null'default''cmd'));
$controller->redirect();
?>


Questo presumendo che la classe del tuo controller in controller.php si chiami VisualizzazioneController altrimenti cambia $classname nel codice sopra.

Se non è questo posta il formato de link generati dal menu. Dovrebbe essere qualcosa del tipo

index.php?option=com_visualizzazione&view=...

Come suggerimento, ma è una questione di gusti, visto che modulo e componente lavorano insieme io li chiamerei mod_scuole e com_scuole. A quel punto però ti cambiano i nomi dei file e delle classi.



Il formato dei link all'interno del menù del componente mod_scuole è del tipo:

index.php?option=com_visualizzazione&task=display&id=2

dove il parametro task indica al componente mod_visualizzazione di visualizzare gli iscritti alla scuola il cui codice identificativo (id) è 2.

Riporto di seguito la parte "controller" del componente mod_visualizzazione, che ho impostato secondo quanto indicato in un libro dedicato a Joomla! 1.5


Codice: [Seleziona]
<?php
// Section 1
// no direct access 
defined('_JEXEC') or die('Access to this file is prohibited');
// loading of the HTML View class 
require_once (JApplicationHelper::getPath ('front_html''com_auto')); 
$task JRequest::getVar ('task'); 
// Section 2
switch( $task ) { 
case 'display'
getData(); 
break; 
default: 
echo 'Effettuare una scelta';
break;
}
// Section 3 
function getData( ) { 
global $mainframe
$id JRequest::getVar ('id');
$db =& $mainframe->getDBO();
            
 
$query "SELECT ISCRITTI FROM #__scuola WHERE ID=&id";
$db->setQuery($query);
$answer $db->loadObjectList();
      
HTML_auto::showTable($answer); 
}
?>


La riga HTML_auto::showTable($answer); effettua una invocazione ad un metodo showtable, descritto all'interno del file visualizzazione.html.php, che semplicemente formatta in html un dato letto dalla tabella "jos_scuola". Riporto di seguito il file visualizzazione.html.php:

Codice: [Seleziona]
<?php
// no direct access 
defined('_JEXEC') or die('Access to the file is prohibited');
// Start of the class definition 
class HTML_visualizzazione 
// Start of the method definition 
function showTable($answer) {
?>

<b>Studenti iscritti: <?php echo $answer->ISCRITTI?></b>

<?php 


?>


A questo punto non sono sicuro se l'approccio da me seguito e quello da te indicato siano equivalenti. Tuttavia, prima di modificare il tutto secondo lo schema da te consigliato, mi piacerebbe capire se c'è qualcosa di concettuale che non va nell'approccio da me adottato, oppure se è possibile far visualizzare il componente con qualche semplice correzione.

Mi piacerebbe inoltre che il componente fosse visualizzato direttamente sulla prima pagina, senza che l'utente sia costretto a cliccare su un qualche link nel menu principale per farlo apparire (visualizzando il testo "Effettuare una scelta", che corrisponde ad assenza di valori per il parametro "task").

Grazie di nuovo.

Offline gmassi

  • Esploratore
  • **
  • Post: 89
  • Sesso: Maschio
    • Mostra profilo
Re: Utilizzo congiunto di moduli e componenti in Joomla! 1.5.7
« Risposta #3 il: 05 Ott 2008, 17:40:14 »
Dai file che posti tu usi la 'vecchia' struttura di un componente, cioè non basata su Model View Controller. Si può fare anche in questo modo.
Il tuo controller si chiama visualizzazione.php e contiene lo switch per processare i vari task. Però se il componente è com_visualizzazione questa riga è sbagliata
Codice: [Seleziona]
require_once (JApplicationHelper::getPath ('front_html', 'com_auto')); Va cambiata così
Codice: [Seleziona]
require_once (JApplicationHelper::getPath ('front_html', 'com_visualizzazione')); Allo stesso modo in getData()
Codice: [Seleziona]
HTML_auto::showTable($answer);Diventa
Codice: [Seleziona]
HTML_visualizzazione::showTable($answer);Se no non trova il file giusto e credo sia questa la causa dell'errore 404. Prova se con queste modifiche la situazione migliora.

Per mettere il componente in prima pagina, nella gestione menu imposta il link al componente come predefinito: il pulsante con la stella nella toolbar.

Offline eve

  • Nuovo arrivato
  • *
  • Post: 4
    • Mostra profilo
Re: Utilizzo congiunto di moduli e componenti in Joomla! 1.5.7
« Risposta #4 il: 06 Ott 2008, 09:33:46 »
Dai file che posti tu usi la 'vecchia' struttura di un componente, cioè non basata su Model View Controller. Si può fare anche in questo modo.
Il tuo controller si chiama visualizzazione.php e contiene lo switch per processare i vari task. Però se il componente è com_visualizzazione questa riga è sbagliata
Codice: [Seleziona]
require_once (JApplicationHelper::getPath ('front_html', 'com_auto')); Va cambiata così
Codice: [Seleziona]
require_once (JApplicationHelper::getPath ('front_html', 'com_visualizzazione')); Allo stesso modo in getData()
Codice: [Seleziona]
HTML_auto::showTable($answer);Diventa
Codice: [Seleziona]
HTML_visualizzazione::showTable($answer);Se no non trova il file giusto e credo sia questa la causa dell'errore 404. Prova se con queste modifiche la situazione migliora.

Per mettere il componente in prima pagina, nella gestione menu imposta il link al componente come predefinito: il pulsante con la stella nella toolbar.


Ho riportato le modifiche indicate, di cui ti sono grato. Riporto di seguito gli script rivisti.

File com.visualizzazione.php:

Codice: [Seleziona]
<?php
// Section 1
// no direct access 
defined('_JEXEC') or die('Access to this file is prohibited');
// loading of the HTML View class 
require_once (JApplicationHelper::getPath ('front_html''com_visualizzazione')); 
$task JRequest::getVar ('task'); 
// Section 2 
switch( $task ) { 
case 'display'
getData(); 
break; 
default: 
echo 'Effettuare una scelta';
break;
}
// Section 3 
function getData( ) { 
global $mainframe
$id JRequest::getVar ('id');
$db =& $mainframe->getDBO();
            
 
$query "SELECT ISCRITTI FROM #__scuola WHERE ID=&id";
$db->setQuery($query);
$answer $db->loadObjectList();
      
HTML_visualizzazione::showTable($answer); 
}
?>


File visualizzazione.html.php:

Codice: [Seleziona]
<?php
// no direct access 
defined('_JEXEC') or die('Access to the file is prohibited');
// Start of the class definition 
class HTML_visualizzazione 
// Start of the method definition 
function showTable($answer) {
?>

<b>Studenti iscritti: <?php echo $answer->ISCRITTI?></b>

<?php 


?>


Nonostante le correzioni, il componente continua a non funzionare. I messaggi di errore persistono esattamente come descritto all'inizio. Apparentemente sembra che nulla sia cambiato. Ho provato anche a verificare l'effetto di piccole variazioni ai nomi dei file. Per la precisione, ho provato a ridenominare "com.visualizzazione.php" più semplicemente in "visualizzazione.php". Il risultato è che Joomla! cerca "com.visualizzazione.php", non lo trova e segnala un errore di file mancante. Così ho ripristinato il nome "com.visualizzazione.php", ma ciò purtroppo non è risolutivo.
Qualche altro utile suggerimento?

Offline gmassi

  • Esploratore
  • **
  • Post: 89
  • Sesso: Maschio
    • Mostra profilo
Re: Utilizzo congiunto di moduli e componenti in Joomla! 1.5.7
« Risposta #5 il: 06 Ott 2008, 13:32:09 »
Il nome del file deve essere visualizzazione.php e deve stare nella cartella

.../components/com_visualizzazione/

Se non funziona, posta anche il file XML completo forse l'errore è lì.


Offline eve

  • Nuovo arrivato
  • *
  • Post: 4
    • Mostra profilo
Re: Utilizzo congiunto di moduli e componenti in Joomla! 1.5.7
« Risposta #6 il: 07 Ott 2008, 09:12:38 »
Il nome del file deve essere visualizzazione.php e deve stare nella cartella

.../components/com_visualizzazione/

Se non funziona, posta anche il file XML completo forse l'errore è lì.



Riporto di seguito il file xml di configurazione denominato visualizzazione.xml:

Codice: [Seleziona]
<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE install SYSTEM "http://dev.joomla.org/xml/1.5/component-install.dtd">
<install type="component" version="1.5.0">
<name>data</name>
<creationDate>01-09-2008</creationDate>
      <author>Eve Spencer</author>
      <authorUrl/>
<copyright>Eve Spencer</copyright>
<license>GNU/GPL</license>
<version>1.0.0</version>
<authorEmail/>
<description>This component displays school data</description>
<files>
<filename component="com_visualizzazione">visualizzazione.php</filename>
<filename component="com_visualizzazione">visualizzazione.html.php</filename>
</files>
      <administration>
<menu>visualizzazione</menu>
            <files/>
</administration>
</install>
[\code]

A dire il vero non mi è ben chiaro come organizzare i file all'interno della cartella com_visualizzazione. Il punto è che non mi è chiaro quali siano i vantaggi/svantaggi derivanti dall'adozione del modello di componenti che mi hai suggerito tu, rispetto a quello seguito da me e preso da un libro su Joomla! 1.5.7. L'adozione di uno o l'altro modello implica una diversa organizzazione dei file. Mi sembra di aver rispettato lo schema previsto dall'approccio da me sguito... Il punto è che non funziona...

Grazie,
Eve

P.S.: potresti gentilmente spendere qualche parola per analizzare comparativamente i due modelli di sviluppo di cui sopra?

Offline gmassi

  • Esploratore
  • **
  • Post: 89
  • Sesso: Maschio
    • Mostra profilo
Re: Utilizzo congiunto di moduli e componenti in Joomla! 1.5.7
« Risposta #7 il: 08 Ott 2008, 18:24:19 »
Io proverei a cambiare queste cose
Codice: [Seleziona]
<name>Visualizzazione</name>
Codice: [Seleziona]
<files>
<filename component="com_visualizzazione">visualizzazione.php</filename>
<filename>visualizzazione.html.php</filename>
</files>

Salva il file xml, rifai il pacchetto .zip, disinstalla il componente, reinstalla e ricrea il link dal menu.

Non capisco il problema nell'organizzazione dei file nella directory, se il file xml è fatto bene ci pensa la procedura di installazione a mettere i file nel posto giusto.

Offline ste

  • Instancabile
  • ******
  • Post: 8774
  • Sesso: Femmina
    • Mostra profilo
Re: Utilizzo congiunto di moduli e componenti in Joomla! 1.5.7
« Risposta #8 il: 08 Ott 2008, 19:19:07 »
Ciao ragazzi, vi sposto nella sezione sviluppo, ok?
TTI - Team Traduzione Italiano di Joomla.it - Guide su Joomla

Offline gmassi

  • Esploratore
  • **
  • Post: 89
  • Sesso: Maschio
    • Mostra profilo
Re: Utilizzo congiunto di moduli e componenti in Joomla! 1.5.7
« Risposta #9 il: 08 Ott 2008, 19:45:32 »
ok sposta, sposta ste, nessun problema. Ci mancherebbe :)

Offline ste

  • Instancabile
  • ******
  • Post: 8774
  • Sesso: Femmina
    • Mostra profilo
Re: Utilizzo congiunto di moduli e componenti in Joomla! 1.5.7
« Risposta #10 il: 08 Ott 2008, 19:47:47 »
ecco fatto ;)
TTI - Team Traduzione Italiano di Joomla.it - Guide su Joomla

 



Web Design Bolzano Kreatif