Page->get(), set(), parent(), url(). On peut maintenant naviguer à 100% (via le code) dans les différentes pages.

Il manque juste la création des enfants...
This commit is contained in:
Georges Dupéron 2010-10-13 19:42:11 +02:00
parent a53de8845b
commit fca8e1f7f1
6 changed files with 95 additions and 26 deletions

View File

@ -44,7 +44,7 @@ class BDD {
self::unbuf_query("create database if not exists " . Config::get('db_base'));
mysql_select_db(Config::get('db_base'), self::$handle) or Debug::sqlerror();
if (count(self::select("show tables like '" . self::table("pages") . "'"))) {
if (count(self::select("show tables like '" . self::table("pages") . "'")) == 1) {
Debug::info("La base de données est déjà initialisée, on continue...");
return;
}
@ -111,12 +111,25 @@ class BDD {
debug::info("sql : " . $q);
$qres = mysql_query($q, BDD::get()) or Debug::sqlerror();
$ret = array();
while ($row = mysql_fetch_assoc($qres)) {
while ($row = mysql_fetch_array($qres)) {
$ret[] = $row;
}
return $ret;
}
// Select avec une seule colonne et un seul rang.
public static function select_one($q, $strict = true) {
$res = self::select($q);
if ($strict && count($res) != 1) {
Debug::error("Un rang de la base de données a été demmandé, mais, soit aucun rang correspondant aux critères n'a été trouvé, soit plusieurs ont été trouvés.");
return null;
}
if (count($res) == 0) {
Debug::error("Un rang de la base de données a été demmandé, mais, aucun rang correspondant aux critères n'a été trouvé.");
}
return $res[0][0];
}
public static function modify($q) {
debug::info("sql : $q;");
mysql_unbuffered_query($q . ";", self::get()) or Debug::sqlerror();
@ -135,4 +148,27 @@ class BDD {
}
}
class BDDCell {
private $uid_page;
private $propriete;
private $valeur;
public function __construct($uid_page, $propriete, $valeur) {
$this->uid_page = $uid_page;
$this->propriete = $propriete;
$this->valeur = $valeur;
}
public function uid_page() {
return $this->uid_page;
}
public function propriete() {
return $this->propriete;
}
public function valeur() {
return $this->valeur;
}
public function __toString() {
return "".$this->valeur;
}
}
?>

View File

@ -9,7 +9,10 @@ class Config {
private static $config = array();
public static function get($nom) {
if (!isset(self::$config[$nom])) return null;
if (!isset(self::$config[$nom])) {
echo "Variable de configuration manquante : $nom"; // TODO : Debug::erreur ?
die();
}
return self::$config[$nom];
}

View File

@ -1,5 +1,11 @@
<?php
function verifications() {
// url_base doit toujours se terminer par '/'.
Config::set('url_base', preg_replace("|/*$|", "/", Config::get('url_base'), 1));
}
verifications();
function main() {
echo "<pre>";
initModules();

View File

@ -136,6 +136,10 @@ class Page {
attribut("type", "text_no_space", "mSiteIndex");
}
public static function est_propriete_globale($prop) {
return in_array($prop, self::$attributs_globaux);
}
public function nom_module() {
return get_class($this);
}
@ -161,10 +165,20 @@ class Page {
return call_user_func(array($this, "res_" . $res), $d);
}
public function url($ressource = null) {
public function url($ressource = null, $uid_racine = null) {
// Renvoie toute l'url (de la ressource principale ou de $ressource).
niy("url");
return "";
if ($uid_racine === null) {
$uid_racine = self::page_systeme("racine")->uid();
}
if ($ressource === null) {
if ($uid_racine == $this->uid()) {
return Config::get("url_base");
} else {
return $this->parent()->url(null, $uid_racine) . $this->composant_url . '/';
}
} else {
return $this->url(null, $uid_racine) . "?res=" . urlencode($ressource); // TODO : urlencode ?
}
}
public function composant_url() {
@ -178,6 +192,14 @@ class Page {
return $this->uid;
}
public function parent() {
return self::page_uid(
BDD::select_one(
"select uid_page_de from " . BDD::table("liens") . " where uid_page_vers = " . $this->uid()
)
);
}
public function enfants($condition = true, $ordre = "-date_creation", $limit = 0, $offset = 0) {
// Renvoie un objet de la classe CollectionPages.
// Si $condition === true, il n'y a pas de condition
@ -224,7 +246,6 @@ class Page {
array_push($res, self::page_uid($row["uid_page_vers"]));
}
var_dump($res);
return $res;
}
@ -242,17 +263,16 @@ class Page {
public static function page_systeme($nom) {
// select from pages where nomSysteme = $nom limit 1
niy("page_systeme");
return self::page_uid(
BDD::select_one(
"select uid_page from " . BDD::table("pages") . " where nom_systeme = '" . mysql_real_escape_string($nom) . "';"
)
);
}
public static function page_uid($uid) {
$select = "select type from " . BDD::table("pages") . " where uid_page = " . $uid . ";";
$type = BDD::select($select);
if (count($type) != 1) {
Debug::error("La page avec l'uid $uid n'a pas pu être trouvée.");
return null;
}
$type = $type[0]["type"];
$type = BDD::select_one($select);
$ret = new $type();
$ret->uid = $uid;
return $ret;
@ -299,7 +319,9 @@ class Page {
private function get_prop_direct($nom) {
// Récupère l'attribut "$nom" depuis la BDD.
niy("get direct $nom");
$select_table = (self::est_propriete_globale($nom)) ? "pages" : $this->nom_module();
$select = "select $nom from " . BDD::table($select_table) . " where uid_page = " . $this->uid() . ";";
return new BDDCell($this->uid(), $nom, BDD::select_one($select));
}
public function __set($nom, $val) {
@ -314,7 +336,9 @@ class Page {
public function set_prop_direct($nom, $val) {
// Modifie l'attribut "$nom" dans la BDD.
niy("set direct $nom = $val");
$update_table = (self::est_propriete_globale($nom)) ? "pages" : $this->nom_module();
$update = "update " . BDD::table($update_table) . " set $nom = '" . mysql_real_escape_string($val) . "' where uid_page = " . $this->uid() . ";";
BDD::unbuf_query($update);
}
public function set_composant_url() {

View File

@ -6,7 +6,6 @@
Config::set('courriel_admin', "jahvascriptmaniac+github@free.fr");
// URL de la racine du site. Ex: http://www.monsite.com/cms/
// Doit se terminer par '/'.
Config::set('url_base', "http://127.0.0.1/2010-moteur-site-simple/");
// Chemin absolu vers le dossier '__cms__'.

View File

@ -3,11 +3,11 @@
abstract class mGalerieBase extends Page {
protected static $texte_titre = "Galerie";
protected static $texte_nouvelle_page = "Nouvel élément";
protected static $icône_nouvelle_page = "nouvelle_periode.png";
protected static $icone_nouvelle_page = "nouvelle_periode.png";
protected static $type_enfants = "mGaleriePeriode";
public static function info() {
ressources_statiques("i_icône_nouvelle_page c_style");
ressources_statiques("i_icone_nouvelle_page c_style");
ressources_dynamiques("h_page h_miniature h_mini_miniature");
type_liens("enfants", self::$type_enfants);
type_liens("liens", "*");
@ -16,8 +16,8 @@ abstract class mGalerieBase extends Page {
attribut("dans_nouveautes", "bool", "true");
}
public function res_i_icône_nouvelle_page() {
return StockageFichiers::envoyer_fichier_statique(Path::combine(dirname(__FILE__), self::$icône_nouvelle_page));
public function res_i_icone_nouvelle_page() {
return StockageFichiers::envoyer_fichier_statique(Path::combine(dirname(__FILE__), self::$icone_nouvelle_page));
}
public function res_c_style() {
@ -25,14 +25,15 @@ abstract class mGalerieBase extends Page {
}
public function res_h_page($d) {
$d->w_en_tete($this->titre, "".$this->description); // En-tête standard.
$d->w_en_tete($this->titre, $this->description); // En-tête standard.
$l = $d->article()->w_liste($this->enfants(true, "-date_creation"), function($e, $li) {
$a = $li->a($e->uid());
$e->rendu("h_miniature", $a);
});
$nouveau = $l->li();
// TODO : nouveau devrait être un lien, bouton, ...
$nouveau->span("miniature")->img("", $this->url("i_icône_nouvelle_page"));
var_dump($this->url("i_icone_nouvelle_page"));
$nouveau->span("miniature")->img("", $this->url("i_icone_nouvelle_page"));
$nouveau->span("titre")->text(self::$texte_nouvelle_page);
if ($this->if_perm("W", "dans_nouveautes")) {
@ -68,21 +69,21 @@ abstract class mGalerieBase extends Page {
class mGalerieIndex extends mGalerieBase {
protected static $texte_titre = "Galerie";
protected static $texte_nouvelle_page = "Nouvelle période";
protected static $icône_nouvelle_page = "nouvelle_periode.png";
protected static $icone_nouvelle_page = "nouvelle_periode.png";
protected static $type_enfants = "mGaleriePeriode";
}
class mGaleriePeriode extends mGalerieBase {
protected static $texte_titre = "Période";
protected static $texte_nouvelle_page = "Nouvel événement";
protected static $icône_nouvelle_page = "nouvel_evenement.png";
protected static $icone_nouvelle_page = "nouvel_evenement.png";
protected static $type_enfants = "mGalerieEvenement";
}
class mGalerieEvenement extends mGalerieBase {
protected static $texte_titre = "Événement";
protected static $texte_nouvelle_page = "Nouvelle photo";
protected static $icône_nouvelle_page = "nouvelle_photo.png";
protected static $icone_nouvelle_page = "nouvelle_photo.png";
protected static $type_enfants = "mGaleriePhoto";
}