Lo zen e l’arte della manutenzione di Codeigniter: come risolvere il problema della paginazione senza pagare il Sig.Wolf

Scacco e poi Matto!

Lo zen e l’arte della manutenzione di Codeigniter: come risolvere il problema della paginazione senza pagare il Sig.Wolf

Ottobre 24, 2020 codeigniter 0

C’è un momento in cui le problematiche per il newbie che é a digiuno di nuova tecnologia non possono essere risolte da sole, soprattutto quando maneggi un framework che non conosci solo da una decina di giorni e allora si può pregare una risoluzione casuale che scende dal cielo oppure seguire un approccio empirico cercando luoghi dove le risposte esistono. Queste risposte nei forum ci sono ma può anche accadere che l’accesso in questi club per svariati motivi possano non essere accessibili (ad esempio io ho postato il problema del passaggio di variabili tra una pagina e l’altra ma ho riscontrato diverse situazioni anomale nei login di accesso). Quindi che fare, mica si può stare fermi, persino nel libro Lo Zen e l’arte della manutenzione della motocicletta di Robert M. Pirsig scritto nel 1974 a un certo punto si ritrova una frase profondissima, “per vivere bisogna lavorare”, OK quindi? Per esempio come risolvo il problema della PAGINAZIONE? CON UN APPROCCIO EMPIRICO! Per risolverla ho seguito lo sforzo fisico sopportato dai sollevatori di pesi olimpionici. Questi sportivi suddivono il problema in due fasi ben distinte: da un lato si preoccupano in un primo momento di staccare i pesi da terra per appoggiarsi con le braccia come leva in modo da prepare la seconda fase dove l’atleta si erge in piedi e riesce a staccare tutto con un ultimo secondo sforzo dove non mancano grida di dolore e di giubilo. Quindi siccome stiamo lavorando su un applicativo non possiamo fare esperimenti su qualcosa che già a livello amebico funziona rischiando di rovinarlo, piuttosto uso una logica atomica alla REACT e faccio in modo di scomporre un problema retrocedendo all’ analisi di problemi più piccoli fino ad arrivare a livello minimalista ed elemntare, quindi diamo un occhiata al progetto prototipo in cui la paginazione funziona, poi in un secondo momento come descritto sopra per il sollevamento pesi, si cercherà di integrare il tutto nel progetto reale sicuri che comunque danni non possiamo farli e che abbiamo il controllo sul codice. Creo quindi la parte logica nel model, un controller che regola il traffico e una vista che visualizza i dati. Ho una tabella su db e diamo per scontato di aver “acceso” il collegamento sul file database.php come diamo per scontata l’operazione preliminare di settare la url_base nel file congfig.php, queste cose ormai le sappiamo fare. La tabella western contiene semplici informazioni sui film, come titolo, anno, regia etc. Quindi vediamo come è fatto il model che ho chiamato FwdPagination_Model.php:

<?php
class FwdPagination_Model extends CI_Model
{

public function get_count()
{
return $this->db->count_all(“western”);
}

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

}
?>

diamo un occhiata al controller chiamato FwdPagination_Controller.php:

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

class FwdPagination_Controller extends CI_Controller {

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

$this->load->helper(‘url’,’form’);
$this->load->library(“pagination”);
$this->load->model(‘FwdPagination_Model’);
}

public function index()
{
$config = array();
$config[“base_url”] = base_url() . “index.php/FwdPagination_Controller/index”;
$config[“total_rows”] = $this->FwdPagination_Model->get_count();
$config[“per_page”] = 10;
$config[“uri_segment”] = 3;

$this->pagination->initialize($config);

$page = ($this->uri->segment(3))? $this->uri->segment(3) : 0;

$data[“links”] = $this->pagination->create_links();

$data[‘movie’] = $this->FwdPagination_Model->get_movies($config[“per_page”], $page);

$this->load->view(‘pagination’, $data);
}
}
?>

La pagina PAGINATION.PHP contiene:

<!DOCTYPE html>
<html>
<head>
<title>CodeIgniter Pagination</title>
<meta charset=”UTF-8″>
<meta name=”viewport” content=”width=device-width, initial-scale=1.0″>
<link rel=”stylesheet” href=”https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css”>
</head>
<body style=”color:red;font-size:20px”>
<div class=”container”>
<h3 class=”text-primary”>Fwd Western Pagination Project</h3>
<div class=”column”>
<table class=”table table-bordered”>
<thead>
<tr>
<th>ID</th>
<th>Titolo</th>
<th>Regia</th>
<th>Anno</th>
</tr>
</thead>
<tbody>
<?php foreach ($movie as $res): ?>
<tr>
<td><?php echo $res->id ?></td>
<td><?php echo $res->title ?></td>
<td><?php echo $res->regia ?></td>
<td><?php echo $res->anno ?></td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
<p><?php echo $links; ?></p>
</div>
</div>
</body>
</html>

dove in particolare ci si sofferma sulla chiave che risolve tutto e cioé:

<?php foreach ($movie as $res): ?>

Ok che cosa é tutta questa roba? Vediamo il risultato a video:

verificoi che funzioni tutto e prego il dio manitù che non mi ha creato problemi e dopo inizio a pormi il problema del VESTITO DELLA DOMENICA nel senso che voglio abbellire la mia pagina, quindi inizio con:

Ok risultato fantastico, ma non mi basta! Per adesso ho verificato che tutto va alla grande ma adesso come implemento su una pagina di progetto diversa come formattazione? Semplici esando l’array $movie, nel senso che quando implementerò sulla mia area progetto non metterò:

<?php foreach ($result as $row): ?>

ma

<?php foreach ($movie as $res): ?>

In questo modo ottengo:

ma non mi basta per cui devo lavorare sui css di bootstrap per ottenere non senza lotte intestinali convulse:

Adesso abbiamo il problema delle visualizzazioni delle immagini perché i path relativi non sono graditi e ne serve uno assoluto, seguire tutorial all’ indirizzo: https://www.farwebdesign.com/wp/percorsi-relativi-e-percorsi-assoluti-per-gestire-le-risorse-grafiche-in-codeigniter-arriva-wolf-e-risolve-i-problemi/

Tra l’altro studiando bene l’esempio si possono trarre anche importanti informazioni per risolvere il problema dei problemi, quello sollevato in incipit ancora da risolvere sul passaggio di variabili tra pagine perché viene mostrata nel codice la tecnica SEGMENT che dovrebbe risolvere le GET in transito della programmazione procedurale (sparo una variabile con il ? dopo url e recuper tramite superglobals GET sulla pagina di destinazione) che qui in codeigniter non è supportata essendo la logica MVC diversa sulla chiamata delle pagine (nome del controller/metodo/parametro).