tosca a écrit:
C'est quoi une "couche de persistance" ?
La couche de persistance dans PWG c'est la base de donnée.
Pour plus d'informations, consulter dans Wikipédia les articles sur le Modèle-Vue-Contrôleur (MVC) et sur l'architure trois tiers
Bonjour,
J'avais approximativement compris comment on instancie les données dans le .php et le .tpl
Ta démonstration est faite avec un seul niveau de variable en affectant directement les valeurs aux variables de 'bloc'.
Quand je lis picture.php je tombe sur ce genre de code :
$template->assign_block_vars( $which_image, array( 'TITLE_IMG' => $picture[$which_image]['name'], 'IMG' => $picture[$which_image]['thumbnail'], 'U_IMG' => $picture[$which_image]['url'], 'U_IMG_SRC' => $picture[$which_image]['src'] ) );
Si j'ai bien compris, $picture est un bloc et 'name' une variable de ce bloc.
Quelles sont les autres variable du bloc $picture ?
Où le bloc $picture a-t-il été instancié ?
D'après ce que tu dis de l'organisation du code
z0rglub a écrit:
Dans les fichiers PHP comme picture.php, tu trouveras des requêtes SQL.
On trouve les requêtes SQL dans des variables $query, le résultat de la requête est reversé dans un $result (via la fonction pwg_query) ce résultat étant transformé (a priori partiellement) en un bloc utilisé dans un .tpl
Donc en gros, pour reconstituer le contenu d'un bloc, je dois remonter à la transformations du résultat de la requête SQL en un bloc de variable utilisable dans .tpl (pour avoir la liste des variables disponibles dans le bloc $result, je dois analyser la requête)...
Ai-je enfin compris ?
Donc pour rescencer toutes les données disponibles/utilisables dans un .tpl, il y a du boulot d'analyse !
Guy_M a écrit:
L'ensemble des données utilisée par PWG sont contenues dans les tables (couche de persistance). Elles sont chargées dans des objets qui sont ensuite utilisés par les templates.
Non. PhpWebGallery ne suit pas le sacrosaint modèle MVC. Dans les fichiers PHP comme picture.php, tu trouveras des requêtes SQL.
Pour ce qui concerne le template, en lisant les fichiers *.tpl, tu y trouveras des blocs :
<!-- BEGIN foo --> {foo.BAR1} : {foo.BAR2} <!-- END foo -->
... est le bloc "foo" contenant 2 variable BAR1 et BAR2. Les blocs du template sont instanciables N fois de 0 à +infini. Dans le code PHP, on instancie le bloc de la façon suivante :
$template->assign_block_vars( 'foo', array( 'BAR1' => 'Salut', 'BAR2' => 'Guy_M', ) );
Est-ce que ce début d'explication commence à repondre à ta question ?
Voici un petit bout de code qui peux aider, dans le fichier include/template.php modifier la méthode p() comme ci-dessous :
function p() { echo $this->output; echo "<hr><pre>".htmlspecialchars(print_r($this->_tpldata, true))."</pre>"; }
Ca permet d'avoir à la fin de chaque page, un "dump" des tableaux utilisés par le moteur de template. (pas toujours très lisible c'est vrai)
C'est quoi une "couche de persistance" ?
Bonjour,
A la demande générale, je créé 1 sujet qui permettra des répondre à une des questions posées lors de la discussion "Comment faire pour que j'arrête de vous casser les pieds......." plus précisément là.
L'ensemble des données utilisée par PWG sont contenues dans les tables (couche de persistance). Elles sont chargées dans des objets qui sont ensuite utilisés par les templates.
La structure de la couche de persisitance est décrite ici : Structure de la base 1.6. Dans la documentation, il manque une description de la la structure des objets. Cette description est importante pour pouvoir personaliser, adapter ou étendre PWG (créer des template, plugin ou MOD) car c'est sur elle que s'appuie le système de templates. Quelle est la structure de données de ces objets ?
J'ai essayé de fouiller mais j'ai eu beaucoup de mal : par exemple dans picture.tpl on voit qu'on a des objets first, previous, next, last faisant partie de la même classe d'objects (qui après analyse se révèle être membres d'un array et basé sur un objet picture qui obtient ses informations d'une fonction 'get_thumbnail_src' et là je me suis perdu). Pour comprendre cette structure de données, il y a besoin d'explorer beaucoup de code.