Se il pedone è l’anima degli scacchi secondo un famoso aforisma allora il database è l’essenza di ogni progetto web: codeigniter come partire con il piede giusto e far crescere la propria WEB APP

Come ogni costruzione che si rispetti servono delle fondamenta solide per tirare su una bella struttura architettonica, che sia cemento o materiale astratto espresso in byte poco importa: l’esperienza insegna che se parti male a progettare il tuo database allora presto ne pagherai le conseguenze. Ho verificato che tirando su progetti raffazzonati così tanto per vedere l’effetto che fa come pretesto per studiare una nuova tecnologia è certamente utile come palestra ma è ancora più utile trasformare i propri tentativi di edificazione in prodotti professionali completi che funzionano! Oggi è il dieciottesimo giorno di applicazione saltuaria su CI e per la prima volta mi ritrovo un applicativo western che funziona tutto nelle sue dinamiche base! Merito di un paio di soluzioni o correttivi che ho dovuto mettere in pista solo dopo la partenza: la segmentazione della pagina in sezioni specifiche che mi hanno permesso non solo un maggior controllo sul codice ma anche la possibilità di lavorare su zone parziali delle pagine richiamando metodi specifiche (le vecchie funzioni del procedurale) e in secondo luogo l’immissione di chiavi esterne con conseguente eliminazione di due campi ridonandanti presenti nella tabella western che hanno normalizzato il mio database che oggi si ritrova due campi inediti come id_regista e id_voto che ovviamente non avranno più i corrispettivi valori come riferimento ma solo il riferimento alla tabella dove questo valore è stato etichettato. Certo la conseguenza di tutto ciò è stato anche usare INNER JOIN che non mi era mai capitato di inserire per cui ora siamo allineati e coperti su tutta la linea per ogni mossa successiva. Quindi da una tabella siamo passati a tre tabelle e le query hanno subito un totale stravolgimento stilistico nel famoso MODEL che CI usa per dare indicazioni al CONTROLLER su come smistare i dati alle viste! E’ andato tutto bene quindi? Be adesso mi ritrovo la questione della PAGINAZIONE ancora un pò in alto mare, la storia del MOTORE DI RICERCA INTERNO che in procedurale è semplicissimo da fare ma che qui richiede la consueta tripartizione MVC per far funzionare le cose, perché CI é uno e trino. Il passo in avanti che ha dato impulso a tutto il progetto si può sintetizzare in un semplice set di istruzioni presenti nel controller centrale:

$regista = $this->input->get('regista');
$data['result']=$this->western_model->nomefunzionescelta($regista);
$this->load->view('nomedirectoryscelto/details', $data);

grazie a $regista = $this->input->get(‘regista’); recupero l’id in ingresso nella pagina (é questa l’informazione che mancava a chi avvezzo al procedurale è sempre stato abituato a catturare il valore della variabile con il metodo GET a inizio pagina, cosa che in CI non si può fare) dopodichè la dò in pasto a un metodo presente nel model che mi restituirà il risultato da spedire all’ utente, nello specifico alla pagina dettagli o details.php presente dentro la cartella specifica. Ovviamente nel MODEL c’è la funzione che fa tutto il lavoro sporco:

  function nomefunzionescelto($regista)
  {
    $query = $this->db->query("select * from western where id_regista='" . $id_regista . "'");
    return $query->result();
  }

ovviamente la query nel mondo reale del mio applicativo è passata dalla stesura di una riga a occupare ben quattro righe perchè ho dovuto includere le inclusioni delle INNER JOIN per concatenare le tabelle e rendere tutto ottimizzato senza ripetere i dati. Questa filosofia legata alla segmentazione della pagina, vedere articolo https://umbriawayvalorizza.wordpress.com/2020/10/27/come-faccio-a-spaccare-un-capello-in-cinque-con-codeigniter/ , ha prodotto risultati a dir poco brillanti per il newbie che a un certo punto Mercoledì’ 28 ottobre 2020 alle ore 8 e 50 ha visto come San Paolo sulla via di Damasco illuminarsi la pagina bianca, non di trascendenza, ma dei record che non riuscivo a popolare con il mio vecchio modo di fare il recupero delle variabili spedite da una pagina nel procedurale. Vabbè poi quando va tutto bene ci si sollazza anche nel recupero dei dettagli, si analizzi ad esempio questo metodo presente nel MODEL:

  function contarecord()
  {

    $this->db->distinct();
    $this->db->select("id");
    $result = $this->db->get("nometabella");
    echo '<div style="border: 5px outset red;background-color: lightblue;text-align: center"><h1>Nel DB sono presenti N ' . $result->num_rows() . ' Films - <a href="http://localhost/nomecartellaprogetto/">back</a> </h1></div>';
  }

tutto ciò in sintonia con le istruzione presenti nel controller che come di consueto spedirà i dati alla vista generando anche una informazione utile per l’utente, ossia conoscere quanti film western sono presenti nel database. Interessante il fatto che volendo sparare direttamente questa “chicca” nella pagina index di ingresso non ci sia stato verso di farlo ovviamente per difficoltà da newbie presenti nel sottoscritto che ha solo 18 gg di esperienza sul framework CI! Alcuni problemi rimangono (paginazione?) altri si generano automaticamente con il crescere dell’ applicazione e altri sono archiviati sotto la voce “risolto”. Ma almeno tutto a livello base adesso é palesemente perfetto (a livello newbie si intende). La sfida continua e la guerra è ancora lontana dall’ essere vinta (come si implementano le sessioni per creare un pannello di amministrazione per esempio), a volte la battaglia ci vede vincenti, spesso si finisce per andare incontro a enormi cadute senza riuscire a trovare i profili giusti nel puzzle. In ogni caso in rete c’è tutto e non bisogna mai stancarsi di cercare perchè i nostri problemi di sviluppatori sono stati già risolti da altri (utilissimi i FORUM tematici). La sfida con “l’accendino” (traduzione di codeigniter, accenditore ndr) più famoso del mondo continua e la sfida é appena agli inizi. Dulcis in fondo non poteva mancare il giochino della lenza lancio l’ID della tabella e recupero l’ID della tabella per ampliare il tutto inserendo la biografia dei registi personalizzata, segno che ormai il dramma espresso dall’ istruzione mancante $regista = $this->input->get(‘regista’); è stato somatizzato e acquisito nelle sue benefiche sfumature! E con questo come negli scacchi, seguendo le logiche delle categorie che propone per gli agonisti, oggi dopo 18 gg di CI Framework mi sembra di essere simbolicamente promosso al livello di terza nazionale con le categorie sociali superate ma molte a livello magistrale da raggiungere!