

Con Catalog è possibile aggiungere record in BE tramite la sua gestione, invece in FE si può usare il modulo Catalog Edit o il Generatore di Form.
Ma se vogliamo rimuovere un record come facciamo dal FE ?
Ma se vogliamo rimuovere un record come facciamo dal FE ?

Maurizio A.
www.visionecreativa.com
www.contaotutorial.com
www.visionecreativa.com
www.contaotutorial.com
10/08/2011 09:40

Per cancellare dal frontend gli elementi di catalogo ho scritto a mano un po' di codice che mi fa la cancellazione dell'elemento specifico tramite Ajax.
In pratica devi scrivere una funzione javascript che fa una richiesta http su un file php a cui passi come parametri GET tutto cio' che ti serve per individuare univocamente l'elemento specifico (basterebbe anche solo l'ID ad esempio).
Puoi cancellare anche gruppi di elementi, dipende da quale parametro/i scegli di passare al GET del php... dentro al quale poi fai eseguire la query al db....
potrebbe sembrare un po' complicato all'inizio ma se leggi qualcosa su ajax ti accorgi subito che è semplicissimo!
Con questo sistema sono arrivato a gestire cataloghi piuttosto ben articolati dal frontend!
a presto,
Giancarlo.
11/08/2011 00:24
Putroppo non ho molta dimestichezza con Ajax non è che avresti da postare qualche riga di codice di esempio da cui partire...

Maurizio A.
www.visionecreativa.com
www.contaotutorial.com
www.visionecreativa.com
www.contaotutorial.com
11/08/2011 00:38
visionecreativa:
Putroppo non ho molta dimestichezza con Ajax non è che avresti da postare qualche riga di codice di esempio da cui partire...
Ciao, a suo tempo io avevo adottato una "tecnica" simile ad Ajax che si chiama AHaH, che con una semplice funzione ti permette di eseguire richieste asincrone al server web, con in più il vantaggio della scalabilità nativa.
Da allora ho sempre usato questa...
Ecco lo script, che io integro includendo ahah.js nella mia pagina HTML:
javascript:
//AHAH (Asynchronous HTML and HTTP) JavaScript Document function callAHAH(url, pageElement, callMessage, errorMessage) { document.getElementById(pageElement).innerHTML = callMessage; try { req = new XMLHttpRequest(); /* e.g. Firefox */ } catch(e) { try { req = new ActiveXObject("Msxml2.XMLHTTP"); /* some versions IE */ } catch (e) { try { req = new ActiveXObject("Microsoft.XMLHTTP"); /* some versions IE */ } catch (E) { req = false; } } } req.onreadystatechange = function() { responseAHAH(pageElement, errorMessage); }; req.open("POST",url,true); req.send(null); } function responseAHAH(pageElement, errorMessage) { if(req.readyState == 4) { if(req.status == 200) { output = req.responseText; document.getElementById(pageElement).innerHTML = output; } else { document.getElementById(pageElement).innerHTML = errorMessage+"\n"+responseText; } } }
Un esempio banale:
html4strict:
mia-pagina.php potrebbe essere una semplice pagina con
php:
echo("hello world!");
Se tutto è giusto, cliccando sul link la scritta dentro il tuo contenitore dovrebbe cambiare perché presenta come innerHtml del tuo elemento il risultato dell'esecuzione della pagina PHP. Ti lascio immaginare le possibilità che ci sono facendo eseguire un'altra pagina PHP rimanendo nella nostra pagina di partenza...
Prova e fammi sapere se risolve il tuo problema

[L'ultima modifica di Abisem, 11/08/2011 21:59]
Pluralitas non est ponenda sine necessitate.
11/08/2011 21:43

mi sembra veramente geniale e applicato in maniera giusta si possono fare una miriade di cose.
Mi metto al lavoro e ti faccio sapere come funziona

Grazie per questa dritta...

Maurizio A.
www.visionecreativa.com
www.contaotutorial.com
www.visionecreativa.com
www.contaotutorial.com
11/08/2011 23:26
visionecreativa:
non è che avresti da postare qualche riga di codice di esempio da cui partire...
Quello che ha postato Abisem è molto simile al metodo che uso io... soltanto che io i parametri li passo direttamente alla mia funzione javascript.
questo è il codice javascript che includo prima del catalogo lista (da cui devo cancellare gli elementi); alla funzione passo come parametro l'id dell'elemento da cancellare:
javascript:
function eliminaelemento(id){ if (window.confirm("Sei sicuro di cancellare questo elemento?")){ if (id=="") { document.getElementById("confirmdiv").innerHTML=""; return; } if (window.XMLHttpRequest) { // code for IE7+, Firefox, Chrome, Opera, Safari xmlhttp=new XMLHttpRequest(); } else { // code for IE6, IE5 xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); } xmlhttp.onreadystatechange=function(){ if (xmlhttp.readyState==4 && xmlhttp.status==200){ document.getElementById("confirmdiv").innerHTML=xmlhttp.responseText; setTimeout(function(){window.location.reload(true);}, 1000); } } xmlhttp.open("GET","templates/eliminaelemento.php?id="+id,true); xmlhttp.send(); } }
nel template di lista catalogo invece puoi far stampare su ogni elemento qualcosa del tipo:
javascript:
<a href="javascript:void(0);" onclick="eliminaelemento(<?php echo $entry['id']; ?>)">Cancella questo elemento</a>
Il lavoro che devi fare a questo punto è soltanto sul file "templates/eliminaelemento.php" che riceve come parametro GET l'id dell'elemento e fa una query al db per l'eliminazione dello stesso ed in base al risultato ottenuto (query eseguita con successo o meno) mi restituisce una echo che verrà visualizzata nel "confirmdiv" della pagina in cui compare la lista.
Io per sicurezza passo altri parametri al file php che esegue l'eliminazione dal db, ma soltanto perchè il "sistema" che ho messo su richiede questi livelli di sicurezza.
Spero ti sia utile il codice che ho messo!
A presto,
saluti,
Giancarlo.
12/08/2011 13:00
Grazie sia a Gianko che Abisem ora che sono di nuovo al lavoro sul progetto vi saprò dire come avrò risolto il problema.
Maurizio A.
www.visionecreativa.com
www.contaotutorial.com
www.visionecreativa.com
www.contaotutorial.com
01/09/2011 09:33
