My Personal Budget

Da un pò di tempo a questa parte sto sviluppando un progettino in php identificato dal nome provvisorio (che però potrebbe diventare definitivo in mancanza di alternative) di “My Personal Budget” (facile, no?). Scopo del progettino è realizzare un sistemino di contabilità personale per tenere traccia delle mie spesucce (che nei prossimi mesi tenderanno ad aumentare, mentre le entrate tenderanno a diminuire, ma questa è un’altra storia :-) ). Si tratta di una web application basata su php e un database SQLite3, con massiccio uso di JQuery, JQuery UI e css e l’ottimo appoggio del framework css Blueprint e di Php Activerecord.

Al momento il progettino vanta features quali:

  • una (semplice) gestione utenti e livelli;
  • diversi conti per ciascun utente;
  • categorie e tag;
  • chiusura contabile di fine mese con saldo;
  • traccia del saldo per tutto l’anno fiscale;
  • un’interfaccia colorosa e pastellosa :-) per la quale però si accettano suggerimenti visto che a detta di molti è un tantino psichedelica :-) .

Altre cosucce sono in cantiere: grafici, resoconti, resoconti stampabili (e magari anche in pdf!), cose così.. se qualcuno vuole giocherellare con il progetto il codice è ovviamente open e liberamente scaricabile da GitHub (https://github.com/PicciMario/My-Personal-Budget). Sono aperto a qualunque tipo di commento o suggerimento, e qualunque supporto è ben accetto!

Appunti Javascript: i div magici che scompaiono

Altro appuntino facile facile per realizzare un trucchetto che può tornare utile senza bisogno di andarsi a cercare librerie aggiuntive. In un’applicazioncina che sto scrivendo mi serve un help contestuale in presenza di alcune parole chiave, e tra i tanti metodi che ho vagliato il quello che mi è sembrato meglio è riportare l’help dentro un div direttamente sotto la parola; questo div normalmente non è visibile, ma appare se clicco sulla suddetta parola (e scompare se clicco un’altra volta). Il meccanismo è semplice:

1) Una funzioncina javascript da mettere in cima al body della pagina:

<script type="text/javascript">
function toggleDiv(divid){
 if(document.getElementById(divid).style.display == 'none'){
 document.getElementById(divid).style.display = 'block';
 }else{
 document.getElementById(divid).style.display = 'none';
 }
 }
</script>

La funzione riceve il nome di un div nella pagina, ne valuta il parametro “display” (che definisce se il div è visibile “block” o invisibile “none”) e ne cambia il valore.

2) Un div (ovviamente :-) ):

<div id="aiuto"> Un aiutino: sii deciso e usa parole inventate fingendoti esperto. </div>

3) Un link nella pagina:

<!-- pagina -->
La funzione del giorno è: <a href="togglediv('aiuto')">Foniuglia  e Lordizzazione IRPEF</a>

Ecco fatto, dovrebbe funzionare.

PS: quanto esposto sopra va benissimo per progetti semplici o paginette php singole.. per un progetto più strutturato, come evidenziato precedentemente dall’illustre collega Frasten, conviene appoggiarsi a una libreria ben fatta come jQuery. Qui potete trovare un tutorial di come fare quanto descritto sopra con jQuery.

Appunti AJAX: caricamento asincrono di HTML in un DIV

Giusto un breve post su una cosa sulla quale sto giocherellando in questi giorni. Sto scrivendo un’applicazioncina web php/sqlite3 di una paginetta; in questa applicazione appaiono sigle e simboli arcani, che richiedono un help contestuale: io clicco su una stringa (che camuffa un link) e da qualche parte nella pagina una sezione cambia contenuto per andare a contenere il testo di un help. Come fare? Mi servono tre cose:

1) Nella pagina principale dell’applicazione il div che andrà a contenere il testo. Basta una cosa qualunque

<div id="helpdiv">Help in linea</div>

2) Una pagina esterna destinata a creare l’help online a partire da un parametro “codice” fornito mediante GET. La chiameremo “decodifica.php”, e inizierà con qualcosa del tipo:

<!-- pagina decodifica.php  -->
<?php
if (!isset($_GET['formula'])) return "Beh?";
else return $_GET['formula'];
?>

Una cosina semplice, che se chiamata senza parametro restituisce un accigliato warning mentre se viene richiamata correttamente con il parametro “formula” fa un echo di quanto passato.. giusto per provare!

3) una funzioncina javascript nella pagina principale.

<script type="text/javascript">

Questa prima funzione viene richiamata dal link con un parametro, l’url della pagina di decodifica. La funzione lancia la richiesta della pagina di decodifica e poi resta in attesa dell’acknowledge, all’arrivo del quale lancerà la funzione “scriviDiv”

function impostaDiv(url) {
 if (window.XMLHttpRequest) { // Non-IE browsers
 req = new XMLHttpRequest();
 req.onreadystatechange = scriviDiv;
 try {
 req.open("GET", url, true);
 } catch (e) {
 alert(e);
 }
 req.send(null);
 } else if (window.ActiveXObject) { // IE
 req = new ActiveXObject("Microsoft.XMLHTTP");
 if (req) {
 req.onreadystatechange = scriviDiv;
 req.open("GET", url, true);
 req.send();        
 }
 }
}

Questa funzione invece viene richiamata al termine della chiamata alla pagina di decodifica, e scrive il testo restituito nel div di destinazione “helpdiv”.

function scriviDiv() {
 if (req.readyState == 4) { // completato
 if (req.status == 200) { // risposta affermativa
 document.getElementById("helpdiv").innerHTML = req.responseText;
 } else {
 alert("Problem: " + req.statusText);
 }
 }
}
</script>

4) Per concludere, occorrono i link nella pagina principale per richiamare la funzione impostaDiv, una cosa del tipo:

<a href="javascript:impostaDiv('decodifica.php?formula=sorpresa')">Scritta strana</a>

Ecco fatto! A questo punto dovremmo avere un sistema che si comporta così:
- l’utente preme il link “scritta strana”;
- viene chiamata una funzione javascript impostaDiv con parametro formula=sorpresa;
- la funzione impostaDiv richiama la pagina decodifica.php?formula=sorpresa;
- la pagina ritorna la scritta “sorpresa” (la stessa che gli è stata passata!);
- appena la pagina è pronta si attiva la chiamata di ritorno scriviDiv, che va a scrivere l’output di cui sopra (ovvero la scritta “sorpresa”) nel div “helpDiv”, che fino a poso tempo fa conteneva solo il testo “Help in linea”.

Facile, no?

Saluti!