Salut, je me pose une grande question pour mon plugin. Pour ceux qui ont utilisé mon mod, il affiche en bas de la page thumbnail un formulaire pour choisir les différentes options. J'essai de reproduire le même comportement mais en utilisant le principe de la barre de menu. Malheureusement je ne sais pas trop comment faire. Pour le moment j'en suis là :
function category_default() { global $user, $template; //$me = get_plugin_data($plugin_id); if($user['id'] <> 2) { // Intégration du formulaire sous les images $template->set_filenames( array('DownloadMulti_category' => dirname(__FILE__).'/template/DmCategory.tpl') ); $template->assign_var_from_handle('DmCategory', 'DownloadMulti_category'); } }
Et je l'appel par add_event_handler('loc_end_index_thumbnails', array(&$obj, 'category_default') );. J'avoue être un peu largué :(
Dernière modification par flipflip (2007-04-05 09:53:23)
Hors ligne
T'as bien vu que l'interaction entre plugins et le systeme de templates est le point faible du systeme de plugins.
3 solutions:
a. l'utilisateur doit lui meme rajouter {DmCategory} quelque part dans le template
b. j'ai rajoute dans index.tpl 2 variables generiques: PLUGIN_INDEX_CONTENT_BEGIN et PLUGIN_INDEX_CONTENT_END. Ceci est sous svn, mais je croix que je l'ai fait apres la RC1. Donc a la place de assign_var_from_handle , tu devrais avoir
$dm_html = $template->parse('DownloadMulti_category', true); $template->concat_var('PLUGIN_INDEX_CONTENT_END', $dm_html);
Le concat_var est a utiliser a la place de assign_var de sorte que tous les plugins puissent ajouter leur contenu.
c. Tu fais un $template->concat_var('THUMBNAILS', $dm_html); a la fin (sur l'evenement loc_end_index).
Hors ligne
Salut, alors la solution a. ne convient pas avec la nouvelle logique qui est de ne plus toucher au noyau PhpWebGallery, la b. ne me convient pas car je suis en rc1 et je n'ai pas mis à jour par rapport au svn donc reste la solution c. Pour ceux que ça intéresse voila comment j'ai codé le bazar.
function category_default() { global $user, $template; //$me = get_plugin_data($plugin_id); if($user['id'] <> 2) { // Intégration du formulaire sous les images $template->set_filenames( array('DownloadMulti_category' => dirname(__FILE__).'/template/DmCategory.tpl') ); // Juste pour tester l'affichage $template->assign_var('DOWNLOADMULTI_TEST', 'toto'); $dm_html = $template->parse('DownloadMulti_category', true); $template->concat_var('THUMBNAILS', $dm_html); }
Je l'appel depuis le fichier main.inc.php par add_event_handler('loc_end_index', array(&$obj, 'category_default') ); et dans mon fichier template j'ai juste mis {DOWNLOADMULTI_TEST}.
Voila c'est tout, merci rvelices. J'adapterais pour la rc2.
Hors ligne
Au contraire il y aurais peut être comme un problème. Si j'utlise loc_end_index le template s'affiche sur toute les pages alors que moi je le veux uniquement lorsqu'un visiteur est dans une catégorie. Pour cela il y a loc_end_index_thumbnails mais rien ne ce passe.
Hors ligne
rvelices a écrit:
j'ai rajoute dans index.tpl 2 variables generiques: PLUGIN_INDEX_CONTENT_BEGIN et PLUGIN_INDEX_CONTENT_END. .
Merci Rvelices
Si PLUGIN_INDEX_CONTENT_BEGIN est juste aprés {MENUBAR}
Cela devrait résoudre mon souci pour l'affichage de l'édito.
Je ferai des tests avec la RC2
Hors ligne
C'est une avancée de la RC2, mais ...
Je n'arrive pas à reproduire ma présentation
La variable est positionnée ainsi (après la fin de titre page)
</div> <!-- titrePage -->
{PLUGIN_INDEX_CONTENT_BEGIN}
<!-- BEGIN calendar -->
Je l'attendais ici;
{MENUBAR}
<div id="content">
{PLUGIN_INDEX_CONTENT_BEGIN}, pour gérer les éditos sur la 1° page avant <h2>{TITLE}</h2>
Peut on avoir le beurre et l'argent du beurre ?
Hors ligne
OK, no problem.
J’adapterai mon fichier TPL.
Hors ligne
Je reviens sur le sujet. Je suis passé en RC2 et j'ai essayé de modifier mon code. Il ressemble à ça :
function category_default() { global $user, $template, $conf, $prefixeTable, $page, $lang; if($user['id'] <> 2) { // Intégration du formulaire sous les images $template->set_filenames( array('DownloadMulti_category' => dirname(__FILE__).'/template/DmCategory.tpl') ); $dm_html = $template->parse('DownloadMulti_category', true); // Récupération du groupe utilisateur autorisé à télécharger les images $query = ' SELECT group_id FROM '.USER_GROUP_TABLE.' WHERE user_id = '.$user['id'].' ;'; $result = pwg_query($query); ... // Gestion du template $template->concat_var('PlUGIN_INDEX_CONTENT_END', $dm_html); }
Ensuite je l'appel depuis le main.inc.php avec :
add_event_handler('loc_begin_index_thumbnails', array(&$DlMulti, 'category_default') );
Malheureusement rien ne s'affiche sur aucune page et je n'ai aucune erreur de chargement. Alors que si je fais un truc malpropre :
function category_default() { global $user, $template, $conf, $prefixeTable, $page, $lang; if($user['id'] <> 2) { echo $user['id']; <--- PAS PROPRE // Intégration du formulaire sous les images $template->set_filenames( array('DownloadMulti_category' => dirname(__FILE__).'/template/DmCategory.tpl') ); $dm_html = $template->parse('DownloadMulti_category', true);
J'ai bien une réaction, ça m'affiche bien l'identifiant de l'utilisateur avec bien sur une belle erreur de header mais c'est normal.
Dernière modification par flipflip (2007-05-03 17:54:15)
Hors ligne
J'ai fait un var_dump($dm_html) et j'obtient ça :
string(41) "<div id="download"> <h2></h2> </div> "
Ca correspond bien avec mon fichier DmCategory.tpl mais il manque tout ce qui est au milieu :
<div id="download"> <h2>{DlMulti_TITLE}</h2> <!-- BEGIN form --> <fieldset id="field_1"> <legend>{lang:dl_legend_select}</legend> <input name="mode" type="radio" value="{form.INPUT_VALUE_THUMBNAIL}" checked="checked" />{lang:dl_thumbnail}<br /> <input name="mode" type="radio" value="{form.INPUT_VALUE_NORMAL}" />{lang:dl_normal}<br /> <!-- BEGIN high --> <input name="mode" type="radio" value="{form.high.INPUT_VALUE_HIGH}" />{lang:dl_high}<br /> <!-- END high --> <span> <input name="all" type="button" value="{lang:dl_select_all}" OnClick="cocher('dl');" /> <input name="reset" type="reset" value="{lang:dl_uncheck}" /> <input name="select" type="submit" value="{lang:dl_select}" /> </span> </fieldset> </form> <fieldset id="field_2"> <legend>{lang:dl_title}</legend> <form action="./plugins/download_multi/preview.php" method="post"> <input name="preview" type="submit" value="{lang:dl_preview}" /> </form> <form action="./plugins/download_multi/panier.php?src=name" method="post"> <input name="submit" type="submit" value="{lang:dl_start}" /> </form> </fieldset> <!-- END form --> <!-- BEGIN check --> <div class="infos"> {lang:dl_message_01}{thumbnails.download.check.NB}{lang:dl_message_02}<br /> {lang:dl_message_03} <form action="./modules/download_multi/index.php?act=del_cart&cat={thumbnails.download.check.U_CAT}" method="post"> <input name="trash" type="submit" value="{lang:dl_trash}" /> </form> </div> <!-- END check --> </div>
Voici ma fonction :
// Affichage du formulaire sous les vignettes function category_default() { global $user, $template, $conf, $prefixeTable, $page, $lang; if($user['id'] <> 2) { // Intégration du formulaire sous les images $template->set_filenames( array('DownloadMulti_category' => dirname(__FILE__).'/template/DmCategory.tpl') ); $dm_html = $template->parse('DownloadMulti_category', true); // Récupération du groupe utilisateur autorisé à télécharger les images $query = ' SELECT group_id FROM '.USER_GROUP_TABLE.' WHERE user_id = '.$user['id'].' ;'; $result = pwg_query($query); while($row = mysql_fetch_array($result)) { // Compare le groupe de l'utilisateur avec le groupe // authorisé à télécharger if ( $row['group_id'] == $this->my_config['group_id'] ) { $redirect_to = isset($_POST['redirect']) ? $_POST['redirect'] : ''; // Titre du bloc en bas de la des vignettes $template->assign_var('DlMulti_TITLE',$lang['dl_title']); // Compte le nombre de lignes pour le visiteur $query = ' SELECT COUNT(*) AS nb_line FROM '.$prefixeTable.'download_multi WHERE id_user = '.$user['id'].' ;'; $row = mysql_fetch_array(pwg_query($query)); // Si le nombre de lignes est supérieur à 0 // alors on affiche le message d'avertissement // utilisateur if ($row['nb_line'] > 0) { $template->assign_block_vars('check', array('NB' => $row['nb_line'], 'U_CAT' => duplicate_index_URL() ) ); } // Si la page de départ est une catégorie // on gère l'affichage ou non du téléchargement // des images hautes définitions if (isset($page['category']['name'])) { // Sélection du répetoire de base pour la // catégorie en cours de visite // Permet de contréler la prÚsence du // répertoire pwg_high // si il y est présent alors on affiche la // possibilité de télécharger les images // hautes définitions $query1 = ' SELECT dir FROM '.CATEGORIES_TABLE.' WHERE id = '.$page['category']['id'].' ;'; $row1 = mysql_fetch_array(pwg_query($query1)); $template->assign_block_vars('form', array( 'INPUT_VALUE_NORMAL' => 'normal', 'INPUT_VALUE_THUMBNAIL' => 'thumbnail', 'U_CAT' => duplicate_index_URL(), ) ); // Si il n'y a aucun images en hautes dÚfinitions // ou l'utilisateur n'a pas le droit aux hautes définitions // alors la ligne de téléchargement des hautes définitions // ne s'affiche pas if(is_dir(PHPWG_ROOT_PATH.'/galleries/'.$row1['dir'].'/pwg_high') and ($user['enabled_high'] == 'true')) { $template->assign_block_vars('form.high', array( 'INPUT_VALUE_HIGH' => 'high', ) ); } } else { $template->assign_block_vars('form', array( 'INPUT_VALUE_NORMAL' => 'normal', 'INPUT_VALUE_THUMBNAIL' => 'thumbnail', 'U_CAT' => duplicate_index_URL(), ) ); // Si l'utilisateur n'a droit aux hautes définitions // la possibilité de télécharger les hautes définitions // s'affiche if($user['enabled_high'] == 'true') { $template->assign_block_vars('form.high', array( 'INPUT_VALUE_HIGH' => 'high', ) ); } } } } // Gestion du template $template->concat_var('PlUGIN_INDEX_CONTENT_END', $dm_html); } }
Dernière modification par flipflip (2007-05-04 09:42:13)
Hors ligne
Je pense que tu dois mettre la ligne
$dm_html = $template->parse('DownloadMulti_category', true);
juste avant concat_var ...
dans ton cas ca ne sert a rien le assign_block_vars apres avoir fait le parse ...
Hors ligne
Effectivement si je parse avant d'avoir fait quoi que ce soit c'est pas top. Au contraire j'ai fait ce que tu m'a dit mais je n'ai toujours pas d'affichage alors que si je refais mon var_dump($dm_html) tout s'affiche même les valeurs de template que j'ai définis dans ma fonction.
Hors ligne