BookBreakdown con Codeigniter? Ma non bastava il Lockdown?

web developer umbriaMai sentito parlare di BookBreakdown? E’ un metodo per scomporre un libro in tutti i suoi aspetti fondamentali, un esempio lo puoi vedere dal mio nuovo progetto http://umbriawayformazione.altervista.org/ci_project_longitudine/ dove Codeigniter Framework riduce a brandelli in senso propositivo il bellissimo libro di Dava Sobel Longitudine. A pensarci bene un libro é una fonte preziosa di informazioni e anche se non parlassimo di un saggio storico che si presta per l’esperimento tecnologico del nuovo progetto messo in piedi da Umbriaway Consulting (in realtà l’idea era del 2017, ma realizzata in grezzamente in procedurale) c’è sempre tanto da scavare e da disseppellire. Un libro alla fine é come un nuovo file aperto con photoshop, lo puoi idealmente immaginare come una serie di layer che si sovraqppongono e intrecciano nei modi più disparati dando luogo a qualcosa di organico e coerente. web design umbriaQuali sono questi layer? Ambientazione, personaggi, cronologia storica (come nel caso del progetto longitudine dove il focus é concentrato) , trama, eventi esterni/interni, interazioni etc etc. In questo terzo progetto http://umbriawayformazione.altervista.org/ci_project_longitudine/ l’importanza dell’ applicativo non sta tanto nella cornice tecnica ma nei contenuti per l’appunto! Il tutto potrebbe essere ampliato inserendo un motore di ricerca per esempio o allargando i layer da analizzare (in questo caso di attivo c’è solo l’aspetto storico). In ogni caso ancora una volta si dimostra la plasticità creativa di Codeigniter che si adatta con facilità anche alle idee più irrazionali e umanistiche anche con una certa libertà di espressione grafica! Potenza del foreach potremmo sintetizzare! Per entrare nel vivo dei contenuti riportiamo le info presenti in home:

COME LA VITA DI UN GENIO SOLITARIO CAMBIO’ LA STORIA DELLA NAVIGAZIONE: John Harrison (Foulby, 3 aprile 1693 – Londra, 24 marzo 1776) è stato un orologiaio e inventore inglese. Tra i suoi principali contributi vi fu l’invenzione, nel 1761, del cronometro marino, che permise di determinare con precisione la longitudine in alto mare, dando un decisivo apporto allo sviluppo della navigazione. La longitudine (dal latino longitudo, longitudĭnis derivato di longus, “lungo”) è la distanza angolare misurata in gradi, lungo l’arco di parallelo compreso tra il Meridiano fondamentale, Meridiano di Greenwich, e il meridiano passante per il punto considerato. In riferimento al meridiano di Greenwich, esiste una Longitudine orientale da 0 a 180° gradi e una Longitudine occidentale da 0 a 180°. Essa è definita in maniera analoga, ma riferita a differenti meridiani e piani di riferimento, anche in astronomia. Longitudine è un saggio della scrittrice divulgatrice scientifica statunitense Dava Sobel

In ogni caso ancora una potentissima dimostrazione di Codeigniter che sfruttando materiale già pronto in procedurale con dei semplici copia e incolla e la creazione di viste-modelli e controller per adeguare il tutto ha consentito in tempi ragionevoli di aprire e chiudere un progetto semplicemente sfruttando le competenze acquisite lavorando da un mese scarso su http://umbriawayformazione.altervista.org/ e http://umbriawayformazione.altervista.org/ci_project_competenze/. Lunga vita al sommo https://codeigniter.com/download!




Cinquanta sfumature di sessione, quello che Anastasia con il manuale del framework non ti dirà mai nella stanza torbida di Codeigniter

Oggi ho risolto il problema delle sessioni, eureka, era da una ventina di giorni che speravo di sistemare! Ma il titolo che ci azzecca? Mica è la stanza dei peccati del libro pakko più letto del pianeta dove le confessioni scabrose diventano business da intrattenimento! No qui abbiamo a che fare con il manuale di Codeigniter dove si leggono un sacco di cose belle e meravigliose ma manca poi quel “quid” che consente al NEWBIE di APPLICARE poi la tecnica o la singola istruzione sciorinata dalla bibbia sacra del framework per RISOLVERE UNA QUESTIONE PRATICA. Vediamo prima in sintesi di cosa stiamo parlando. Andando su http://umbriawayformazione.altervista.org/ci_project_competenze/ e facendo il login si entra in informazioni riservate (ma non troppo, non ci sono numeri di carte di credito) che sono protette dall’ esterno su altri browser dalle sessioni, identificate univocamente da id esclusivo. Come tutti Il protocollo HTTP usato per la connessione e la trasmissione delle pagine Web, è un protocollo SENZA MEMORIA o STATELESS. Per aggirare questa situazione possono tornare utili le sessioni. In procedurale avremo una classica situazione caratterizzata daL PULSANTE CHE ACCENDE LE DINAMICHE IN OGGETTO:

Session_start();

Quando la sessione viene ATTIVATA E APERTA viene inizializzato un ARRAY SUPERGLOBALE di nome

$_SESSION[];

un cassetto che andrà a ricevere tutti i dati che si intende ricordare, spesso username e password di chi si sta per LOGGARE. La domanda retorica “ma la $_SESSIONweb design umbria é vuota o piena” serve a proteggere con una istruzione condizionale IF / ELSE tutte le pagine che si intendono occultare al visitatore scaltro che magari alle nostre spalle adocchia un indirizzo web e intende replicarlo su altro browser presso altra macchina. Per esempio potremmo includere un file per queste pagine dove all’ interno esternamente lavora una condizione del tipo se la superglobals é piena e contiene la variabile X,Y,Z fai vedere il contenuto della pagina, altrimenti reindirizza il curiosone troppo curioso altrove, magari al form di login! Ok il manuale di Codeigniter darà per scontato che un minimo di PHP bisogna conoscerlo per seguire almeno le indicazioni base, ma di fatto poi la pratica quando hai un corpo fatto di vestiti di anima e di carne ed ossa (rispettivamente la VIEW, il controller e il Model) che differisce dalla linearità non sai dove devi scrivere le cose e neanche se la sintassi poi suona bene perché di fatto devI procedere a tentoni cercando di incapsulare con delle graffe questo o quell’ elemento, finche alla fine l’azzecchi e la risposta arriva; per far funzionare le sessioni devi richiamare per ogni pagina che si desidera

($this->session->userdata(‘nomevariabilesessione’))

intorno alla QUERY del MODELLO che ovviamente é diversa per ogni progetto e ha le sue specificità legato alla pagina a cui il controller con il suo metodo é legato! Ma mica il Newbie é come la maga Circe che le cose le sa per nascità onnicomprensiva divina?! Ma per impare l’inglese conoscere almeno una lingua alternativa base per capire quali sono i pronomi e i verbi e i complementi oggetto non sarebbe utile?! Più che utile , indispensabile! Avere un minimo di destrezza con la grammatica di base, in questo modo passare a Codeigniter dopo aver sperimentato un pò di procedurale é un balsamo benefico. In ogni caso scomporre i problemi grandi in piccoli pennelli (chi non ricorda la pubblicità cinghiale?) produce enormi vantaggi e una volta entrati nella stanza segreta delle sessioni con Anastasia ogni più torbido segreto sarà rivelato!




Come applicare una mandrakata in Codeigniter e far quadrare il cerchio quando andiamo incontro a sicura disfatta e ribaltare l’esito della lotta

web developer umbriaLa MANDRAKATA è uno dei tanti cavalli di battaglia profusi nel mondo dello spettacolo dal recentemente scomparso Gigi Proietti che se ne é andato amato democraticamente dalla massa intera, mettendo tutti daccordo sulle sue eccezionali qualità di uomo di spettacolo e maestro insuperabile, osannato ovunque (e non potrebbe essere altrimenti) da quelli di destra e quelli di sinistra, da complottisti e terrapiattisti, da trumphisti e sostenitori della difesa Pirc. Tatticamente l’idea di mandrakata pubblicizzata dal Grande Proietti si presta bene anche a risolvere problematiche di “rattoppo” nello sviluppo web in codeigniter quando la soluzione a un problema non arriva. Analizziamo la situazione presente all’ indirizzo http://umbriawayformazione.altervista.org/index.php/home/planner dove volendo mostrare le attività di formazione svolte da umbriaway consulting al contrario, ossia con un ordine discendente in modo da vedere i risultati a partire dall’ attualità di data e non dalla più lontana, ho pensato di inserire dei link nel primo campo cercando di emulare la prestazione dell’ ordine ascendente, quindi copiando il tutto e modificando nomi di funzioni in DESC al posto di ASC nella query per sparare i dati in una nuova pagina, dopo aver creato i dati in una nuova tabella. Peccato che all’ interno dell’ espressione:

public function get_planners($limit, $start)
{
$this->db->limit($limit, $start);
$query = $this->db->get(“nomedellatuatabella”);
return $query->result();
}

dopo vari tentativi per incastrarci dentro un semplice order by data desc e consultando il manuale all’ indirizzo versione tre (quando hai un problema la prima cosa da fare é quella di vedere se nella bibbia dello sviluppatore codeigniter si trovano le risposte) https://codeigniter.com/userguide3/index.html NON TROVANDO COMPOSIZIONI DI QUERY PERTINENTI alle mie esigenze generando in creazioni arbitrarie errori e incastri improbabili nella sintassi, ho dovuto ripiegare su trucchi tattici non proprio corretti (perché in questo caso sono andato a far saltare una paginazione comunque non indispensabile). Alla fine esasperato ho applicato una MANDRAKATA per aggirare il problema, ossia ho tolto il meccanismo della paginazione per la pagina dei dati discendenti, una soluzione stilisticamente deprecabile ma comunque efficace perchè dopo la semplificazione si é avuto nel modello:

public function get_planners_desc()
{
$query = $this->db->query(“
select * from nomedellatuatabella
order by data desc
limit 15
“);
if ($query->num_rows() == 0) {
show_error(‘database vuoto!’);
} else {
return $query->result();
}
}

dove alla fine della query compare un limit 15 che come un decreto ministeriale crea restrizioni sui record da visualizzare per pagina. Fallita quindi la costruzione della query builder iniziale per limiti miei da NEWBIE (è meno di un mese che sto sperimentando questa tecnologia) se non volevo perdere la battaglia ho dovuto applicare qualcosa di semplice ma comunque di funzionale! E’ proprio il caso di dire dopo l’analisi di questa dinamica di combattimento che grazie a una query vecchia maniera con un limit 15 finale ho sconfitto temporaneamente il nemico pronto a ricaricare le batterie per la prossima sfida! E rileggendo il tutto adesso da distanze siderali, senza ATOM a sporcare il codice, mi sembra di avere intuito che il problema del perché FORSE tutto non funzionava cercando di non rovinare la paginazione, potrebbe essere legato al fatto che non ho inserito i parametri iniziali nella mia nuova query (una banale dimenticanza?), potrebbe essere una idea da tenere buona per risolvere nelle prossime partite!




Diventa PRIMA NAZIONALE in due giorni risolvendo il problema della gestione di un FORM in CODEIGNITER FRAMEWORK

web developer umbria

A Roma dicono te fai paura da solo a no quello era te sei parlato da solo, ma quello che é successo dal punto di vista di crescita del punteggio elo tra Lunedì due novembre e oggi Mercoledì 4 novembre ha dell’ incredibile dal punto di vista della risoluzione dei problemi. Sul punteggio elo e le categorie negli scacchi ormai ne parlo da diverso tempo ma per fare un ripasso vediamo quali sono questi step di crescita sportiva che un agonista in erba (definito inclassificato) dovrebbe compiere verso l’alto prima di arrivare alla TRASCENDENZA della categoria GM:

Non Classificato (NC)
Terza Sociale (3S)
Seconda Sociale (2S)
Prima Sociale (1S)
Terza Nazionale (3N)
Seconda Nazionale (2N)
Prima Nazionale (1N)
Candidato Maestro (CM)
Maestro (M)
Maestro FIDE (MF)
Maestro Internazionale (MI)
Grande Maestro (GM)

web developer umbriaSe una guerra è composta da molte battaglie, così come un torneo di scacchi fatto di diversi turni é segnato da sconfitte e vittorie, così l’avventura formativa QUOTIDIANA iniziata su una tecnologia sconosciuta lunedì 12 novembre si sta rivelando un viaggio ricco di insidie ma anche NON PRIVA DI soddisfazioni e di vittorie parziali, esattamente a quello che accade all’ agonista di scacchi in torneo. Lunedì fino alle 21 e 15 ero equiparato (o meglio autoequiparato!) a livello simbolico di conoscenze alla terza sociale. Poi alle 21 e 15 riesco a realizzare il passaggio da SERVER LOCALE A SERVER DI PRODUZIONE e passo di categoria guadagnando elo (sempre simbolicamente) diventando TERZA NAZIONALE. Categoria che é perdurata fino alle 21 e 40 di Martedì 3 Novembre, quando per grazia divina sono riuscito a far funzionare il mio form grazie ai suggerimenti indiretti presenti in https://umbriawayformazione.wordpress.com/2020/11/03/imparare-dagli-errori-non-sono-gli-scacchi-ma-e-codeigniter/ dove si capisce una cosa sostanzialmente ribadita anche alla mia prima richiesta sul forum ufficiale, https://forum.codeigniter.com/, cioé il fatto che non PUOI RISOLVERE UN PROBLEMA se non consulti una fonte che può aiutarti a risolvere il problema è questa sorgente di acqua fresca é il MANUALE, https://codeigniter.com/userguide3/index.html . Quindi ieri leggendo alcune sezioni specifiche del manuale SONO RIUSCITO A FAR FUNZIONARE IL MIO FORM, passando simbolicamente alla categoria SECONDA NAZIONALE. Ma questa mattina sempre spulciando il manuale sono riuscito a risolvere i problemi legati ALLA SICUREZZA DEI FORM, passando simbolicamente PRIMA NAZIONALE! Quante emozioni nell’ arco di poche ore! A questo punto se nei prossimi giorni riesco a risolvere il problema della PAGINAZIONE passo a tutti gli effetti CM di Codeigniter nel senso che poi c’è comunque un abisso di conoscenze da colmare! Ma vediamo in dettaglio cosa è successo sui FORM che quando vengono messi in piedi (FASE 1) sono delicati sotto il punto di vista della sicurezza (FASE 2). All’ indirizzo http://umbriawayformazione.altervista.org/ c’è in alto a destra un form che ora funziona grazie alle istruzioni presenti sul manuale alla voce specifica https://codeigniter.com/userguide3/libraries/input.html?highlight=form :

Accessing form data
Using POST, GET, COOKIE, or SERVER Data

CodeIgniter comes with helper methods that let you fetch POST, GET, COOKIE or SERVER items. The main advantage of using the provided methods rather than fetching an item directly ($_POST[‘something’]) is that the methods will check to see if the item is set and return NULL if not. This lets you conveniently use data without having to test whether an item exists first. In other words, normally you might do something like this:

$something = isset($_POST[‘something’]) ? $_POST[‘something’] : NULL;

With CodeIgniter’s built in methods you can simply do this:

$something = $this->input->post(‘something’);

The main methods are:

$this->input->post()
$this->input->get()
$this->input->cookie()
$this->input->server()

TRADOTTO non riuscivo a risolvere i problemi perché nel mio MODEL mancava una istruzione MOLTO IMPORTANTE messa a un certo punto ossia

$something = $this->input->get(‘something’);

A questo punto tutto si è messo a funzionare come per magia nel senso che se digito il nome di un regista l’operatore LIKE fa il suo sporco lavoro ma poi il novizio deve interrogarsi e chiedersi in particolare:

se digito nulla che cosa accade?
se digito un nome inesistente restituisci all’ utente un messaggio specifico?
e la questione di SQL iniecton come la gestisci?

Allora che cosa è stato fatto Martedì 3 novembre 2020 verso le 22? Sono state risolte le prime due questioni con una clausola IF – ELSE IF in modo da dire all’ utente “guarda che se fai questa cosa qui vai incontro a questo messaggio etc”. Dopodichè soddifatto SONO SBIANCATO quando verificando che inserendo un singolo APICE ingrediente tipico degli ATTACCHI SQL INIECTJON tutta la mia applicazione diventava vulnerabile anche perché il messaggio di sistema riportava ulteriore info da dare all’ utente per capire la struttura del mio database! PANICO ASSOLUTO, che fare, devo trovare subito il modo di disabilitare il FORM senza alterare il codice e scartabellando in rete e anche sul manuale è saltato fuori all’ indirizzo https://codeigniter.com/userguide3/libraries/input.html?highlight=input%20security:

Input Filtering
Security Filtering

The security filtering method is called automatically when a new controller is invoked. It does the following:

If $config[‘allow_get_array’] is FALSE (default is TRUE), destroys the global GET array.
Destroys all global variables in the event register_globals is turned on.
Filters the GET/POST/COOKIE array keys, permitting only alpha-numeric (and a few other) characters.
Provides XSS (Cross-site Scripting Hacks) filtering. This can be enabled globally, or upon request.
Standardizes newline characters to PHP_EOL (\n in UNIX-based OSes, \r\n under Windows). This is configurable

OK! Ottimo anche se ero seccato perché il form risultava inagibile, l’idea era di togliere la funzionalità di GET sul form in attesa di risolvere i problemi di sicurezza e allora vado sul CONFIG.PHP e cerco $config[‘allow_get_array’] per dargli un valore FALSE che non è di default! Carico i file e verifico che funzioni! Ottimo! Peccato però che l’inibizione sul GET é assoluta e questo mi ha portato a rendere inutile tutto il lavoro sul resto dell’ applicativo basato sul passaggio di querystring! Quindi mi sono detto che serviva altro e infatti l’ho trovato apparentemente:

$nomevariabile = $this->security->xss_clean($this->input->get(‘nomevariabile’));

 

ma questa soluzione non lavorava, per cui alla fine ho trovato anche:

$nomevariabile = $this->security->sanitize_filename($this->input->get(‘nomevariabile ‘));

 

e questa volta il malintenzionato che cerca di giocare con gli APICI sul mio form si vede restituire un PIKKE come risposta!

Grazie a queste incredibili scoperte raggiunte consultando il manuale di CODEIGNITER, https://codeigniter.com/userguide3/index.html , non senza difficoltà, oggi mi sento MOLTO PRIMA NAZIONALE. Ma sono bene che se voglio passare CM e guadagnare altro elo per acquisire almeno le basi di Codeigniter Framework devo RISOLVERE ancora il problema della PAGINAZIONE. Un ultimo scoglio fatale per http://umbriawayformazione.altervista.org/ ? La sfida con questo potentissimo e affascinante Framework continua, at the next battle! Intanto oggi siamo arrivati al giorno 24 con tre vittorie di fila negli ultimi tre turni di quotidianità (risultati reali raggiunti sul campo!). Non so dire se http://umbriawayformazione.altervista.org/ sia realmente sicuro adesso ma almeno mi sembra di aver fatto qualcosa per prevenire eventuali attacchi esterni!




Vincere a 2.757 metri con Codeigniter è fattibile? Forse ti confondi con il Giro d’Italia, ma il web developer é come un ciclista che tenta una scalata conoscitiva: per esempio il CRUD è alla tua portata?

Il CRUD per gli sviluppatori é come il santo Graal nelle leggende di Re Artù: l’acronimo sta per CREATE-READ-UPDATE-DELETE. Si tratta di una estrapolazione e di una gestione dei dati dal database che riguarda come esercizio muscolare una delle prime attività di qualunque web developer, tanto per restare in tema di ciclismo. Codiigniter è abbastanza ostico all’ inizio (ma sempre meno complicato da assimilare rispetto a Laravel per esempio) per cui se la sensazione é quella di non riuscire a fare la salita dello Stelvio per transitare per primo alla Cima Coppi e magari vincere la tappa, conviene fermarsi, rifornirsi di bevande e mantellina e consolidare quello che è ormai base tecnica consolidata. Ripassiamo quindi i fondamentali prima di affrontare la questione del crud perchè sappiamo che la salita richiede zuccheri e si rischia di andare come si dice in gergo, quando si tenta di studiare una nuova tecnologia, FUORI RUOTA, come dicono i commentatori della Rai a gara sportiva in onda. Abbiamo detto che conviene concentrarsi su questo framework perchè offre un set di strumenti da coltellino svizzero integrati in unico ambiente di sviluppo, così a sostegno ci ritroviamo numerosi helper o funzioni specifiche utili per risolvere problemi e librerie per attingere a risorse esterne come il famoso database per esempio. Abbiamo sottolineato più volte l’importanza di separare lo scheletro umano dalla muscolatura e dai vestiti che lo compongono, per cui il vantaggio di questa gestione é che tutto è circoscritto alla sua natura strutturale, per cui avremo un Modello che si occuperà della parte logica di gestione dei dati per esempio, avremo una View che non farà altro che visualizzare le nostre richieste a video e in mezzo abbiamo il nostro bel CONTROLLER che dobbiamo considerare come un gigantesco pannello di controllo che attinge dal Model per riconsegnare alla Vista. In questo modo tutto è ordinato e pulito a livello di sviluppo e anche più facile mettere in piedi degli applicativi risparmiando un sacco di tempo. Per imparare Codeigniter bisogna avere conoscenza livello base di php procedurale e un pò di OOP insieme a CSS, HTML e anche Bootstrap per abbellire i nostri vestiti. La ricchezza di funzionalità subito disponibili in uno strumento veloce consentono davvero un gran risparmio di tempo. Per lavorare con codeigniter è sufficiente scaricare un server locale che abbia integrato apache e mysql in modo da parserizzare i nostri file php e un editor di codice e ovviamente il pacchetto completo. Quindi per il localhost che serve alle nostre pagine scaricare https://www.apachefriends.org/it/index.html, per un editor visuale abbiamo cose del tipo ATOM, SUBLIME o VISUAL STUDIO CODE scaricabile all’ indirizzo: https://code.visualstudio.com/ e infine il nostro framework si trova all’ indirizzo https://codeigniter.com/ ; adesso ripassiamo i fondamentali perchè lavorare e sviluppare con procedurale è un conto e invece diverso é l’approccio MVC con la definizione di classi e metodi costruttori. Si lavora prevalentemente solo sulla cartella APLLICATION di codeigniter che guarda caso contiene anche una cartella VIEW e una MODEL oltre a quella CONTROLLER! La cartella Sysytem è considerata il core di sistema ed é quella che fa girare il tutto ma é anche un luogo fisico dove non dovremmo mai intervenire. Dentro la cartella Appllication abbiamo la cartella CONFIG e al suo interno molti file critici di configurazione e settaggio come:

database.php
config.php
routes.php
autoload.php

che consentono rispettivamente aggancio al DB e quindi gestione su database mysql, definizione di path sulle url, instradamenti e caricamenti automatici di risorse , ovviamente richiamabili anche da codice scritto normale. Il modello offre le pallottole al caricatore, la pistola controller spara verso la vista e viceversa ritorna i dati su eventuali interazione dell’ utente al controller che andrà a interrogare il modello per farsi restituire dei dati da ri-spedire al mittente. Diamo meglio una occhiata su questo flusso analizzando l’architettura seguente:

L’utente invia una richiesta dalla vista o finestra o browser che viene instradata seguendo criteri di sicurezza per arrivare infine al controller che potremmo considerare una sorta di mago Merlino della situazione. Merlino va a socmodare i suoi amici al di là del muro, gente che lutente finale non vedrà mai che sono:

Model
Librerie
Helpers
Plugins
assets (risorse grafiche)
scripts
etc

una volta prese tutte le info pertinenti alle richieste mette tutto insieme e assembla e spedisce tutto alla vista che sfruttando il CACHING restituisce il risultato richiesto all’ utente. Bello no?!

Semplificando io chiedo il controller restituisce prendendo i dati a destra e a manca come una piovra, per cui é da considerarsi come un vigile che controlla il traffico, ma il lavoro sporco lo fa il MODEL mentre la vista è quella che fa la preziosa senza lavorare se non offrire modo all’ utente di interagire. A questo punto diamo un occhiata anche allo schema del flusso.

Con questo schema se io scrivessi nella funzione index del controller Welcome di default dopo lo scaricamento qualcosa del tipo:

public function index()
{
echo “fantastico adesso posso personalizzare i contenuti a mio uso e consumo!”;
//$this->load->view(‘welcome_message’);
}

che cosa accadrebbe? Semplicemente che Codeigniter mi direbbe picche (ci sarebbe un messaggio di errore) perché la mia istruzione procedurale non segue la logica MVC, se volessi scrivere una bella scritta simile andrei sulla welcome_message.php, commenterei le parti statiche di HTML e magari con un h1 inserirei la scritta personalizzata di cui sopra. Il fatto è che la funzione index reindirizza il flusso verso la view. Quindi lo schema é:

LOCALHOST seguito dal nome del CONTROLLER seguito dal nome del METODO (nome della funzione) seguito da FUNZIONE 2 e infine dai PARAMETRI

Il controller gestisce le richieste, il model manipola i dati e fa da CPU e la vista fa la presentazione all’ utente. Adesso vediamo il CRUD. Prima di entrare nel crud vero e proprio andiamo sulla nostra drogheria preferita: https://www.grocerycrud.com/

Che cosa è questa cosa?

E’ un modo per non tribolare molto per mettere in piedi un CRUD veloce, pertanto in questo articolo lo testeremo con uno scacco matto in dieci mosse!

Mossa numero 1, scaricare codeigniter

Mossa numero 2, scaricare grocerycrud

Mossa numero 3, decomprimere i due pacchetti e prelevare la cartella APPLICATION di grocerycrud sovrascrivendo quella di codeigniter con lo stesso nome (copia e incolla); fare la stessa operazione anche per la cartella ASSETS altrimenti ci darà errore

Mossa numero 4, configurare il database come sappiamo interagendo su database.php e scrivendo i 4 parametri che sono server, utente, pwd e nome database

Mossa numero 5, definire un nuovo controller chiamato Main nel file main.php

Mossa numero 6 scrivere all’ interno del controller il seguente codice:

<?php if ( ! defined(‘BASEPATH’)) exit(‘No direct script access allowed’);

class Main extends CI_Controller {

function __construct()
{
parent::__construct();

/* Standard Libraries of codeigniter are required */
$this->load->database();
$this->load->helper(‘url’);
/* —————— */

$this->load->library(‘grocery_CRUD’);

}

public function index()
{
echo “<h1>Welcome to the world of Codeigniter</h1>”;//Just an example to ensure that we get into the function
die();
}

public function western()
{
$crud = new grocery_CRUD();
$crud->set_table(‘western’);
$output = $crud->render();

$this->_example_output($output);
}

function _example_output($output = null)

{
$this->load->view(‘our_template.php’,$output);
}
}

/* End of file Main.php */
/* Location: ./application/controllers/Main.php */

 

Mossa N 7, creare una vista di nome our_template.php

Mossa N 8 scrivere le seguenti info nel file vista:

<!DOCTYPE html>
<html lang=”en”>
<head>
<meta charset=”utf-8″ />

<?php
foreach($css_files as $file): ?>
<link type=”text/css” rel=”stylesheet” href=”<?php echo $file; ?>” />

<?php endforeach; ?>
<?php foreach($js_files as $file): ?>

<script src=”<?php echo $file; ?>”></script>
<?php endforeach; ?>

<style type=’text/css’>
body
{

font-size: 14px;
}
a {
color: blue;
text-decoration: none;
font-size: 14px;
}
a:hover
{
text-decoration: underline;
}
</style>
</head>
<body>
<!– Beginning header –>
<div>
<a href='<?php echo site_url(‘examples/offices_management’)?>’>Offices</a> |
<a href='<?php echo site_url(‘examples/employees_management’)?>’>Employees</a> |
<a href='<?php echo site_url(‘examples/customers_management’)?>’>Customers</a> |
<a href='<?php echo site_url(‘examples/orders_management’)?>’>Orders</a> |
<a href='<?php echo site_url(‘examples/products_management’)?>’>Products</a> |
<a href='<?php echo site_url(‘examples/film_management’)?>’>Films</a>

</div>
<!– End of header–>
<div style=’height:20px;’></div>
<div>
<?php echo $output; ?>

</div>
<!– Beginning footer –>
<div>Footer</div>
<!– End of Footer –>
</body>
</html>

 

Mossa N 9 , verificare che il nome tabella sia giusto:
$crud->set_table(‘western’);

 

Mossa N 10 guardare l’effetto che fa all’ indirizzo:
http://localhost/your_project/index.php/main/western

 

Semplicemente fantastico questo Grocery CRUD FREE scaricabile all’ indirizzo https://www.grocerycrud.com/ ! Funziona tutto , la modifica, l’addizione di dati, la cancellazione, lo abbiamo provato aggiungendo per un pugno di dollari e lo straniero denza nome ed é tutto ok! Il tutorial for dummies non spiega tutto in maniera lineare all’ indirizzo https://www.grocerycrud.com/documentation/create-crud-codeigniter-tutorial/ e qui abbiamo sperimentato la procedura del PRENDO TUTTO IL CONTENUTO IN DOWNLOAD DI GROCERY CRUD E LO COPIO SOPRA LE STESSE CARTELLE DEL CONTENUTO SCARICATO CON IL FRAMEWORK ORIGINALE DECOMPRESSO! Risultato tutto ok, attenzione anche alla parte della pagina statica che nell’ HEAD cicla le risorse ASSETS:

<?php
foreach($css_files as $file): ?>
<link type=”text/css” rel=”stylesheet” href=”<?php echo $file; ?>” />
<?php endforeach; ?>
<?php foreach($js_files as $file): ?>
<script src=”<?php echo $file;?>”></script>
<?php endforeach; ?>

 

 




Codeigniter + Bootstrap una accoppiata vincente: parte IV completare le basi del nostro progetto WESTERN MVC!

Ok dopo aver visto nella prima puntata una overview generale su Codeigniter, cercando gli strumenti iniziali per iniziare, individuando i link dove scaricare le nostre cose (vedere https://umbriawaydesign.wordpress.com/) dopo aver bucato la pagina con i dati che é un azione per l’aspirante sviluppatore simile all’ allunaggio terrestre di Amstrong e perfezionato il vestitino della domenica per dare usabilità e interazione all’ utente (vedere puntate due e tre su https://umbriawaydesign.wordpress.com/) completiamo questa prima parte sulle basi di codeigniter inserendo la quarta sezione, quella della responsività, quindi torniamo a fare il mestiere del web designer e non quello del web developer! La parola magica per chi costruisce web application si chiama RESPONSIVITA’, ossia la capacità di vedere la mia APP su tutti i dispositivi dal più piccolo al più grande. Le media query con i loro breack point dovrebbero risolvere ma perché non integrare nei nostri progetti il potentissimo framework grafico BOOTSTRAP che divide le pagine in lunghezza in dodici colonne a prescindere dalle dimensioni? In questo modo siamo a cavallo, tanto per restare in tema western con personaggi diventati icona di genere a Los Angeles come John Wayne e registi come Ford o il nostro Leone in Italia. Per fare un albero ci vuole un fiore e quello ce lo abbiamo, visto che il motore con mysql contiene la nostra magica tabella di prova western (la progettazione seria di un DB è un’ altra cosa, non a caso esistono nelle aziende enterprise figure professionali addette solo a questo mestiere come il DB administrator per esempio) e visto che siamo riusciti a creare un pannello di controllo (che è un dono di CODEIGNITER e del suo paradigma MVC) dove il VOLANTE trasferisce da destra a sinistra la nostra vettura lungo la strada (la parte logica del MODEL invia i dati filtrati al controller che con il metodo LOAD carica le pagine di informazioni dinamiche richieste dall’ utente) che va ad esaurire e risolvere gli input sulla grafica , adesso siamo in grado di abbellire e rendere funzionali le nostre applicazioni integrando il framework bootstrap o con CDN o scaricandolo e poi puntandolo in una cartella locale. L’utilità non è solo quella di risolvere la responsività, ma anche di poter disporre di un coltellino svizzero o set di strumenti che ci semplificano la vita, vedere per esempio il problema del recordset verticale che avevamo nella terza puntata citata agli indirizzi di cui sopra. Per cui come si risolve? Il lay out usato prevede una colonna centrale settata con <div class=”col-sm-8 text-left”> quindi vedendo tre colonne intuitivamente siamo in grado di rispondere anche alla domanda non detta ma quante sono larghe le colonne laterali? Ovviamente due ciascuna visto che il tutto tocca il dodici. Ora esiste un componente che si chiama CARD in bootstrap che abbraccia i nostri dati dentro delle cornici specifiche disegnate con classi predefinite che ci consente di spalmare il nostro set di dati non tutto in verticale rendendo la vita di chiunque utente impossibile a causa dello scrolling, ma in orizzontale. Tuttavia per fare questa operazione dobbiamo pensare di dividere quello spazio da otto magari con due colonne, in modo che i dati non finiscano uno sopra l’altro ma si dividono tra le colonne (nel nostro caso le card si configurano automaticamente tre per colonna) con la dicitura <div class=”col-md-2″ > ovviamente il punto di inizio del trasferimento dati e quello finale devono abbracciare solo il componente card la cui parte statica è facilmente reperibile dal sito ufficiale GETBOOTSTRAP dove siamo andati a scaricare il tutto (oppure no, visto che i CDN ci risolvono alcune questioni). In definitiva abbiamo costruito le basi in pochissimo tempo per una applicazione da rendere completa, perché è chiaro che dovremmo implementare le sessioni, magari costruire un LOGIN, oppure creare altre pagine di approfondimento e magari anche sviluppare il nostro DB in maniera più organica con altre colonne da inserire a sostegno visto che la ripetizione dei registi ad esempio nella nostra tabella è considerata ridondanza. Però la struttura base adesso c’è ed esiste e costituisce una perfetta base di lancio per andare oltre la LUNA!