Alors, pourquoi j'ai nommé nom blog, "la tribu des mini pouces" ?
Tout commence lorsque ma femme m'a parlé d'une tribu mystérieuse en Corée, la "Tribu des mini pouces" ... J'ai alors pensé d'une tribu autochtone, qui avait la particularité d'avoir des petit pouces, afin de mieux visé à l'arc ...
Mais il n'en était rien ... en fait, ce sont les personnes championnes d'écriture de Texto sur portable ! (ce qui n'est certainement pas mon cas ... )

Apparament, il n'est pas rare de rencontrer des jeunes coréens taper des texto à la vitesse de la lumière ! Voici donc un petit hommage,a tous les Geeks et Geekettes, et surtout aux développeurs dont certains se reconnaitront dans cette tribu ... ^^

vendredi 14 janvier 2011

Faire une table html en 4 lignes de code !

Introduction


Humm ... je vous vois très sceptique sur le titre de ce nouveau tuto ! Mais vous allez voir que c'est vrai ... hihihi ...
Par contre ce que je n'ai pas dit, c'est que nous allons créer une table html à partir des données d'une table mysql !

Un tableau simple


On va créer un contrôleur test_table ... et mettre le code suivant

class test_table extends Controller{

public function test(){

$this->load->database();
$this->load->library('table');
$query = 'SELECT * FROM [TABLE] LIMIT 0,10';
echo $this->table->generate($query);
}
}

Vous affichez le contenu d'une table mysql. Vous pouvez choisir les colonnes que vous souhaitez afficher en remplaçant l'étoile par les noms des colonnes, comme on le fait pour une requête mysql...

Modifier l'intitulé de la colonne


Parfois l'intitulé ne correspond pas à ce que vous souhaitez afficher ou même pire, il n'a pas forcément de sens explicite. C'est la raison pour laquelle, il serait préférable de changer l'intitulé.
Pour cela, rien de plus simple, à côté de chaque nom de colonne, on rajoute "AS [nouvel intitulé]" dans la requête...
Par exemple, si on a comme requête:
SELECT nom,prenom,add,tel FROM user LIMIT 0,10

on mettra:
SELECT 
nom AS 'Nom de famille',
prenom AS 'Prénom',
add as 'Adresse de domicile',
tel AS 'Téléphone fixe de la maison'
FROM user LIMIT 0,10


Voila, vous suivez ... ?

Nouvelle mise en page...


Plus compliqué, on va faire un tableau à 2 colonnes. La première colonne concernera les informations de l'utilisateur(nom, prénom, adresse), et le second son statut (connecté, non connecté)...
tout en utilisant un template spécifique ...
alors ... ?
Bon, tout d'abord, on va faire ce que nous savons faire ... c'est à dire la deuxième colonne:on aura donc :

SELECT [UN TRUC] AS Utilisateur, 
statut AS 'Statut de l\'utilisateur'
FROM user LIMIT 0,10

Maintenant, il faut remplacer [UN TRUC] parle code que l'on souhaite ajouter...
le template sera de la forme suivante :
<b>Nom</b> : [nom]<br />
<b>Prénom</b> : [prenom]<br />
<b>Adresse</b> : [adresse]
En fait, on utilisera la fonction CONCAT de mysql ! de la manière suivante :


CONCAT('<b>Nom</b> : ',nom,
'<br/><b>Prénom</b> : ',prenom,
'<br /><b>Adresse</b> : ',adresse)


on a donc au final la requête suivante :
SELECT CONCAT(
'<b>Nom</b> : ',nom,
'<br/><b>Prénom</b> : ',prenom,
'<br /><b>Adresse</b> : ',adresse) AS Utilisateur,
statut AS 'Statut de l\'utilisateur'
FROM user LIMIT 0,10


Conclusion


Voilà, nous pouvons faire des tableaux plus agréable à voir et surtout nous avons des possibilités importantes de présentation !
Je vous revois à la documentation de codeIgniter pour customiser encore plus vos tableaux ...
Mais vous pouvez déjà voir que l'on peut créer des tables avec du code concis ...

Un controlleur de controlleur ...

Qu'est ce que c'est ce titre ???


Alors, le but de ce tutoriel est de proposer une petite astuce qui bien pensé améliora votre développement web sous codeIgniter ... Pour comprendre ou je veux en venir, on va passer tout de suite à un exemple, sous forme de problématique simple et usuelle que vous pourrez réemployer pour d'autre cas divers et variés...

Problématique ...


Le contrôleur est le "chef d'orchestre" lorsqu'une requête arrive au serveur. Il va trouver les éléments à afficher, se connecter à la base de données, mettre en forme le contenu, puis envoyer le tout au client ...
Lorsque le contrôleur doit générer une page internet, alors, pour certaines parties de la page, il génèrera toujours le même code html (comme c'est le cas pour le header, footer, ou le menu ...), et certaines parties changent en fonction de la requête, comme c'est le cas du contenu par exemple.
Nous allons donc faire en sorte que chaque partie ai un code html par défaut et, que l'on puisse modifier n'importe quelle partie en fonction de la page demandée. Nous allons faire une page "Erreur 404", puis nous allons faire en sorte que l'on puisse transformer en une autre page ...

Le contrôleur de la page 404


Il faut créer un fichier main_controlleur.php dans le répertoire [MYAPP]/system/controllers
et vous mettez le code suivant:
class main_controller extends Controller{

public function _header(){
echo '<h1>HEADER</h1>';
}

public function _footer(){
echo '<h1>FOOTER</h1>';
}

public function _content(){
echo '<h1>PAGE 404</h1>';

}

public function _process(){
$this->_header();
$this->_content();
$this->_footer();
}
}

Vous avez 4 fonctions privées. Les trois premières servent à générer une partie du code html (header, contenu de la page 404, et footer).
Et la dernière sert à générer la page, en appelant les autres fonctions privées.
Aucune méthode de se contrôleur ne peut être appelé directement puisque toutes les méthodes sont privées, ce qui nous arrange.

nous allons maintenant créer un nouveau contrôleur "crtl_test", qui lui sera accessible et qui sera la classe fille de main_controller. Il faut donc créer le fichier crtl_test.php et mettre le code suivant:

require_once APPPATH.'controllers/main_controller.php';

class crtl_test extends main_controller{

function test(){
$this->_process();
}

}

Si vous appelez la page [HOST]/crtl_test/test.php, alors vous verrez:
HEADER
PAGE 404
FOOTER

Maintenant, on va redéclarer la fonction privée _content dans la classe crtl_test, on a alors au finale:

require_once APPPATH.'controllers/main_controller.php';

class crtl_test extends main_controller{

public function _content(){
echo '<h1>AUTRE PAGE ...</h1>';
}

function test(){
$this->_process();
}
}

Vous verrez, si vous appelez la même page, vous aurez le contenu qui changera ...c'est à dire:
HEADER
AUTRE PAGE ...
FOOTER

Ensuite ...


Vous faites dérivez tous les contrôleurs que vous créerez à main_controller, afin qui jouissent automatiquement des mêmes fonctions par défaut. Vous devriez aller bcp plus vite dans le développement et surtout la maintenance y sera facilité ... !

Dans vos futures développements


Pensez à toujours créer un "controleur de controleur" (même si le main_controller est vide), car pour factoriser le code facilement, vous allez devoir migrer certaines fonctions de crtl_test vers main_controller.