Glocal alle prese ancora con la parte statica

Il link del progetto in working progress
http://umbriawayformazione.altervista.org/ci_project_glocal/

Riassunto delle puntate precedenti

All’ indirizzo https://umbriawayinfo.wordpress.com/2021/03/06/territorio-storia-cultura-conoscere-le-risorse-che-hai-sotto-casa-con-glocal-web-app-come-mettere-in-moto-un-progetto-con-codeigniter-seconda-puntata/ abbiamo visto nella seconda puntata come sistemare un template adesso dobbiamo soddisfare le nostre curiosità legate alla parte statica.

Problem Solving

Quindi seguendo le modalità espresse dall’ articolo io posso agganciare qualsiasi altra pagina oltre alla index? Anche se ho per le mani una Ferrari (codeigniter framework) in questo momento desideriamo capire se almeno ai primordi del suo utilizzo posso almeno assicurare le funzionalità basiche al mio sito linkando pagine semplici statiche

La pratica

Quindi facendo riferimento alla fonte dei template indicata nel primo articolo prendiamo la nostra nuova pagina e la chiamiamo gallery.php con l’idea di vedere se dalla home posso visualizzarla con tanto di foto. Metto quindi il link sulla navbar in alto:

<li>
<a href="http://umbriawayformazione.altervista.org/ci_project_glocal/index.php/ColleNoceraUmbra/photos">Photos</a>
</li>

In questo link seguo la sintassi MVC voluta per convenzione dal fremowork che mi impone di inserire URL BASE seguita dalla index e dal NOME DEL CONTROLLER e dal METODO indicata dalla funzione, quindi sul CONTROLLER aggiungerò una function publica:

public function photos()
{
$this->load->view('gallery');
}

Apriamo una parentesi su come usare i link con codeigniter

Sopra abbiamo usato un link come http://umbriawayformazione.altervista.org/ci_project_glocal/index.php/ColleNoceraUmbra/photos ma è una operazione sacrilega, così non sfruttiamo la potenza del framework. Qui abbiamo a disposizione due modi alternativi per fare le cose ossia:

<a href="<?php echo site_url();?>/ColleNoceraUmbra/photos">Photos</a>

che equivale a:

<a href="http://umbriawayformazione.altervista.org/ci_project_glocal/ColleNoceraUmbra/photos">Photos</a>

e

<a href="<?php echo base_url();?>/index.php/ColleNoceraUmbra/photos">Photos</a> 

che riprende quanto contenuto nel file config.php presente nella cartella config:

$config['base_url'] = 'http://umbriawayformazione.altervista.org/ci_project_glocal/';

e che equivale a:

<a href="http://umbriawayformazione.altervista.org/ci_project_glocal/index.php/ColleNoceraUmbra/photos">Photos</a>

La differenza tra i due metodi consiste che site_url() include anche la pagina index.php mentre base_url() si porta dietro solo quanto memorizzato nella stringa del file config e index.php va aggiunto nel link. IN SOSTANZA usando SITE_URL() non abbiamo necessità di includere la pagina index che viene già catturata di default, mentre non è così per BASE_URL()

La costruzione del template

Per tirare su il template della gallery non facciamo altro che seguire i consigli delle puntate precedenti ma a questo punto ecco sopraggiungere una amara sorpresa: quando andiamo a visualizzare l’URL indicato dal link che porta alla gallery il sistema ci dice che non trova nessuna pagina, indicando proprio il fatto che non esiste.

PANICO ASSOLUTO, come COMBATTERE CONTRO LA STREGONERIA

In informatica succede spesso, ogni tanto qualcosa misteriosamente non funziona, allora come in questo caso vai a vedere in tutti gli angoli del controller e della vista se hai scritto giusto quello che dovevi scrivere o se non hai commesso qualche errore plateale. Hai rispettato le regole di codeigniter, hai aggiunto la nuova pagina al controller senza il MODEL perchè non abbiamo necessità di spedire nessun dato dal DB alla pagina ma anche facendo delle cose semplicissime non c’è verso di vedere nulla!

URL, la funzione che risolve i problemi!

Codeigniter usa delle funzioni contenute negli HELPER (una cartella presente dentro la cartella SYSTEM) per risolvere i problemi, ma se queste funzioni non vengono richiamate siamo al punto di partenza, crederò di essere vittima di un ritò vudù o di un attacco di ipotetici pirati della rete. Ma non è così, semplicemente devi andare sul file autoload.php presente nella cartella config e andare a scrivere in prossimità degli helper settati di default a vuoto:

$autoload['helper'] = array('url', 'form' , 'html', 'file');

in questo caso abbiamo incluso le funzioni url, form, html, file visto che c’eravamo, ossia un set di funzionalità che aiuteranno in futuro a gestire il codice in vari ambiti e non solo sulla gestione degli url. A questo punto portiamo tutto su server via FTP e dovrebbe funzionare tutto, se cliccando sul link della galleria dalla home page finisco di nuovo nel vuoto con errori in cui mi danno la pagina inesistente, significa o che devo aggiornare magari il browser con CTRL + F5 o che forse devo fare altro. In teoria così dovrei vedere tutto ma se proprio voglio essere sicuro richiamo gli helper specifici che mi servono anche dal metodo costruttore della classe del controller che diventa quindi nel nostro caso specifico:

<?php
defined('BASEPATH') OR exit('No direct script access allowed');

class ColleNoceraUmbra extends CI_Controller {

	public function __construct()
	{
		parent::__construct();
		$this->load->helper('url');
	}

	/**
	 * Index Page for this controller.
	 *
	 * Maps to the following URL
	 * 		http://example.com/index.php/welcome
	 *	- or -
	 * 		http://example.com/index.php/welcome/index
	 *	- or -
	 * Since this controller is set as the default controller in
	 * config/routes.php, it's displayed at http://example.com/
	 *
	 * So any other public methods not prefixed with an underscore will
	 * map to /index.php/welcome/<method_name>
	 * @see https://codeigniter.com/user_guide/general/urls.html
	 */
	public function index()
	{
		$this->load->view('index');
	}

	public function photos()
	{
		$this->load->view('gallery');
	}

}

Al momento attuale delle conoscenze acquisite pensiamo che questa sia una sorta di ridondanza ma contro la stregoneria non si sa mai, adesso scrivendo questa ulteriore cosa con il costruttore che prima non c’era rendiamo disponibile la gestione degli URL per tutte le nostre funzioni pubbliche e aggiornando i file sul server davvero andiamo a vedere quello che volevamo vedere, ossia la pagina graficamente colta nella sua lungimirante funzionalità:

Imparare cose nuove

Quando si lavora su un progetto si possono sperimentare dal vivo delle situazioni, nello specifico all’ interno della cartella HELPERS abbiamo creato un file che poi abbiamo richiamato anche nel file autoload.php presente nella cartella config e in questo file abbiamo scritto la famosa dichiarazione iniziale che è un controllo di sicurezza che dice ai contenuti di essere replicabili solo all’ interno della applicazione predefinita seguita da un set di istruzioni che stampano un testo a video e che ha un metodo che possiamo richiamare:

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

if ( ! function_exists('test_method'))
{
    function test_method($var = '')
    {
        return $var;
    }
}

A questo punto abbiamo aggiunto l’helpers anche nel costruttore del controller e provato a stampare qualcosa:

<?php
defined('BASEPATH') OR exit('No direct script access allowed');

class ColleNoceraUmbra extends CI_Controller {

	public function __construct()
	{
		parent::__construct();
		$this->load->helper('url','fwd_helper');
	}

	/**
	 * Index Page for this controller.
	 *
	 * Maps to the following URL
	 * 		http://example.com/index.php/welcome
	 *	- or -
	 * 		http://example.com/index.php/welcome/index
	 *	- or -
	 * Since this controller is set as the default controller in
	 * config/routes.php, it's displayed at http://example.com/
	 *
	 * So any other public methods not prefixed with an underscore will
	 * map to /index.php/welcome/<method_name>
	 * @see https://codeigniter.com/user_guide/general/urls.html
	 */
	public function index()
	{
		$this->load->view('index');
		echo test_method('Hello World');
	}

	public function photos()
	{
		$this->load->view('gallery');
	}

}
helpers personalizzati

e vediamo l’effetto che fa, in questo modo ci rendiamo anche conto di quanto possiamo essere versatili nel personalizzare le nostre WEB APP costruendo delle funzioni personalizzate! Gli helper sono all’ inizio cercati dentro il path system/helpers se non vengono trovati vanno a prelevarli da dentro il path application/helpers. Dentro questa cartella possiamo anche sovrascrivere gli helpers di sistema aggiungendo nuovi funzioni semplicemente facendo una copia del file e inserendo all’ inizio il prefisso MY_seguitodanomefileinteresse; Il prefisso si può cambiare e personalizzare nel file config.php nel parametro:

$config['subclass_prefix'] = 'MY_';

Il discorso sugli helpers sarebbe riduttivo sbolognarlo con queste poche coordinate e anzi questi brandelli di informazione da approfondire stanno ad indicare la complessità di un mondo complesso e labirintico quale è Codeigniter!

Conclusioni

A questo punto abbiamo un cancello base come http://umbriawayformazione.altervista.org/ci_project_glocal/ e anche un modulo gallery a parte accessibile dalla home che é http://umbriawayformazione.altervista.org/ci_project_glocal/index.php/ColleNoceraUmbra/photos a questo punto dobbiamo interrogarci seriamente a che cosa serva una gallery statica fatta in questa maniera, ossia senza caratteristiche dinamiche che vengono offerte da codeigniter e che non stiamo sfruttando (non è meglio gestire tutto con un DB?)

Rispondi

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo di WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione /  Modifica )

Google photo

Stai commentando usando il tuo account Google. Chiudi sessione /  Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione /  Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione /  Modifica )

Connessione a %s...