Un saluto a Tutti. Io mi chiamo Giuseppe, mi occupo di programmazione per il web da un paio di anni e da qualche mese mi sto dedicando a JOOMLA 3.3. Sto cercando di capire come usarlo. Io ragiono come il solito programmatore che vuole mettere mano dentro il sorgente per scrivere.Credo che a volte questo modo di pensare sia corretto. Non mi piace limitare l'uso di un CMS come un semplice data Entry come la scrittura di un documento word. Sto cercando di mettere in atto le mie conoscenze acquisite da poco nella realizzazione di un sito scritto con joomla 3.3 al momento. Inserito nel mio template, nella posizione left, il modulo di login, pratico la tecnica dell' override sia nel momento del login in cui inserisco utente e password, qui diciamo che conta l'aspetto grafico leggermente diverso da quello originale, Questo come sapete, almeno io lo realizzo per avere nel mio template, la cartella html con la cartella mod_login che contiene al suo interno due file importanti che si chiamano
default.php per l'override del login , e
default_logout.php per il logout, fondamentale in quanto mi permette di intervenire su certi controlli. Ad esempio nel tag body un evento onload con una funzione che dovrebbe accedere al database per verificare se l'utente è presente in un file mio personale che contiene con la tabella users di joomla solo due campi in comune: username ed id. Dopo la registrazione dell' utente, diciamo che occorre la registrazione di una scheda personale che avviene ripeto in un mio file che contiene solo due campi in comune come detto. Pensavo come si fa di solito da un programma HTML, ma qui il programma di base è php, per la precisione default_logout.php, vorrei all'evento onload nel tag body, chiamare una funzione che faccia grosso modo questo:
function inizialize1(){
id = <?php echo $user->get('id');?>;
utente = "<?php echo $utente; ?>";
var xhrO = new XMLHttpRequest();
var url = "
http://127.0.0.1:8080/joomla/templates/themeartchat/html/mod_login/php/check_iscritti.php?id="+id+"&utente="+utente;
xhrO.open("get",url,false);
xhrO.onreadystatechange = function() {
if (xhrO.readyState == 4 && xhrO.status==200) {
vu = xhrO.responseText;
js1 = eval(vu);
//check();
}}
xhrO.send(); // chiamata sincrona
//document.getElementById('testi2').innerHTML = 'xhrO.status == '+xhrO.status+'
'+ 'xhro.readyState = '+ xhrO.readyState + '
';
document.getElementById('testi2').innerHTML = 'utente = '+ utente+' id= '+id;
document.getElementById('testi3').innerHTML = 'utente .. js1[0].utente = '+ js1[0].utente+' id ..js1[0].prg_utent = '+js1[0].prg_utent;
document.getElementById('testi4').innerHTML = 'vu = '+ vu;
}
In testi2,3,4 ci sono dei controlli di elaborazione. Cosa succede in
check_iscritti.php ? se io lo scrivo senza un filo di joomla, mi ritorna il mio array in formato JSON che ha questa semplice struttura:
{utente:"",prg_utent:0,countx:0}
dove utente= username, prg_utente = id, il countx può valere 0 se non è stato trovato il record sul mio file ed 1 se è stato trovato. Diciamo che mi piacerebbe in un programma esterno a joomla riuscire ad utilizzare ad esempio
$db = JFactory::getDbo() con il suo seguito credo sia il seguente ad esempio
$db = & JFactory::getDbo() or die (mysql_error ());
$query = $db->getQuery(true);
$query->select('count(*)')
->from($db->quoteName('iscritti'))
->where($db->quoteName('id_utente')." = '".$utente."'")
->where($db->quoteName('prg_ute').' = '.$id);
$db->setQuery($query);
$db->query();
$countx = $db->loadResult();
O si potrebbe scrivere anche in questo modo credo
$db = JFactory::getDbo();
$query = "SELECT count(*) FROM iscritti WHERE id_utente='".$utente."' and prg_ute = ".$id;
$db->setQuery($query);
$rowsAG = $db->getNumRows(); // legge numero record
//$replyAG = $db->loadRow();
$countx = $db->loadResult();
Il programma sarebe il seguente ma non funziona. Non mi da più errori che non trova la classe JFactory ad esempio ma non fa nulla.
==========================================================================
check_iscritti.php
<?php
if (!defined('JPATH_PLATFORM'))
{
define('JPATH_PLATFORM', 'C:/Programmi/EasyPHP-DevServer-14.1VC9/data/localweb/joomla/libraries');
}
$JPATH2 = 'http://127.0.0.1:8080/joomla';
$JPATH = 'C:/Programmi/EasyPHP-DevServer-14.1VC9/data/localweb/joomla';
require_once $JPATH . '/classes/json.php';
require JPATH_PLATFORM . '/import.legacy.php';
require JPATH_PLATFORM . '/cms.php';
require_once JPATH_PLATFORM.'/joomla/factory.php';
$conf = & JFactory::getConfig();
$session = & JFactory::getSession();
//require_once './../../../../../libraries/joomla/factory.php';
//require_once $_SERVER['DOCUMENT_ROOT'].'/joomla/libraries/joomla/factory.php';
//echo $_SERVER['DOCUMENT_ROOT'];
$json = new Services_JSON(); //crezione dell'istanza
$json_parmstring = '{utente:"",prg_utent:0,countx:0}';
$json_parmdati = $json->decode($json_parmstring); //creo object JSON
//$id = 14;
//$utente = 'joseph99';
if (isset($_GET["utente"]))
$utente = $_GET["utente"];
else
$utente = 'joseph99';
if (isset($_GET["id"]))
$id = $_GET["id"];
else
$id = 14;
$json_parmdati->utente = $utente;
$json_parmdati->prg_utent = $id;
$query = "select count(*) from iscritti where id_utente = '". $utente . "' and prg_ute = ".$id;
$countx=0;
//----------------------------------------
/*
$db = & JFactory::getDbo() or die (mysql_error ());
$query = $db->getQuery(true);
$query->select('count(*)')
->from($db->quoteName('iscritti'))
->where($db->quoteName('id_utente')." ='".$utente."'")
->where($db->quoteName('prg_ute').'='.$id);
$db->setQuery($query);
$db->query();
$countx = $db->loadResult();
*/
//--------------------------------
$db = JFactory::getDbo();
$query = "SELECT count(*) FROM iscritti WHERE id_utente='".$utente."' and prg_ute = ".$id;
$db->setQuery($query);
$rowsAG = $db->getNumRows(); // legge numero record
//$replyAG = $db->loadRow();
$countx = $db->loadResult();
$json_parmdati->countx = $countx;
print '[{utente:"'.$json_parmdati->utente.'",prg_utent:'.$json_parmdati->prg_utent.',countx:'.$json_parmdati->countx.'}]';
// print '[{utente:"joseph99",prg_utent:14,countx:1}]';
//JPATH_PLATFORM =C:\Programmi\EasyPHP-DevServer-14.1VC9\data\localweb\joomla\libraries
echo $rowsAG . 'Ciao';
?>
Mi chiedo, Si può usare XMLHTTPREQUEST in un programma di servizio? Inoltre ho avuto difficoltà ad usare
Session_start() del PHP. Non so come usare l' istanza di JSession visto che serve reperire variabili in programmi esterni.
Ho questi due grossi problemi da risolvere piuttosto per avere le idee un po più chiare. Avrei una mezza idea che penso funzionerà e sarebbe quella di scrivere il programma esterno come una funzione php che poi includerei nel mio default_logout.php e richiamare. Diciamo che dovrebbe svolgere quale funzione, l'accesso al database con la stringa $Query passata da me e ritornarmi il record set che elaborerei al ritorno. Un parametro passato che indichi le modalità di ritorno del recordset. Insomma avrei di bisogno di capire un po. Grazie per la Vostra attenzione...