[php5][poo] exemples de systeme de classe (heritage, agregation, composition, etc...) generant de l'html

Soyez le premier à donner votre avis sur cette source.

Vue 19 030 fois - Téléchargée 960 fois

Description

Bonjour,

Voilà maintenant 2 ans que mon site (http://nifhell.free.fr) a été codé grace à ce système de classe que j'ai codé moi même.

Le principe est simple: j'ai créé une classe PHP par entité HTML dont j'avais besoins, puis pour à peu prés tous les tags HTML existant.

Une page HTML étant des TAGS s'imbriquant les un dans les autres, j'ai donc crée une "méta classe" CTag dont dérivent toutes les autres et qui peuvent s'imbriquer.

Le but étant de ne plus avoir à se soucier de coder en HTML d'un coté et en PHP de l'autre: ici tout est en PHP. Et l'affichage se fait par un simple "echo" de l'objet "CTag" englobant tous les autres, à la fin du script.
Aussi pour mon site je n'ai pas écrit une seule ligne d'HTML.

Ainsi une fois les principales classes de TAGS HTML créés, j'ai pus en dériver des versions personalisées et customisées (comme la classe CMenu ou CPageperso contenues dans le zip).

Avantage:
Facile à maintenir et plus de problème entre affichage et traitement de données ni de passer par une gestion de templates, vite bordélique (enfin pour moi).
Mise à jour du contenu de votre site rapide et centralisé par classe.
Exemple: vous voulez modifier le "header" de toutes les pages de votre site. Vous ne modifier qu'un seul document: la classe CPageperso.php ou la classe CHeader.php
Défaut: bien moins rapide que des templates et bien plus gourmand en ressource (enfin je suppose, j'ai jamais fait de comparatif) ...

Source / Exemple :


//Ceci est la page subscribe.php de mon site perso, qui permet de s inscrire à mon site
$p = new CPageperso("Please fill the register form");

$f = new CForm("post","./bin/cgi/register.php5","formulaire");
$f->onsubmit("valide");

$a = new CTable(17,1);
if (isset($_GET['title'])) $a->addTitle($_GET['title']);
else {
	if(!is_null($error_mess)) $a->addTitle("Please fill all the following fields: ".$error_mess);
}
$a->getTitle()->styleClass("small");
$a->styleClass("top");
$a->getCell(2,1)->addTag(new CInputText("login",20,30,$login))->getTag(1)->id("login")->styleClass("text")
->onblur("valide_char(this,'&,;:./§%\$£+=}])*µ<>°`|[({#~²',3)");
$a->getCell(1,1)->addTag(new CLabel("Enter your Login:","login"));

$a->getCell(4,1)->addTag(new CPassword("password1",20,30,""))->getTag(1)->id("password1")->styleClass("text")
->onblur("valide_char(this,'',6)");
$a->getCell(3,1)->addTag(new CLabel("Enter your Password:","password1"));

$a->getCell(6,1)->addTag(new CPassword("password2",20,30,""))->getTag(1)->id("password2")
->styleClass("text")->onchange("compare_password(this.form.password1,this);")
->onblur("valide_char(this,'',6);");
$a->getCell(5,1)->addTag(new CLabel("Re-Enter your Password:","password2"));

$a->getCell(8,1)->addTag(new CInputText("name",20,30,$name))->getTag(1)->id("name")->styleClass("text")
->onblur("valide_char(this,'0123456789&,;:!?./§%\$£+=}])*@µ<>°_`|[({#~²',3)");
$a->getCell(7,1)->addTag(new CLabel("Enter your first name:","name"));

$a->getCell(10,1)->addTag(new CInputText("forname",20,30,$forname))->getTag(1)->id("forname")
->styleClass("text")->onblur("valide_char(this,'0123456789&,;:!?./§%\$£+=}])*@µ<>°_`|[({#~²',3)");
$a->getCell(9,1)->addTag(new CLabel("Enter your name:","forname"));

$a->getCell(12,1)->addTag(new CInputText("email",20,30,$email))->getTag(1)->id("email")
->styleClass("text")->onchange("valide_courriel(this)")
->onblur("valide_char(this,'&,;:!?/§%\$£+=}])*µ¨^<>°`|[({#~²',8)");
$a->getCell(11,1)->addTag(new CLabel("Enter your email:","email"));

$a->getCell(14,1)->addTag(new CInputText("location",20,30,$location))->getTag(1)->id("location")
->styleClass("text")->onblur("valide_char(this,'0123456789&,;:!?./§%\$£+=}])*@µ<>°_`|[({#~²',3)");
$a->getCell(13,1)->addTag(new CLabel("Enter your location:","location"));

$a->getCell(16,1)->addTag(new CInputText("bdate",20,30,$bdate))->getTag(1)->id("bdate")->styleClass("text")
->onchange("valide_date(this,1950,2020,'aaaa-mm-jj')")
->onblur("valide_char(this,'&,;:!?.§%\$£+=}])*@µ<>°_`|[({#~²abcdefghijklmnopqrstuvwxyz',10)");
$a->getCell(15,1)->addTag(new CLabel("Enter your birth date:aaaa-mm-jj","bdate"));

$a->getCell(17,1)->addTag(new CSubmit("Send"))->alignCenter()->getTag(1)->styleClass("buttonwhite");
$a->getCell(17,1)->addTag(new CReset("Reset"))->getTag(2)->styleClass("buttonwhite");

$f->addTag($a);
$p->addTag($f);

echo $p;
//
// Ci dessous les 3 classes mères de toutes les autres -->
//
// CObject.php -->
//
abstract class CObject extends stdClass  {
	/**

  • @type String
  • @desc code HTML de l'objet en cours.
    • /
protected $m_HTMLcode; /**
  • @return String
  • @desc renvoie le code HTML de l'objet en cours.
  • Est appelé à chaque fois que l'instance doit etre affichée.
    • /
function __tostring() { return $this->m_HTMLcode; } /**
  • @return void
  • @desc destructeur.
    • /
function __destruct() { unset($this->m_HTMLcode); } /**
  • @return void
  • @desc Remplace le code HTML de l'objet en cours par $html.
  • $html est de type string.
    • /
function setHTML($html) { $this->m_HTMLcode = $html; return $this; } /**
  • @return int
  • @desc Renvoie l'id de l'objet en cours.
    • /
function getObjectID() { $tmp="$this"; if(preg_match('/^Object id #(\d+)$/',$tmp,$matches)) { return $matches[1]; } else { return $tmp; } } } // // CProperty.php --> // $url = $_SERVER['DOCUMENT_ROOT']; include_once($url."/bin/class/cobject.php5"); class CProperty extends CObject { //attributs protected $m_PropertyValue=""; protected $m_Property; /**
  • @desc Constructeur.
    • /
function CProperty($property,$propertyvalue) { $this->m_PropertyValue = strtolower($propertyvalue); $this->m_Property = strtolower($property); } /**
  • @return CProperty
  • @desc ecrase la propriété en cousr par celle passée en argument.
    • /
public function setProperty($property,$propertyvalue) { $this->m_PropertyValue = strtolower($propertyvalue); $this->m_Property = strtolower($property); return $this; } /**
  • @return CProperty
  • @desc Ecrase la valeur de la propriété en cours.
    • /
public function setValue($propertyvalue) { $this->m_PropertyValue = strtolower($propertyvalue); return $this; } /**
  • @return CProperty
  • @desc Remplace le nom de la propriété en cours.
    • /
public function setName($property) { $this->m_Property = strtolower($property); return $this; } /**
  • @return String
  • @desc renvoie le nom de la proprieté en cours.
    • /
public function getName() { return $this->m_Property; } /**
  • @return String
  • @desc renvoie la valeur de la proprieté en cours.
    • /
public function getValue() { return $this->m_PropertyValue; } public function __tostring() { if($this->m_PropertyValue != "" ) { $this->setHTML($this->m_Property." = \"".$this->m_PropertyValue."\" "); } else { $this->setHTML($this->m_Property." "); } return parent::__tostring(); } public function __destruct() { unset($this->m_Property); unset($this->m_PropertyValue); parent::__destruct(); } } // // CTag.php --> // $url = $_SERVER['DOCUMENT_ROOT']; include_once($url."/bin/class/cobject.php5"); include_once($url."/bin/class/cproperty.php5"); class CTag extends CObject { /**
  • @type CTag
  • @desc ID du tag.
    • /
protected $m_id = ""; /**
  • @type CTag
  • @desc tag d'entete du tag en cours (le tag en cours sera encadré par ce tag).
    • /
protected $m_ins = null; /**
  • @type String
  • @desc Nombre de fois que le tag doit etre décaler sur la droite.
    • /
protected $m_decalage = ""; /**
  • @type Array
  • @desc tableau des propriétés CProperty du tag en cours
  • <tag prop1=val1 prop2=val2 ...> ... </tag>
    • /
protected $m_properties = null; /**
  • @type Array
  • @desc tableau des tags CTag imbriquées ou non dans le tag en cours
  • <tag> <tag1> </tag1> <tag2> <tag3> ... ... </tag3> </tag2> </tag1> </tag>
    • /
protected $m_tags = null; /**
  • @type String
  • @desc text insérer dans le tag: <tag>Text</tag>
    • /
protected $m_text = ""; /**
  • @type String
  • @desc type du tag en cours <type> ... </type>
    • /
protected $m_type = ""; /**
  • @return void
  • @desc constructeur
  • $type, $txt, $prop sont de type string.
  • ex: CTag("body","Je rentre le texte que je veux afficher","bgcolor=#FFFFFF link=black alink=lime")
    • /
function CTag($type,$txt,$prop) { //ajoute les propriétés du tag en cours. $this->m_properties = array(); $this->addProperty($prop); //ajoute les tags imbriqués dans le tag en cours. $this->m_tags = array(); //ajoute le type du tag. $this->setType($type); //ajoute le text soumis au tag et aux tags imbriqués. $this->setTxt($txt); //met le decalage $this->m_decalage = ""; } /**
  • @return String
  • @desc renvoie le code HTML du tag en cours avec celui de tous ses tags imbriqués.
  • Est appelé à chaque fois que l'instance doit etre affichée.
    • /
function __tostring() { $this->decalage(); $starttag = $this->getStarttag(); $itag = $this->getInsertedtag(); $txt = $this->getTxt_r(); $endtag = $this->getEndtag(); $this->setHTML("\n".$starttag.$txt.$itag."\n".$endtag); return parent::__tostring(); } /**
  • @return CTag
  • @desc Insére le tag en cours à la date et heure donnée, $date, dans la page donnée, $url.
    • /
public function ins($url,$date) { unset( $this->m_ins ); $this->m_ins = new CTag("ins","","cite&=".$url."&&datetime&=".$date); return $this; } /**
  • @return CTag
  • @desc Supprime le tag en cours à la date et heure donnée, $date, dans la page donnée, $url.
    • /
public function del($url,$date) { unset( $this->m_ins ); $this->m_ins = new CTag("del","","cite&=".$url."&&datetime&=".$date); return $this; } /**
  • @return CTag
  • @desc Supprime les proriétés d'insertion et de suppression du tag en cours (les tags <del> ou <ins>).
    • /
public function rmINSOrDEL() { unset( $this->m_ins ); $this->m_ins = null; return $this; } /**
  • @return String
  • @desc
  • créer le tag d'entete du tag html en cours,
  • avec son type et ses propriétés.
    • /
protected function getStarttag() { $properties = $this->getProperties(); $ins = ""; if(!is_null($this->m_ins)){ $ins = $this->m_ins->getStarttag(); } return $ins.$this->m_decalage."<".$this->m_type." ".$properties."> "; } /**
  • @return String
  • @desc
  • créer le tag de fin du tag html en cours,
  • avec son type.
    • /
protected function getEndtag() { $ins = ""; if(!is_null($this->m_ins)){ $ins = $this->m_ins->getEndtag(); } return $this->m_decalage."</".$this->m_type."> ".$ins; } /**
  • @return String
  • @desc
  • renvoie le code HTML des tags imbriqués dans le tag en cours,
  • avec leur tag de d'entete,leur tag de fin et leur texte:
  • appelle la fonction __tostring() de chaque tag imbriqué.
    • /
protected function getInsertedtag() { $tags=""; for($i=0;$i<$this->getTagNbr();$i++) { $tags = $tags.$this->m_tags[$i]->__tostring(); } return $tags; } /**
  • @return CTag
    • /
protected function decalage() { foreach($this->getTagArray() as $tag) { $tag->addDecalage($this->getDecalage()); $tag->decalage(); } return $this; } /**
  • @return CTag
    • /
protected function addDecalage($dec) { $this->m_decalage = $dec."\t"; return $this; } /**
  • @return string
    • /
public function getDecalage() { return $this->m_decalage; } /**
  • @return Array
  • @desc renvoie le tableau de tag (CTag) imbriqué de l'instance en cours.
    • /
public function getTagArray() { return $this->m_tags; } /**
  • @return CTag
  • @desc remplace le tableau de tag (CTag) par le tableau de tag $tag.
    • /
public function setTagArray($tag) { unset ($this->m_tags); $this->m_tags = $tag; return $this; } /**
  • @return CTag
  • @desc (Incompatible avec Netscape) Associe une classe de style au tag en cours.
  • Si $class est vide (égale à "") alors la propriété est supprimée.
    • /
public function styleClass($class) { if($class != "" ) { return $this->modifyProperty("class&=".$class); } else { return $this->delProperty("class"); } } /**
  • @return CTag
  • @desc Associe un style au tag en cours.
  • Si $style est vide (égale à "") alors la propriété est supprimée.
    • /
public function style($style) { if($style != "" ) { return $this->modifyProperty("style&=".$style); } else { return $this->delProperty("style"); } } /**
  • @return CTag
  • @desc Associe un ID unique au tag en cours.
  • Si $id est vide (égale à "" ou à null) alors la propriété est supprimée.
    • /
public function id($id) { if($id != "" && !is_null($id)) { $this->m_id = $id; return $this->modifyProperty("id&=".$id); } else { $this->m_id = null; return $this->delProperty("id"); } } /**
  • @return CTag
  • @desc Associe un titre au tag en cours, affiche une description dans une bulle.
  • Si $title est vide (égale à "") alors la propriété est supprimée.
    • /
public function title($title) { if($title != "" ) { return $this->modifyProperty("title&=".$title); } else { return $this->delProperty("title"); } } /**
  • @return CTag
  • @desc Associe un nom au tag en cours.
  • Si $name est vide (égale à "") alors la propriété est supprimée.
    • /
public function name($name) { if($name != "" ) { return $this->modifyProperty("name&=".$name); } else { return $this->delProperty("name"); } } /**
  • @return Array
  • @desc renvoie le tableau de propriété (CProperty) de l'instance en cours.
    • /
public function getPropertiesArray() { return $this->m_properties; } /**
  • @return String
  • @desc renvoie le texte du dernier tag imbriqué dans le tag en cours. <tag><tag1>... texte </tag1></tag>
    • /
public function getTxt() { return $this->getLastTag()->getTxt_r(); } /**
  • @return String
  • @desc renvoie le texte du tag en cours. <tag> texte </tag>
    • /
protected function getTxt_r() { return $this->m_text; } /**
  • @return CTag
  • @desc Efface le texte du dernier tag imbriqué dans le tag en cours.
    • /
public function delTxt() { return $this->getLastTag()->delTxt_r(); } /**
  • @return CTag
  • @desc Efface le texte du tag.
    • /
protected function delTxt_r() { return $this->setTxt_r(""); } /**
  • @return CTag
  • @desc renvoie le tag à la position $i en cours.
  • $i doit etre compris entre 1 et la taille du tableau de tag du tag en cours (inclus).
    • /
public function getTag($i) { if($i > $this->getTagNbr()) { return null; } else { return $this->m_tags[$i-1]; } } /**
  • @return integer
  • @desc renvoie le nombre de tag imbriqué dans le tag en cours.
    • /
public function getTagNbr() { return sizeof($this->m_tags); } /**
  • @return String
  • @desc renvoie les propriétés du tag en cours.
    • /
public function getProperties() { $properties = ""; for($i=0;$i<sizeof($this->m_properties);$i++) { $properties = $properties.$this->m_properties[$i]->__tostring(); } return $properties; } /**
  • @return String
  • @desc renvoie le type du tag en cours. <type> ... </type>
    • /
public function getType() { return $this->m_type; } /**
  • @return String
  • @desc renvoie l'ID du tag en cours. <tag id="..."> ... </tag>
    • /
public function getID() { return $this->m_id; } /**
  • @return CTag
  • @desc renvoie le tag de type $type imbriqué dans le tag en cours. <type> ... </type>
    • /
public function ifTagExists($type) { $b=null; for ($j=0;$j<$this->getTagNbr();$j++) { if(strtolower($this->m_tags[$j]->getType()) == strtolower($type)) { $b = $this->m_tags[$j]->ifTagExists($type); if($b == null) { $b = $this->m_tags[$j]; } } else { $b = $this->m_tags[$j]->ifTagExists($type); } } if($b!=null) { return $b; } else { return null; } } /**
  • @return CTag
  • @desc remplace le texte du dernier tag imbriqué dans le tag en cours par $txt.
    • /
public function setTxt($txt) { return $this->getLastTag()->setTxt_r($txt); } /**
  • @return CTag
  • @desc remplace le texte de l'instance de tag en cours par $txt.
    • /
protected function setTxt_r($txt) { $this->m_text = $txt; return $this; } /**
  • @return CTag
  • @desc modifie le type de l'instance en cours par $type.
  • $type doit être un tag HTML.
    • /
public function setType($type) { $this->m_type = strtolower($type); return $this; } /**
  • @return CTag
  • @desc
  • ex: $arg = "align&=center&&size&=+3 ..."
  • ajoute les propriétés avec leur valeur, séparé par && les valeurs étant associés à la propriétés par le symbole "&=", données par $arg de l'instance de tag en cours.
  • Ne vérifie pas si les propriétés existent deja.
  • $arg est de type string.
    • /
public function addProperty($arg) { if($arg != "") { $temp = split("&&", $arg); $min = sizeof($this->m_properties); $max = sizeof($temp) + $min; for ($i=$min;$i<$max;$i++) { list($name,$value) = split("&=",$temp[$i-$min]); $this->m_properties[$i] = new CProperty($name,$value); } return $this; } } /**
  • @return CTag
  • @desc
  • ex: $arg = "align&=right&&size&=+2"; liste de quelques propriétés avec leur valeur, séparé par &&, les valeurs étant associés à la propriétés par le symbole "&=", parmis celles insérées dans le tag en cours
  • modifie les propriétés données par $arg de l'instance de tag en cours
  • si une des propriétés n'existe pas, elle est ajoutée.
  • $arg est de type string.
    • /
public function modifyProperty($arg) { $temp = split("&&", $arg); for ($i=0;$i<sizeof($temp);$i++) { $wit = 1; list($name,$value) = split("&=",$temp[$i]); for ($j=0;$j<sizeof($this->m_properties);$j++) { if($this->m_properties[$j]->getName() == strtolower($name)) { $this->m_properties[$j]->setValue($value); $wit = 0; } } if($wit) { $this->addProperty($temp[$i]); } } return $this; } /**
  • @return CTag
  • @desc
  • ex: $arg = "align size ..."; liste de nom, séparé par un espace, de quelques propriétés parmis celles insérées dans le tag en cours
  • efface les propriétés données par $arg de l'instance de tag en cours
  • $arg est de type string.
    • /
public function delProperty($arg) { $temp = split(" ", $arg); for ($i=0;$i<sizeof($temp);$i++) { for ($j=0;$j<sizeof($this->m_properties);$j++) { if($this->m_properties[$j]->getName() == strtolower($temp[$i])) { //on efface la propriétés unset($this->m_properties[$j]); //on réindexe le tableau $this->m_properties = array_values($this->m_properties); break; } } } return $this; } /**
  • @return CTag
  • @desc Insére le tag $tag à la position $i dans le tableau de tag du tag en cours.
  • $i doit etre compris entre 1 et la taille du tableau (inclus).
  • $i est du type integer.
  • Renvoie le tag inséré.
    • /
protected function insertTagAt($tag,$i) { $temp = array($tag); if( $i <= $this->getTagNbr() && $i > 0) { $start = array_slice($this->getTagArray(),0,$i-1); $end = array_slice($this->getTagArray(),$i-1); $this->setTagArray(array_values(array_merge($start,array_merge($temp,$end)))); return $tag; } elseif($i==1) { $this->addTag($tag); return $tag; } else { return null; } } public function addTag($tag) { if($tag instanceof CTag ) { return $this->insertTag_r(array($tag)); } else return null; } /**
  • @return CTag
  • @desc
  • $tag est de type array,i.e. un tableau d'objet de classe CTag
  • insére les tags du tableau $tag à la fin tableau de tag de l'instance en cours
    • /
protected function insertTag_r($tag) { $min = $this->getTagNbr(); $max = sizeof($tag) + $min; for ($i=$min;$i<$max;$i++) { $this->m_tags[$i] = $tag[$i-$min]; } return $this; } /**
  • @return CTag
  • @desc ex: $tag est de type array,i.e. un tableau d'objet de classe CTag
  • Imbrique le premier tag du tableau $tag dans le dernier element du tableau de tag de l'instance en cours.
  • Les autres tags de $tag sont imbriqués dans le premier tag du tableau $tag.
  • Le texte du tag du plus bas niveau est remplacé par celui du tag du plus au niveau,
  • les texte des autres tags et celui du plus haut niveau sont effacés.
    • /
public function insertTag($tag) { if($this->getTagNbr() == 0) { $this->m_tags[0] = $tag[0]; $this->m_tags[0]->setTxt_r($this->getTxt_r()); $this->delTxt_r(); } else if ($this->getTagNbr() > 0) { $this->m_tags[$this->getTagNbr() - 1]->insertTag_r(array($tag[0])); $tag[0]->setTxt_r($this->m_tags[$this->getTagNbr() - 1]->getTxt_r()); $this->m_tags[$this->getTagNbr() - 1]->delTxt_r(); } for($i=1;$i<sizeof($tag);$i++) { $tag[$i-1]->insertTag_r(array($tag[$i])); $tag[$i]->setTxt_r($tag[$i-1]->getTxt_r()); $tag[$i-1]->delTxt_r(); } return $this; } /**
  • @return CTag
  • @desc Efface le tag à la position $i dans le tableau de tag du tag en cours.
  • $i doit etre compris entre 1 et la taille du tableau (inclus).
  • $i est du type integer.
  • Renvoie le tag en cours.
    • /
public function delTagAt($i) { if($i > $this->getTagNbr()) { return null; } else { unset($this->m_tags[$i-1]); return $this->setTagArray(array_values($this->getTagArray())); } } /**
  • @return CTag
  • @desc ex: $type = "td tr p font center"; liste de quelques tags parmis ceux insérés dans le tag en cours.
  • Efface uniquement le tag voulu (pas ceux imbriqués).
    • /
public function delTag($type) { $temp = split(" ", $type); for ($i=0;$i<sizeof($temp);$i++) { for ($j=0;$j<$this->getTagNbr();$j++) { if($this->m_tags[$j]->getType() == strtolower($temp[$i])) { $this->m_tags[$j]->delTag(strtolower($temp[$i])); //on récupère le texte du tag qui va être effacé if($j != 0 ) { $this->m_tags[$j-1]->setTxt_r($this->m_tags[$j]->getTxt_r()); } else { $this->setTxt_r($this->m_tags[$j]->getTxt_r()); } //on récupère les tags imbriqués $this->insertTag_r($this->m_tags[$j]->getTagArray()); //on efface le tag unset($this->m_tags[$j]); //on réindexe le tableau des tags $this->m_tags = array_values($this->m_tags); //et on recommence. } else { $this->m_tags[$j]->delTag(strtolower($temp[$i])); } } } return $this; } /**
  • @return CTag
  • @desc
  • ex: $type = "td tr p font center"; liste de quelques tags parmis ceux insérés dans le tag en cours
  • Efface le tag plus tous ceux qui lui sont imbriqués.
  • Attention le text n'est pas récupéré!!
    • /
public function delTag_r($type) { $temp = split(" ", $type); for ($i=0;$i<sizeof($temp);$i++) { for ($j=0;$j<$this->getTagNbr();$j++) { if($this->m_tags[$j]->getTagType() == strtolower($temp[$i])) { //on efface le tag unset($this->m_tags[$j]); //on réindexe le tableau des tags $this->m_tags = array_values($this->m_tags); } else { $this->m_tags[$j]->delTag_r(strtolower($temp[$i])); } } } return $this; } /**
  • @return void
  • @desc destructeur
  • /
public function __destruct() { unset( $this->m_properties ); unset( $this->m_tags ); unset( $this->m_text ); unset( $this->m_type ); unset( $this->m_decalage ); unset( $this->m_DispNbr ); parent::__destruct(); } /**
  • @return CTag
  • @desc Met le texte du tag en cours en Gras.
    • /
public function txtBold() { $this->delTag("b"); $this->getLastTag()->insertTag(array(new CTag("b",$this->getTxt(),""))); return $this; } /**
  • @return CTag
  • @desc Met le texte du tag en cours en Italique.
    • /
public function txtItalic() { $this->delTag("i"); $this->delTag("em"); $this->delTag("class"); $this->delProperty("class style"); $this->getLastTag()->insertTag(array(new CTag("i",$this->getTxt(),""))); return $this; } /**
  • @return CTag
  • @desc Met le texte du tag en cours en Souligné.
    • /
public function txtUnder() { $this->delTag("u"); $this->getLastTag()->insertTag(array(new CTag("u",$this->getTxt(),""))); return $this; } /**
  • @return CTag
  • @desc Met le texte du tag en cours en Barré.
    • /
public function txtStrike() { $this->delTag("strike"); $this->getLastTag()->insertTag(array(new CTag("strike",$this->getTxt(),""))); return $this; } /**
  • @return CTag
  • @desc Initialise la mise en forme du texte du tag en cours.
    • /
public function initStyle() { $this->delTag("b"); $this->delTag("i"); $this->delTag("u"); $this->delTag("strike"); $this->delTag("font"); return $this; } /**
  • @return CTag
  • @desc Initialise la mise en forme du texte du tag en cours.
    • /
public function delTxtBold() { $this->delTag("b"); return $this; } /**
  • @return CTag
  • @desc Initialise la mise en forme du texte du tag en cours.
    • /
public function delTxtStrike() { $this->delTag("strike"); return $this; } /**
  • @return CTag
  • @desc Initialise la mise en forme du texte du tag en cours.
    • /
public function delTxtUnder() { $this->delTag("u"); return $this; } /**
  • @return CTag
  • @desc Initialise la mise en forme du texte du tag en cours.
    • /
public function delTxtItalic() { $this->delTag("i"); return $this; } /**
  • @return CTag
  • @desc Initialise la mise en forme du texte du tag en cours.
    • /
public function delTxtColor() { $f = $this->ifTagExists("font"); if($f != null) { $f->rmColor(); } return $this; } /**
  • @return CTag
  • @desc Initialise la mise en forme du texte du tag en cours.
    • /
public function delTxtPolice() { $f = $this->ifTagExists("font"); if($f != null) { $f->rmPolice(); } return $this; } /**
  • @return CTag
  • @desc Initialise la mise en forme du texte du tag en cours.
    • /
public function delTxtSize() { $f = $this->ifTagExists("font"); if($f != null) { $f->rmSize(); } return $this; } /**
  • @return CTag
  • @desc Insére un label asssocié à l'ID du tag en cours.
    • /
public function addLabel($label) { if($label != null && $label != "" && $this->getID()!= null) { return $this->addTag(new CLabel($label,$this->getID())); } else { return null; } } /**
  • @return CTag
  • @desc Met le texte du tag à la taille précisée $size.
    • /
public function txtSize($size) { $f = $this->ifTagExists("font"); if($f != null) { $f->size($size); } else { $this->getLastTag()->insertTag((array(new CFont($this->getTxt(),"size&=".strtolower($size))))); } return $this; } /**
  • @return CTag
  • @desc Met la couleur du texte du tag à la couleur précisée $color.
  • $color doit être une couleur formatée HTML.
    • /
public function txtColor($color) { $f = $this->ifTagExists("font"); if($f != null) { $f->color($color); } else { $this->getLastTag()->insertTag((array(new CFont($this->getTxt(),"color&=".$color)))); } return $this; } /**
  • @return CTag
  • @desc Met la police du texte du tag à la police précisée $face.
    • /
public function txtPolice($face) { $f = $this->ifTagExists("font"); if($f != null) { $f->police($face); } else { $this->getLastTag()->insertTag((array(new CFont($this->getTxt(),"face&=".strtolower($face))))); } return $this; } /**
  • @return CTag
  • @desc Renvoie le dernier des tags imbriqués dans le tag en cours.
    • /
protected function getLastTag() { if($this->getTagNbr()!=0) { for($i=0;$i<$this->getTagNbr();$i++) { return $this->m_tags[$i]->getLastTag(); } } else { return $this; } } /**
  • @return CTag
  • @desc Colore le fond de la zone du tag avec la couleur spécifiée.
  • Si $color=="" alors une couleur sera mise au hasard.
    • /
public function bgcolor($color) { if($color==""){ $c = new CColor(); $color=$c->randomCode(); } $this->modifyProperty("bgcolor&=".$color); return $this; } /**
  • @return CTag
  • @desc Aligne verticalement le texte en haut de la zone du tag
*
    • /
public function valignTop() { $this->modifyProperty("valign&=top"); return $this; } /**
  • @return CTag
  • @desc Empeche le texte du tag de revenir à la ligne en bout de zone du tag.
*
    • /
public function nowrap() { $this->modifyProperty("nowrap"); return $this; } /**
  • @return CTag
  • @desc Aligne verticalement le texte de la zone du tag au centre.
*
    • /
function valignMiddle() { $this->modifyProperty("valign&=middle"); return $this; } /**
  • @return CTag
  • @desc Aligne verticalement le texte de la zone du tag au bas de la ligne courante.
*
    • /
function valignBase() { $this->modifyProperty("valign&=baseline"); return $this; } /**
  • @return CTag
  • @desc Aligne verticalement le texte de la zone du tag en bas.
*
    • /
public function valignBottom() { $this->modifyProperty("valign&=bottom"); return $this; } /**
  • @return CTag
  • @desc Attribue la largeur de la zone du tag à $i pixel.
  • $i peut être de type string ou integer.
    • /
public function width_Px($i) { if($i!="" || $i != 0) $this->modifyProperty("width&=".strtolower($i)."px"); return $this; } /**
  • @return CTag
  • @desc Attribue la largeur de la zone du tag à $i pourcent du tag le contenant.
  • $i peut être de type string ou integer.
    • /
public function width_Pr($i) { if($i!="" || $i != 0) $this->modifyProperty("width&=".strtolower($i)."%"); return $this; } /**
  • @return CTag
  • @desc Attribue la hauteur de la zone du tag à $i pixel.
  • $i peut être de type string ou integer.
    • /
public function height_Px($i) { if($i!="" || $i != 0) $this->modifyProperty("height&=".strtolower($i)."px"); return $this; } /**
  • @return CTag
  • @desc Attribue la hauteur de la zone du tag à $i pourcent du tag le contenant.
  • $i peut être de type string ou integer.
    • /
public function height_Pr($i) { if($i!="" || $i != 0) $this->modifyProperty("height&=".strtolower($i)."%"); return $this; } /**
  • @return CTag
  • @desc Aligne horizontalement le texte au centre de la zone du tag
*
    • /
public function alignCenter() { $this->modifyProperty("align&=center"); return $this; } /**
  • @return CTag
  • @desc Aligne horizontalement le texte à gauche de la zone du tag
*
    • /
public function alignLeft() { $this->modifyProperty("align&=left"); return $this; } /**
  • @return CTag
  • @desc Aligne horizontalement le texte à droite de la zone du tag
*
    • /
public function alignRight() { $this->modifyProperty("align&=right"); return $this; } /**
  • @return CTag
  • @desc Justifie le texte à droite de la zone du tag
*
    • /
public function alignJustify() { $this->modifyProperty("align&=justify"); return $this; } /**
  • @return CTag
  • @desc Ajoute une bordure de taille $i a la zone du tag.
*
    • /
public function border($i) { if( $i != "" || $i>=0) $this->modifyProperty("border&=".strtolower($i)); return $this; } /**
  • @return CTag
  • @desc Met la birdure de la zone du tag à la couleur $color.
  • $color doit etre une couleur de base HTML en nom commun (pas de code Hexa).
    • /
public function bordercolor($color) { if($color!="") $this->modifyProperty("bordercolor&=".strtolower($color)); return $this; } /**
  • @return CTag
  • @desc Le lien s'ouvrira dans le cadre $tar.
  • $tar est de type String.
    • /
public function target($tar) { if($tar != "") { $this->m_target = $tar; return $this; } else return null; } /**
  • @return CTag
  • @desc Le lien s'ouvrira dans la fenetre parente.
    • /
public function targetParent() { $this->m_target = "_parent"; return $this; } /**
  • @return CTag
  • @desc Le lien s'ouvrira dans une nouvelle fenetre.
    • /
public function targetBlank() { $this->m_target = "_blank"; return $this; } /**
  • @return CTag
  • @desc Le lien s'ouvrira dans la frame principale qui contient celle du lien.
    • /
public function targetTop() { $this->m_target = "_top"; return $this; } /**
  • @return CTag
  • @desc Le lien s'ouvrira dans la meme fenetre ou frame que celle du lien.
  • (par défaut).
    • /
public function targetSelf() { $this->m_target = "_self"; return $this; } }

Conclusion :


Dans le zip toutes les classes evidemment et affiché ici, un exemple d'utilisation, ainsi que les 3 classes mères de toutes les autres: CObject et CProperty et CTag.

Tous est assez bien documenté, sauf quelques exceptions, par flem je l'avoue. Mais n'hésitez pas à me demander de mieux documenter, si vraiment vous ne comprenez rien...
Pas de bogues connu, mais y en a surement car je n'utilise pas toutes les classes pour mon site. Merci de me les remonter (je sais c'est abuser de vous prendre pour des gammma testeur, mais qui ne le fait pas ici? ;) )

Ah oui petit problème, tous les documents ont pour extension "*.php5": c'est normal c'est à cause de FREE, c'était pour être sur bien qu'ils utilisaient leur moteur PHP5, de l'époque (je sais plus si aujourd'hui c'est encore d'actualité).

Bon et quand je serais vraiment très courageux je ferais un diagramme UML d'héritage et de classe, mais ça va être dur...

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

Messages postés
9433
Date d'inscription
mardi 9 octobre 2001
Statut
Membre
Dernière intervention
13 avril 2007
8
"Antho => ça n'avait aucun rapport avec le code, d'une part"

C'est ton point de vue que je ne partage pas... j'ai de toute façon tout sauvegardé, mais bon c'est aussi une question de principe...
Messages postés
1406
Date d'inscription
mercredi 17 août 2005
Statut
Membre
Dernière intervention
28 août 2007
7
Nifhell : Tu t'es fait plaisir dans la mise en pratique "grande echelle" de la POO... Et c'est bien là l'essentiel ;) Mais le pire de tout est que ton jeu de classe marche ! Ton travail n'est donc pas vain, loin sans faut.
Messages postés
48
Date d'inscription
mardi 17 février 2004
Statut
Membre
Dernière intervention
23 avril 2006

L'idée de dérivé DOM est pas mal, même plutot efficace, et c'est vrai que je me suis bien pris le chou pour pas grand chose, sur ce code... mais son interet pour moi n'en est pas moins diminué: ça m'a permi de mettre en application pas mal de choses.

J'avoue que j'ai dérivé quelques peu au PFPMDJR (Pas Fait Par Moi, Donc Je Recommence), j'ai même pas cherché l'existance de classes à hériter, ce qui est plutot nul d'un mec qui se dit adepte de la POO :$
Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
21
Que ce soit un mec d'ici ou pas, ça ne change pas grand chose. Je crois qu'on peut tous être d'accord pour dire que ce n'est pas un langage approprié quand on écrit sur un forum. Après, en privé, sur msn ou autre, tu dis ce que tu veux de qui tu veux :-)
Mais pas sur un forum, c'est tout.
Et comme je ne peux que supprimer tout un message...j'ai tout supprimé.
Donc je te propose de réécrire ton message, en n'en gardant que la substantifique moelle... :-)
Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
36
imbécil restait un terme parfaitement neutre... (pour ceux qui n'ont pas eu le temps de lire mon topic, il ne s'agissait pas de qqn d'ici...)

Bon, je faisais aussi un parallèle interressant entre ce code et la manière de créer une interface en gtk.
Afficher les 22 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.