web design umbria
codeigniter, web design Umbria, web developer Umbria

Imparare dagli errori: non sono gli SCACCHI, ma é CODEIGNITER!

Chi gioca a scacchi ad alto livello o anche a livello condominiale sa bene che riguardare le proprie partite fa sempre bene per scovare le proprie zone erronee. Quando si impara una tecnologia nuova come codeigniter, https://codeigniter.com/, l’approccio dovrebbe essere lo stesso e adesso che sono state risolte una serie di anomalie per la pubblicazione del mio mio primo progetto, https://umbriawayformazione.altervista.org/, posso anche prendermi una pausa dopo 23 gg di esperienza per attraversare il campo di battaglia e contare i morti. In questa prima fase non ho ancora risolto i problemi tecnici della paginazione e del motore di ricerca, che se in procedurale sono abbastanza comprensibili e anche relativamente semplici da mettere in piedi con PHP, con l’approccio UNO e TRINO MVC le cose si complicano per chi come me è appena passato dallo stato di inclassificato a quelle delle categorie nazionali con un solo salto (negli scacchi la categoria di ingresso per i neofiti è quella di incalssificato, dopodiché l’iter prevede il superamento di tre scogli denominati categorie sociali per approddare infine in base al punteggio elo alle cosiddette categorie nazionali che sono solo l’inizio di un lunghissimo percorso che l’agonista dovrebbe intraprendere), in particolare penso di essere equiparato a un terza nazionale sulla base delle mie conoscenze attuali che sono tante rispetto a un NC ma poche rispetto a un giocatore che si muove nelle categorie magistrali.

In questo frangente di tempo delimitato da 23 gg di allenamento costante quotidiano e saltuario su CI, una serie di zone erronee me le sono focalizzate nelle mie partite, ossia nel mio sviluppo di codice e negli errori generati da questa attività. Vediamo quali sono gli errori più frequenti che si possono incontrare quando si passa a studiare questa tecnologia che per familiarizzare con MVC é semplicemente portentosa perché il framework é leggero e molto facile da modellare senza andare incontro ai pachidermi come Laravel e compagni. Una delle situazioni che generano più confusione soprattutto all’ inizio é legata all’ uso che se ne fa della famosa riga di istruzione presente nel file CONFIG.PHP incluso nella cartella omonima presente in APPLICATION:

$config[‘base_url’] = ‘nomedominiopresenteinrete’;

il parametro base_url è molto utile per sottolineare il path delle risorse dichiarate nelle nostre VIEW pertanto se non si hanno le idee chiare su cosa scrivere dopo = e si sbaglia ne deriva una anomalia. Un altro errore frequente che si riscontra é legato alla compilazione mancante o parziale del file DATABASE.PHP presente all’ interno della stessa cartella CONFIG sempre dentro APPLICATION dove i parametri di connessione al DB devono essere corretti:

‘hostname’ => ‘nometuoserver’,
‘username’ => ‘tuonomeutente’,
‘password’ => ‘tua pwd’,
‘database’ => ‘tuodatabase’

Qui si riscontrano diverse anomalie o errori o anche orrori.Non ti funziona l’applicativo su Aruba o qualsiasi altra parte? Magari hai scritto male un carattere può capitare. Verifica, magari guardando scoprirai divertito che durante il passaggio dallo sviluppo in LOCALE all’ AMBIENTE DI PRODUZIONE hai proprio dimenticato di scrivere i dati corretti lasciando i vecchi. Un altra situazione imbarazzante che potrebbe generarsi è quando non andiamo a compilare il file di caricamento automatico AUTOLOAD.PHP presente sempre allo stesso livello dei precedenti, ossia sempre dentro CONFIG e APPLICATION che in una veste accettabile dovrebbe suonare così in una istruzione specifica al suo interno:

$autoload[‘libraries’] = array(‘database’ , ‘pagination’);

ovviamente qui sopra ci sono anche le librerie utili per gestire la nostra paginazione (uno degli incubi peggiori per i NEWBIE) ma se non vado a compilare questi campi siamo semplicemente IMPANATI o PANATI. Un’ altra situazione critica é quella critica legata sempre allo stesso file degli HELPER che sono funzioni utili che gesticoscono specifiche situazioni. Se sto recuperando una variabile in GET e non ho le funzioni utili per supportare tale passaggio, sono di nuovo PANATO! L’istruzione si trova sempre nel file AUTOLOAD.PHP e nella sua stesura corretta dovrebbe suonare così (o a seconda delle esigenze):

$autoload[‘helper’] = array(‘url’, ‘form’);

in questo caso ho caricato un set di strumenti utili per gestire URL e FORM. Ovviamente se tentassi di scrivere del codice nel MODEL dove tento di prendere un valore in GET e non richiamo le funzionalità specifiche mi darà errore. Questi sono errori frequenti all’ inizio, ma sicuramente l’aspetto peggiore è quando si devono mettere in piedi dei LINK che richiamano delle risorse. Come sappiamo in MVC CI richiama prima la index, dopo il controller poi il metodo quindi il modo di lavorare è completamente STRAVOLTO rispetto alla linearità del procedurale. Quindi soprattutto all’ inizio quando non si sanno gestire le ROUTES che ha la sua gestione nel file specifico ROUTES.PHP può succedere di saltare un passaggio e di miagolare nel buio. Allora dopo FTP andiamo sulla pagina e vediamo che il link porta a una PAGINA MANCANTE oppure vediamo anche IMMAGINI solo come riquadro SENZA essere presenti. Non solo ma essendo questa logica strutturata a livello succede anche che dopo l’index, quando richiamo un altra pagina se inserissi dei LINK relativi con i famosi ../ per salire di un livello potrei andare incontro a seri problemi di visualizzazione, tanto è che la famosa [‘base_url’] qui potrebbe tornare utile per formare percorsi assoluti.

A scanso di equivoci da vero NEWBIE o terza nazionale di CI io per il mio progetto iniziale https://umbriawayformazione.altervista.org/ ho inserito proprio il path url di base, alcuni utilizzano anche il famoso site_url da anteporre alle risorse da agganciare ma io per tagliare la testa al toro ho inserito proprio percorsi assoluti vecchia maniera seguendo poi la logica INDEX/CONTROLLER/METODO. In queste facezie non di poco conto spesso il NOVIZIO si perde (almeno a me é successo perchè sono abituato a pensare al vecchio modo lineare) e genera errori scrivendo male LINK e collegamenti vari alle risorse. C’è molto da combatrtere dietro a questo tema. Poi ci sono tutti gli errori legati alla programmazione perché anche qui le query tradizionali vecchia maniera non sempre te le puoi portare dietro e devi saper trafficare con le query build e gli active records di CI, quindi in teoria bisognerebbe studiare la documentazione ma io ho scelto una strada alternativa basata sul prima faccio, genero errori di funzionamento e poi mi vado a cercare in rete la soluzione specifica senza perdere un sacco di tempo a farmi una cultura di base che non mi serve a nulla se non trova applicazione pratica. Comunque la cosa più importante soprattuto all’ inizio é studiare https://codeigniter.com/userguide3/index.html , a conferma di questo posso dire che quando ho scritto al forum ufficiale di codeigniter per descrivere un problema, indirettamente sono riusciti a portarmi sulla buona strada citando una sezione specifica che poi di fatto è servita a incanalarmi altrove dove c’era la soluzione! Quindi leggere la documentazione è IMPORTANTE!

Un altro errore comune é quello di NON DEFINIRE IL PUNTO DI INGRESSO DELL’APPLICAZIONE con un Entry Level nel file ROUTES.PHP, che andrebbe settato come segue:

$route[‘default_controller’] = ‘nomedeltuocontroller’;

Che di default è configurato sul famoso welcome tipico del dopo download. Ok abbiamo finito con gli errori più comuni riscontrati dopo 23 gg di attività con codeigniter? Macchè, anche ammesso che tu riesca a tirare in poco tempo qualcosa di traballante, poi devi fare i conti con il passaggio dal server locale a quello di produzione con una serie di complicazioni che fanno rabbrividire anche l’assistente vocale di GOOGLE quando ti sente parlare di straforo con epiteti blasfemi. Per esempio una delle questioni critiche all’ inizio è quella di seguire l’esatta nomenclatura descritta dai manuali, se ti dicono di scrivere il nome della classe in maiuscolo e anche il file corrispondente altrettanto un motivo ci sarà. A me in locale funzionava tutto così quando ho traslato al mio pusher di ficucia l’applicativo che in localhost andava bene e lì si piantava, perché? C’è un problema di incompatibilità tra versioni? Sono quelli della terra piatta che complottanto sul mio applicativo di esordio con CI? Forse abituarsi a leggere e fare il copia e incolla del problema che in inglese recitava una sorta non posso caricare il MODEL, per avere una risposta dai motori di ricerca era da farsi prima scrivere per aprire un ticket! Comunque alla fine alla mia domanda come mai non funziona nulla quando pubblico qui l’addetto alla magagne ha gentilmente risposto che il problema sta proprio in quella prima lettera minuscola del file. Così cambiando in maiuscolo scopro che tutto funziona ma solo per andare incontro a qualche altra magagna del tipo: non posso eseguire le INNER JOIN.

Esasperato anzichè riscrivere (cosa che comunque dovrò fare) subito ho pubblicato il tutto altrove per vedermelo alla fine funzionare, ovviamente sono curioso di sapere come si risolve il problema dlele INNER dal mio spacciatore di Arezzo, mi fa strano comunque (essendo solo terza nazionale il giudizio lascia il tempo che trova!) che porto tutto altrove nelle stesse condizioni funziona e qui no! Tutto questo solo come antipasto perché gli errori più comuni sono sempre in agguato e un framework per definizione non si può certo definire semplice, anche se qui ci avvicinamo di molto! A questo punto siamo concentrati e focalizzati e fermamente intenzionati a risolvere i problemi rimasti ossia quello della paginazione, quello del motore che mi funziona solo in procedurale e semplificare le URL con le routes magari eliminando il famoso index.php per rendere il tutto più digeribile ai motori di ricerca. Senza contare la questione della sessione e della dashboard per la gestione dei dati utenti, insomma il lavoro non manca mai su CI e non esiste il rischio di non riuscire a imparare cose nuove! Comunque nell’ infuriare della battaglia esistono anche grandi soddisfazioni da cogliere, due vittorie strepitose in stile Enrico V da parte di FWD che il giorno 28 ottobre e 2 novembre rispettivamente alle ore 9,50 e 9, 18 si è visto materializzare come per incanto il recupero dei dati in GET inserendo una semplice riga di codice che non essendo nato onniscente non avrei mai pensato di scrivere e la risoluzione per la pubblicazione! Quindi come si dice in gergo “bisogna continuare a stare sul pezzo“, ogni giorno dedicandoci una piccola quantità di tempo per non perdere l’allenamento! E usare i FORUM oltre a leggere il MANUALE: https://codeigniter.com/userguide3/index.html . Codeigniter conviene assimilarlo perchè é MVC Pattern e sappiamo bene quello che significa come competenze, é open source, é user fiendly é leggero e anche sicuro (se lo si sa usare!) tanti vantaggi racchiusi in unica soluzione. Infine siccome stiamo equiparando l’apprendimento di una tecnologia al punteggio elo degli scacchi, viene spontaneo chiedersi per chi non é avvezzo di queste cose quali sono queste categore e come si guadagna e incrementa elo per passare alla categoria superiore. Sono costituite da 12 categorie, che sono in ordine crescente di importanza, in questa fase per gioco mi sono definito terza nazionale mentre il gradino più alto della trascendenza é costituito dalla categoria GM, quindi la strada da fare con CI è ancora lunga e tortuosa:

  • 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).
social media marketing Umbria
chess, codeigniter, formazione, social media marketing Umbria

Ti chiami Fred Dewhirst Yates? Allora non potrai mai battere Alexander Alekhine a meno che ti metti a studiare seriamente CodeIgniter!

social media marketing UmbriaMa come fai a ottenere dei risultati a scacchi se hai un cognome simile Fred Dewhirst Yates? Dove vuoi andare! Eppure nella Alexander Alekhine vs Fred Dewhirst Yates “The Yates Motel” (game of the day Jan-28-2016) Karlsbad (1923), Karlsbad CSR, rd 7, May-06 King’s Indian Defense: Fianchetto. Karlsbad Variation (E62) 0-1 indirizzo http://www.chessgames.com/perl/chessgame?gid=1012179. Dalla mossa 33 in poi il bianco é costretto a ballare la danza di san vito come un tarantolato posseduto. Una brutta giornata agonisticamente parlando per il sommo Alekhine. Tornando ai nostri piccoli progressi risicati sul versante MVC Codeigniter certamente lavorare con un framework é meglio che dedicarsi a sviluppare classi da zero anche se ci sono altri vantaggi! Ad esempio proba e riprova é saltato fuori http://www.farwebdesign.com/codepagination/ che male non fa l’importante é ricordare che bisogna richiamare il controller dopo la pagina index.php e successivamente anche eventuale metodo incluso nel controller, più a facile a farsi che a capirsi ricorda social media marketing Umbria. Ma come hai fatto a fare http://www.farwebdesign.com/newscodeigniter/ questo fantastico sito web? Quali accorgimenti hai messo in atto, quali tutorial ti sei letto? Di sicuro qui ho trovato numerose risposte a tutti i miei perché: https://umbriawaynoir.wordpress.com/2018/01/17/un-posto-al-sole-di-codeigniter-prima-puntata-della-telenovelas-quando-arrivi-a-zurigo-nel-1953-come-alice-senza-pillola-blue-e-ti-ritiri-dal-torneo-perche-hai-visto-che-quei-giocatori-sono-delle-el/ .A questo punto la telenovelas prosegue visto che le cose che ci sono scritte hanno un riscontro scientifico dimostrato nella realtà! Siccome stiamo creando un database che visualizza delle notizie di gossip dobbiamo inserire gente come Belen in un database quindi il passo successivo sarà quello di creare la tabella all’ interno del nostro servizio in rete che ospita un DB MySql in questo caso:

CREATE TABLE news (
id int(11) NOT NULL AUTO_INCREMENT,
title varchar(128) NOT NULL,
slug varchar(128) NOT NULL,
text text NOT NULL,
PRIMARY KEY (id),
KEY slug (slug)
);

fatto questo serve una abilitazione per mettere in moto il DB quindi bisogna creare un file sotto la directory model di nome News_model.php che conterrà al suo interno il seguente codice:

<?php
class News_model extends CI_Model {

public function __construct()
{
$this->load->database();
}
}

public function get_news($slug = FALSE)
{
if ($slug === FALSE)
{
$query = $this->db->get(‘news’);
return $query->result_array();
}

$query = $this->db->get_where(‘news’, array(‘slug’ => $slug));
return $query->row_array();
}

social media marketing Umbriama invece seguire il facile tutorial che si trova all’ indirizzo https://codeigniter.com/user_guide/tutorial/news_section.html no?! Certo che si, questo ci dà modo di approfondire alcune problematiche sul file database.php che si trova dentro la directory config e che fa configurato con i parametri di collegamento al DB. Ma Codeigniter che limitazioni ha ha a livello di free software, ecco la risposta dal download ufficiale: La licenza MIT (MIT) Copyright (c) 2014 – 2018, British Columbia Institute of Technology: l’autorizzazione è concessa, a titolo gratuito, a chiunque ne ottenga copia di questo software e dei relativi file di documentazione (il “Software”), da trattare nel Software senza restrizioni, inclusi senza limitazioni i diritti utilizzare, copiare, modificare, unire, pubblicare, distribuire, sublicenziare e / o vendere copie del Software e per consentire a chi è il Software fornito a tal fine, alle seguenti condizioni: La suddetta nota sul copyright e questo avviso di autorizzazione devono essere inclusi in tutte le copie o parti sostanziali del software. IL SOFTWARE VIENE FORNITO “COSÌ COM’È”, SENZA GARANZIA DI ALCUN TIPO, ESPLICITA O IMPLICITO, INCLUSO, IN VIA ESEMPLIFICATIVA, LE GARANZIE DI COMMERCIABILITÀ, IDONEITÀ PER UN PARTICOLARE SCOPO E NON VIOLAZIONE. IN NESSUN CASO IL AUTORI O DETENTORI DI COPYRIGHT SARANNO RESPONSABILI PER QUALSIASI RECLAMO, DANNO O ALTRO RESPONSABILITÀ, ANCHE IN UN’AZIONE DI CONTRATTO, TORT O ALTRIMENTI, DERIVANTI DA, FUORI O IN COLLEGAMENTO CON IL SOFTWARE. Insomma il tutto si può riutilizzare liberamente! Fortunatamente o fortunosamente il pacchetto di download viene dotato anche di manuale interno per districarsi fin da subito a un uso massivo dell’ architettura MVC non proprio user-friendly all’ inizio! E se incontri problemi con il DB? Ti sei ricordato della cartella config presente dentro la cartella controllers? Ti dei ricordato del file autoload.php? Ti sei ricordato della stringa da configurare $autoload[‘libraries’] = array(‘database’); Dal punto di vista dinamico funziona che il controller fa da intermediario rispetto al blocco modello e alla directory vista che come dice il nome presenta le strutture visive dei dati mentre la logica di programmazione si trova nel modello. I metodi del controller si possono richiamare direttamente da URL, dopo la index.php digitando il nome dopo lo slesh tipo http://www.farwebdesign.com/newscodeigniter/index.php/news dove la index é la pagina di default che serve come riferimento base sempre e news invece costituisce il metodo richiamato. La questione delle maiuscole é importante soprattutto nella dichiarazione delle funzioni all’ interno del controller tipo class Pages extends CI_Controller { dove presumibilmente questo Page va a richiamare la cartella presente all’ interno della View tramite inclusione dentro la funzione specifica così analogamente a quanto avveniva con la logica di default presente al momento del download con welcome.php che al suo interno ospitava class Welcome extends CI_Controller { che a sua volta al suo interno richiamava il folder sotto la vista con $this->load->view(‘welcome_message’); This fa riferimento al controller corrente e va da sé che si possono mettere in piedi tanti controllor diversi a seconda delle funzionalità da mettere in piedi ciascuno che dialogherà trait d’union contemporaneamente con modello e vista. Invece di scrivere le operazioni del database direttamente nel controller, le query devono essere inserite in un modello, in modo che possano essere facilmente riutilizzate in seguito. I modelli sono il luogo in cui recuperare, inserire e aggiornare le informazioni nel database o in altri archivi dati. Rappresentano i tuoi dati. I dati vengono recuperati dal controller tramite il nostro modello, ma non viene ancora visualizzato nulla. La prossima cosa da fare è passare questi dati alle viste. E quando richiamo un metodo ad esempio quello citato precedentemente da social media marketing Umbria http://www.farwebdesign.com/newscodeigniter/index.php/news e mi salta fuori qualcosa del tipo:

A PHP Error was encountered

Severity: Compile Error

Message: Cannot redeclare News::view()

Filename: controllers/News.php

Line Number: 21

Backtrace:

significa che stai facendo il tuo lavoro di sviluppatore perché le grane da risolvere sono la sua essenza primaria e la mission per cui la sua carcassa esiste sul piano fisico! E con questo social media marketing Umbria ha finito la prima puntata, nel prossimo step verrà fatta la quadratura del cerchio e la revisione! ATTENZIONE, nota molto importante, anzi IMPORTANTISSIMA, quando si dichiarano le classi all’ interno del modello o del controllers lo si fa in maniera maiuscola, quando queste classi si estendono occorre UTILIZZARE LA LETTERA MAIUSCOLA, altrimenti nel fare il DEBUG si corre il rischio di farsi internare per esempio se creo un modello con questa sintassi class News_model extends CI_Model { il file non lo posso chiamare news_model se no bisogna imprecare in cirillico! Analogamente avviene per la classe default che ci ritroviamo nel download se creo questa classe per caricare una vista class Welcome extends CI_Controller { come devo chiamare il file chiede social media marketing Umbria? Con la lettera minuscola o maiuscola? Un altro errore molto frequente che si ritrova é quando apro l’estensione del CI_Controller con la graffa e poi faccio enormi pasticci NON CHIUDENDOLA UNA SOLA VOLTA IN FONDO, Visual Studio Code come editor aiuta perché con il suo plug in BRACKET PAIR COLORIZED può sottolineare questo errore o negligenza. Comunque correggendo tutti questi errori vedere l’effetto che fa con una applicazione ovviamente ancora un pò incompleta: http://www.farwebdesign.com/newscodeigniter/index.php/news nel senso che dobbiamo preoccuparci magari di estendere il dettaglio della notizia con nuove implementazioni!