[ CLASSE ] GÉNÉRER LA STRUCTURE D'UNE PAGE WEB À L'AIDE D'UNE CLASSE

Epoc22 Messages postés 198 Date d'inscription lundi 28 février 2005 Statut Membre Dernière intervention 14 novembre 2008 - 14 mars 2007 à 11:48
cs_zeguizmo Messages postés 138 Date d'inscription vendredi 1 août 2003 Statut Membre Dernière intervention 16 juillet 2009 - 19 sept. 2007 à 13:34
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/41845-classe-generer-la-structure-d-une-page-web-a-l-aide-d-une-classe

cs_zeguizmo Messages postés 138 Date d'inscription vendredi 1 août 2003 Statut Membre Dernière intervention 16 juillet 2009
19 sept. 2007 à 13:34
Merci de ton travail !
BreakingCentral Messages postés 11 Date d'inscription mercredi 14 mars 2007 Statut Membre Dernière intervention 9 avril 2007
20 mars 2007 à 04:31
Bon bah ça y est, j'ai tout changé !
BreakingCentral Messages postés 11 Date d'inscription mercredi 14 mars 2007 Statut Membre Dernière intervention 9 avril 2007
16 mars 2007 à 21:18
C'est pas évident tout ça... Je bosse dessus en ce moment mais je suis pas un expert des classes php5...
FhX Messages postés 2350 Date d'inscription mercredi 13 octobre 2004 Statut Membre Dernière intervention 18 avril 2015 3
16 mars 2007 à 20:13
Ou alors :

$doc = new html;

$head = $doc->NouvelleBalise('head');
$title = $doc->NouvelleBalise('title');
$title->content = 'Un titre';
$head->Ajoute($title);

$meta = $doc->NouvelleBalise('meta');
$meta->key = 'content';
$meta->value = '.....';
$head->Ajoute($meta);

$script = $doc->NouvelleBalise('jscript');
$script->version = '1.1';
$script->content = 'function().....';
$head->Ajoute($script);

$doc->Ajoute($head);

//etc...

Ca ferait un truc dans le genre :

class html {
static private $content;
public function Ajoute( MainElement $obj );
public function NouvelleBalise( $objname );

public function ToXML();
public function ToHTML();
}

class MainElement {
protected $content;
public function Ajoute( ChildElement $obj );
}

class ChildElement {

protected $content

public function __construct();
public function Ajoute( ChildElement $obj );

}

// Eventuellement, si on a besoin de plus niveau balise :

class meta extends ChildElement {
protected $key;
protected $value;

//
}

etc...
FhX Messages postés 2350 Date d'inscription mercredi 13 octobre 2004 Statut Membre Dernière intervention 18 avril 2015 3
14 mars 2007 à 19:49
Ce genre de structure, j'aurais plutot fait quelque chose comme ca :

$doc = new html;

$head = $doc->nouvelle_balise('head');
$head->SetTitle('.......');
$head->addCSS('lien.css', 'autrelien.css', 'encoreun.css');
$head->addMeta('content', '.....');
$head->addMeta('truc', 'machin');
$head->AddJscript('function().....');

$doc->AppendChild($head);

$body = $doc->nouvelle_balise('head');
$body->AddTitle('Mon titre', 4);

$doc->AppendChild($body);

$doc->GenerateHTML();
echo $doc;

Bref, un peu comme XML quoi :)
cs_garfield90 Messages postés 388 Date d'inscription lundi 7 juillet 2003 Statut Webmaster Dernière intervention 10 février 2009
14 mars 2007 à 19:39
Après lecture rapide du code, je trouve que la construction de page via ton systeme est galère.
par exemple : contenu du body
$a->h1('toto') ;
echo $a->h1 ;
$a->h2('toto') ;
echo $a->h2 ;
$a->h2('toto') ;
echo $a->h2 ;

=> c'est pas pratique, je trouve.

tu pourrais améliorer en faisant une gestion de toutes les balises avec une gestion de la descendance de balise.

permettre la gestion des classes et des id de tes elements(balises) HTML/(x)HTML.
permettre la possibilité d'ajouter des scripts JS externes.
etc.

Ca permettrai de t'amuser avec les interfaces/ classes abstraites (PHP5) au niveau de la gestion des elements.
BreakingCentral Messages postés 11 Date d'inscription mercredi 14 mars 2007 Statut Membre Dernière intervention 9 avril 2007
14 mars 2007 à 13:57
Ok merci pour ta réponse, je vais voir ça.
Mais là, c'est l'heure d'aller râter les partiels, alors à plus ! xD

@+
webdeb Messages postés 488 Date d'inscription samedi 5 avril 2003 Statut Membre Dernière intervention 31 mars 2009 4
14 mars 2007 à 13:23
>> $this->title = "<title>$title</title>";

A remplacer par : $this->title = '<title>'. $title .'</title>'."\n";

>> ouais mais les tableaux imbriqués comme ça les uns dans les autres, je trouve pas ça terrible... Ca alourdit plus qu'autre chose à mon avis...

Ah nan pas du tout ! C'est surtout plus propre de fonctionner avec les tableaux car tu sépares les données que tu enregistres de leur "mise en forme". Dans ta classe, tu places les données directement entre les balises. Il faudrait le faire complètement à la fin ça. Il existe plein de fonction pour manipuler les tableaux en plus donc c'est très pratique. Dans ton cas, il faudrait traiter des chaînes de caractères... et c'est bien plus galère. Avec un tableau tu peux plus facilement compter les éléments. Par exemple, vérifier que tu n'as qu'une seule et unique balise <title>, <meta description>, <meta keywords> ...

>> Et je sais pas trop comment on fait une classe en PHP 5 (quels sont les changements ?) ^^

- Une classe PHP5 a un constructeur, un destructeur, des attributs avec une visibilité (private, public, protected...). La syntaxe PHP5 se rapproche sensiblement de celle de Java.

Pour plus d'info : http://fr.php.net/manual/fr/language.oop5.php

Tu as tout ici pour refaire ta classe correctement. Je te conseille aussi de télécharger ma classe Atom Generator (présente sur ce site et que je dois mettre à jour d'ailleurs lol) et de t'en inspirer pour refaire ta classe.

++
BreakingCentral Messages postés 11 Date d'inscription mercredi 14 mars 2007 Statut Membre Dernière intervention 9 avril 2007
14 mars 2007 à 13:09
Au fait, là où j'ai mis des guillemets, j'étais obligé sinon ça ne marchait pas. Et je sais pas trop comment on fait une classe en PHP 5 (quels sont les changements ?) ^^

<? @+ ?>
BreakingCentral Messages postés 11 Date d'inscription mercredi 14 mars 2007 Statut Membre Dernière intervention 9 avril 2007
14 mars 2007 à 13:02
@Epoc22: oui j'ai mis ces balises.

@webdeb: ouais mais les tableaux imbriqués comme ça les uns dans les autres, je trouve pas ça terrible... Ca alourdit plus qu'autre chose à mon avis...

+++
webdeb Messages postés 488 Date d'inscription samedi 5 avril 2003 Statut Membre Dernière intervention 31 mars 2009 4
14 mars 2007 à 12:44
1/ Pourquoi ne pas avoir fait une véritable classe PHP5 ?
2/ Utilise des apostrophes plutôt que des guillemets pour tes chaînes de caractères statiques
3/ Un tableau a plusieurs dimensions représentant la hierarchie des balises d'une page web aurait été meilleur qu'une multitude de variables dans lesquelles tu concatènes les chaînes HTML. Exemple :

<?php
$arrayPage = array(

'head' => array
(
'title' => 'Ton titre',
'description' => 'Ta description',
'keywords' => 'Tes keywords',
'link' => array
(
array('rel' => 'stylesheet', 'href'=>'styles_web.css', 'media' => 'screen', 'type' => 'text/css'),
array('rel' => 'stylesheet', 'href'=>'styles_print.css', 'media' => 'print', 'type' => 'text/css')
);
),
'body' => array(...)
);

?>

++
Epoc22 Messages postés 198 Date d'inscription lundi 28 février 2005 Statut Membre Dernière intervention 14 novembre 2008 1
14 mars 2007 à 11:48
J'ai juste survolé le code mais il a l'aire intéressant, avec quelques ajouts et améliorations...
Est ce que tu a mit les balise META pour la description, les mots clé, l'auteur, le copyright... ?
Rejoignez-nous