Joomla.it Forum

Non solo Joomla... => Sviluppo => : gordon81 13 Nov 2006, 10:25:33

: Rilevazione degli eventi
: gordon81 13 Nov 2006, 10:25:33
Salve a tutti,
Sto sviluppando il mio componente per joomla,e non sono riuscito a capire bene come gestire la rilevazione degli eventi.Non capisco in particolare se le variabili globali task e act devono essere instanziate oppure se questo avviene i automatico.Il mio componente deve inserire dei dati nel database in cui in fase di installazione viene inserita una nuova tabella,una volta fatto deve rimostrare la pagina per l'inserimento dei dati(il form vuoto,cioè).Ho richiamato le variabili citate prima con $task=mosGetParam($_REQUEST,'task').Ho fatto varie prove e non ho avuto risultati,cioè o mi dice che l'accesso è vietato o mi manda alla prima pagina del menu amministratore senza inserire il nuovo record nel database.Quale potrebbe essere l'errore.Molte grazie a tutti coloro che mi risponderanno.
: Re: Rilevazione degli eventi
: napo 13 Nov 2006, 10:30:27
La variabili $task e $act (così come $option e $Itemid) non vanno dichiarate in quanto sono fornite direttamente dal framework.

Per quanto riguarda il problema del database, è difficile trovare una soluzione senza sapere come hai scritto il codice.
: Re: Rilevazione degli eventi
: gordon81 13 Nov 2006, 10:52:39
Questo è il file admin.php:
<?php
   
      defined('_VALID_MOS') or die('Direct Access to this location is not allowed');
         if (!($acl->acl_check( 'administration', 'edit', 'users', $my->usertype, 'components', 'all' )
               | $acl->acl_check( 'administration', 'edit', 'users', $my->usertype, 'components', 'com_contact' )))
                     {
                        mosRedirect( 'index2.php', _NOT_AUTH );
                     }

      require_once( $mainframe->getPath( 'admin_html' ) );
   //   $act=mosGetParam($_REQUEST,'act','');
      
   switch($act)
   {
       case 'comuni':
            
               giornScreens::mostraForm();
            break;
    default:
      giornScreens::mostraForm();   
      break;

   //      $task=mosGetParam($_REQUEST,'task');
         switch($task)
      {
            case 'save':
               salvaDati();
               giornScreens::mostraForm();
            break;
            case 'cancel':
               giornScreens::mostraForm();   
            break;
            default:
                  echo "ciao";
            break;   
      }
      break;
   }
      
   function salvaDati()
   {
         
         global $database;
         $nome=$_POST[nome];   
         $sin=$_POST[sin];         
               
         $query="INSERT INTO #__giorn (nome, sin)"         . "/n VALUES ($nome, $sin)";           
         $database->setQuery( $query );
         
   }
   
?>

e questa è la parte +importante di toolbar.admin.php:

   require_once($mainframe->getPath('toolbar_html'));
   

   
//   $task=mosGetParam($_REQUEST,'task');
   
   switch($task)
   {   
      
            case 'save':
               giornToolbar::mostraTool();   
            
            break;
            case 'cancel':
               giornToolbar::mostraTool();   
            
            break;   
      
            default:
               giornToolbar::mostraTool();
            break;   
   }
in toolbar.amin.html ho inserito i tasti con:
   mosMenuBar::cancel($task='cancel','Annulla');

Questo è il cuore del mio "grande componente"..cosa potrei aver sbagliato?
   
: Re: Rilevazione degli eventi
: napo 13 Nov 2006, 10:59:38
Ci sono diversi errori nel codice.

Innanzitutto il controllo di autenticazione:
if (!($acl->acl_check( 'administration', 'edit', 'users', $my->usertype, 'components', 'all' ) | $acl->acl_check( 'administration', 'edit', 'users', $my->usertype, 'components', 'com_contact' )))
Il tuo componente si chiama com_contact? ???

Poi, non puoi innestare uno switch dentro l'altro come hai fatto tu. E comunque la gestione dei task mi sembra un pò confusionaria.

Infine, non fai nessuna query al database.
Il tuo codice è:
$query="INSERT INTO #__giorn (nome, sin)" . "/n VALUES ($nome, $sin)";           
$database->setQuery( $query );

Ma così imposti solamente la query, non la esegui.
: Re: Rilevazione degli eventi
: gordon81 13 Nov 2006, 12:40:17
Dovrei aggiungere $database->query o loadObjectList() per fare eseguire la query?Un'altra cosa se tolgo lo switch dal primo non mi visualizza il toolbar.Dove posso trovare la documentazione delle varie funzioni già implementate da joomla?
: Re: Rilevazione degli eventi
: napo 13 Nov 2006, 12:43:25
Dove posso trovare la documentazione delle varie funzioni già implementate a joomla?

Abbi ancora pazienza: http://www.allone.it/joomla/joomla/joomla-1.0-manuale-dello-sviluppatore.html.