Pour reprendre ce qui a été dit dans ce fil.
Voici le plugin personnel que je vais mettre sur mon site perso.
Ce plugin personnee modifie le thème montblanc et les autres pour l'avoir à mon gout:
o Modifications principales apportées à Mont blanc:
> Image banner perso
> Icônes standards
> Miniatures 128
> Bordures des miniatures en taille fixe avec couleur au survol
> Changement du banner (mais ca vient d'un besoin perso, mon banner ne comportent pas de H1 par défaut)
> ...
o Modifications principales apportées aux autres thèmes:
> Images de fond
<?php /* Plugin Name: Love Family Personal Plugin Version: 1.0.0.0 Description: Love Family Personal Plugin Author: Ruben */ /* Suppresion une partie du code dans un template et le retourne */ /* Bout de code compris entre la chaine $str_begin et $str_end */ function personal_remove_tpl_code($tlp_handle, $str_begin, $str_end) { global $template; $template->loadfile($tlp_handle); $p_beg = strpos($template->uncompiled_code[$tlp_handle], $str_begin); $p_end = strpos($template->uncompiled_code[$tlp_handle], $str_end) + strlen($str_end); $s = substr($template->uncompiled_code[$tlp_handle], $p_beg, $p_end - $p_beg); $template->uncompiled_code[$tlp_handle] = substr_replace($template->uncompiled_code[$tlp_handle], '', $p_beg, $p_end - $p_beg); return $s; } /* Ajout une partie du code dans un template après la chaine $insert_after */ function personal_add_after_tpl_code($tlp_handle, $insert_after, $code) { global $template; $template->loadfile($tlp_handle); $template->uncompiled_code[$tlp_handle] = str_replace($insert_after, $insert_after.$code, $template->uncompiled_code[$tlp_handle]); } /* Ajout une partie du code dans un template avant la chaine $insert_before */ function personal_add_before_tpl_code($tlp_handle, $insert_before, $code) { global $template; $template->loadfile($tlp_handle); $template->uncompiled_code[$tlp_handle] = str_replace($insert_before, $code.$insert_before, $template->uncompiled_code[$tlp_handle]); } /* Remplace une partie du code par une autre dans un template */ function personal_replace_tpl_code($tlp_handle, $old, $new) { global $template; $template->loadfile($tlp_handle); $template->uncompiled_code[$tlp_handle] = str_replace($old, $new, $template->uncompiled_code[$tlp_handle]); } //add_event_handler('loc_begin_menubar', 'personal_filter_button_move'); function personal_filter_button_move() { // Recupere le bout de code des boutons filtres $s = personal_remove_tpl_code('menubar', '<!-- BEGIN start_filter -->', '<!-- END stop_filter -->'); // Ajout le bout de code des boutons filtres //personal_add_after_tpl_code('index', '<!-- END mode_created -->', ' //<li> //'.$s.' //</li> //'); // Ajout le bout de code des boutons filtres avant le bouton order // Les retours à la ligne sont nécessaire pour que le tpl fonctionne // $s doit être mis à la ligne car le code sur les même lignes que les // délimiteurs de blocs d'un template ne sont pas pris en compte par le moteur du template // Ajout de <li> necessaire et du texte language // La traduction est à ajouté dans les fichiers local.lang.php // Il existe un autre moyen d'ajouter des boutons mais cet exemple sert à montrer comment déplacer et modifier du code personal_add_before_tpl_code('index', '<!-- BEGIN preferred_image_order -->', ' <li> '.$s.' </li> '); } add_event_handler('init', 'personal_obligatory_user_mail_address'); function personal_obligatory_user_mail_address() { global $page, $template; if (in_array(script_basename(), array('register', 'profile'))) { if (isset($_POST['submit']) or isset($_POST['validate'])) { if (empty($_POST['mail_address'])) { $_POST['mail_address'] = '<A REMPLIR>'; } } } } add_event_handler('loc_end_page_header', 'personal_local_banner'); function personal_local_banner() { global $template, $user; if ($user['theme'] == 'montblanc') { $template->assign_var('PAGE_BANNER', '<h1>Love Family</h1><p>'.$template->get_var('PAGE_BANNER').'</p>'); } } add_event_handler('init', 'personal_local_css'); function personal_local_css() { global $template, $user, $page, $conf; $css = ''; if ($user['theme'] != 'montblanc') { $css .= ' BODY, #theAdminPage, #the_page { background-color: transparent !important; background-image:url(http://lovefamily.free.fr/phpwebgallery/local/LoveFamilyBackground.jpg) !important; background-attachment:fixed !important; '; } else { $template->themeconf = array_merge($template->themeconf, array( 'icon_dir' => 'template/yoga/icon', 'admin_icon_dir' => 'template/yoga/icon/admin', 'mime_icon_dir' => 'template/yoga/icon/mimetypes/', )); $W = $conf['tn_width'] + 10; $H = $conf['tn_height'] + 10; $M = $conf['tn_width'] + 10; $css .= ' #theHeader { background: transparent url(http://lovefamily.free.fr/phpwebgallery/local/LoveFamily_montblanc_header.jpg) no-repeat center bottom !important; height: 165px; } #theHeader h1 { color: #666; top: 130px; } /* Set some sizes according to your maximum thumbnail width and height */ #content UL.thumbnails SPAN, #content UL.thumbnails SPAN.wrap2, #content UL.thumbnails SPAN.wrap2 A, #content UL.thumbnails SPAN.wrap2 LABEL, #content DIV.thumbnailCategory DIV.illustration { width: '.$W.'px !important; /* max thumbnail width + 2px */ } #content UL.thumbnails SPAN.wrap2, #content DIV.thumbnailCategory DIV.description { height: '.$H.'px !important; /* max thumbnail height + 2px */ } #content DIV.comment BLOCKQUOTE { margin-left: '.$M.'px !important; /*maximum thumbnail width + ~10px */ } #content DIV.thumbnailCategory DIV.illustration img { height: auto; width: auto; } .header_notes { height: 37px !important; } #content UL.thumbnails SPAN.wrap2 img { border: none; } #content UL.thumbnails SPAN.wrap2 { border: 1px solid #aaaaaa; /* thumbnails border color and style */ border-radius: 4px 4px; /* round corners with CSS3 compliant browsers */ } #content UL.thumbnails SPAN.wrap2:hover { background-color: AntiqueWhite; color: black; } #content UL.thumbnailCategories DIV.thumbnailCategory:hover { background-color: AntiqueWhite; color: black; } #content UL.thumbnailCategories DIV.thumbnailCategory:hover A { background-color: AntiqueWhite; color: black; } '; $css .= ' #content ul.thumbnailCategories li div.thumbnailCategory .description p + p { border-top:10px solid transparent !important; '; } $template->assign_block_vars('head_element', array('CONTENT' => ' <style type="text/css"> '.$css.' </style> ')); } ?>
Sous FF pas de soucis mais en sous IE6, j'ai mes icones récents sur les miniatures qui s'allongent et je ne trouve pas la solution.
Help me! Quel petite ligne dois-je rajouter dans personal_local_css?
Le plugin est utilisable sur n'importe quelle galerie, les chemins étant complets.
Hors ligne
<h1>Love Family<h1>
et </h1> pour commencer...
8-)
Hors ligne
Je me base sur le généré...
8-)
Hors ligne
Moins grave:
perso0.free.fr/cgi-bin/wwwcount.cgi?df=lovefamily.dat&dd=C
perso0.free.fr/cgi-bin/wwwcount.cgi?df=lovefamily.dat&dd=C
<img src="local/LoveFamily.gif">
<img src="local/LoveFamily.gif" alt="Lovefamily">
<script language="javascript" src="http://ruben.demo.free.fr/phpmv/phpmyvisites.js" type="text/javascript"></script>
<noscript><p>phpMyVisites | Open source web analytics
<img src="http://ruben.demo.free.fr/phpmv/phpmyvisites.php" alt="Statistics" style="border:0" />
</p></noscript></a>
...
C'est quoi ce </a>
et ...
<marquee id=marquee1 scrollamount=5 behavior=slide loop=0>
</marquee>
ça sert encore...
8-)
Hors ligne
rub a écrit:
Le plugin est utilisable sur n'importe quelle galerie, les chemins étant complets.
Oui, il y a même l'URL complète des images...
Voulu?
8-)
Hors ligne
VDigital a écrit:
<h1>Love Family<h1>
et </h1> pour commencer...
8-)
Attention, le code de ce fil n'est pas celui de mon site! (qui a encore une ancienne version!)
H1 corrigé grace à IE qui a très mal réagi.
VDigital a écrit:
Moins grave:
perso0.free.fr/cgi-bin/wwwcount.cgi?df=lovefamily.dat&dd=C
perso0.free.fr/cgi-bin/wwwcount.cgi?df=lovefamily.dat&dd=C
<img src="local/LoveFamily.gif">
<img src="local/LoveFamily.gif" alt="Lovefamily">
<script language="javascript" src="http://ruben.demo.free.fr/phpmv/phpmyvisites.js" type="text/javascript"></script>
<noscript><p>phpMyVisites | Open source web analytics
<img src="http://ruben.demo.free.fr/phpmv/phpmyvisites.php" alt="Statistics" style="border:0" />
</p></noscript></a>
...
C'est quoi ce </a>
et ...
<marquee id=marquee1 scrollamount=5 behavior=slide loop=0>
</marquee>
ça sert encore...
8-)
Beaucoup de reste... que je n'ai pas encore nettoyé.
VDigital a écrit:
rub a écrit:
Le plugin est utilisable sur n'importe quelle galerie, les chemins étant complets.
Oui, il y a même l'URL complète des images...
Voulu?
8-)
Oui, pour faire mes tests en local et puisque c'est mon plugin personnel, ce n'est pas bien grave...
Hors ligne
VDigital a écrit:
Moins grave:
perso0.free.fr/cgi-bin/wwwcount.cgi?df=lovefamily.dat&dd=C
perso0.free.fr/cgi-bin/wwwcount.cgi?df=lovefamily.dat&dd=C
<img src="local/LoveFamily.gif">
<img src="local/LoveFamily.gif" alt="Lovefamily">
<script language="javascript" src="http://ruben.demo.free.fr/phpmv/phpmyvisites.js" type="text/javascript"></script>
<noscript><p>phpMyVisites | Open source web analytics
<img src="http://ruben.demo.free.fr/phpmv/phpmyvisites.php" alt="Statistics" style="border:0" />
</p></noscript></a>
...
C'est quoi ce </a>
et ...
<marquee id=marquee1 scrollamount=5 behavior=slide loop=0>
</marquee>
ça sert encore...
8-)
Voila corrigé...
Pour les wwwcount et les images, je les laisse pour l'instant car non visible avec le theme montblanc mais je modifierais le plugin pour.
</a> vient du code de phoMyVisit, je viens de refaire une génération de code.
Pour les marquee , un vieux reste!
Sinon, le site est up-to-date mais pas de bol pas récents (pour le moment mais bientôt)!
Hors ligne
<script language="javascript" src="http://ruben.demo.free.fr/phpmv/phpmyvisites.js" type="text/javascript"></script>
<noscript><p>phpMyVisites | Open source web analytics
<img src="http://ruben.demo.free.fr/phpmv/phpmyvisites.php" alt="Statistics" style="border:0" />
</p></noscript></a>
Je coderai plus simplement:
<script language="javascript" src="http://ruben.demo.free.fr/phpmv/phpmyvisites.js" type="text/javascript"></script>
Pourquoi? Parce que le <noscript> (qui n'est pas standard) n'apporte rien et ne fera pas prendre en compte la visite dans les stats.
Tu as un pb sur les pages d'Aide:
./popuphelp.php?page=search par exemple.
<div id="theHeader"><h1>Love Family<h1><p><h1>Aide de PhpWebGallery</h1></p></div>
Pas beau le résultat.
8-)
Hors ligne
J'ai à peu près tout corrigé, la validation du HTML, les aides (qui utilise un thème mieux adapté [clear]), j'ai mis de coté le code généré par PhpMyVisit.
Par contre, le problème d'icônes d'éléments récents n'a pas lieu sous FF2 ni IE7.
Je l'avais rencontré sous IE6 mais pas à la maison, je vérifierais donc demain. (Sinon, VDigital va nous le passer dans son site magique).
Le dernier code est le suivant:
<?php /* Plugin Name: Love Family Personal Plugin Version: 1.0.0.0 Description: Love Family Personal Plugin Author: Ruben */ /* Suppresion une partie du code dans un template et le retourne */ /* Bout de code compris entre la chaine $str_begin et $str_end */ function personal_remove_tpl_code($tlp_handle, $str_begin, $str_end) { global $template; $template->loadfile($tlp_handle); $p_beg = strpos($template->uncompiled_code[$tlp_handle], $str_begin); $p_end = strpos($template->uncompiled_code[$tlp_handle], $str_end) + strlen($str_end); $s = substr($template->uncompiled_code[$tlp_handle], $p_beg, $p_end - $p_beg); $template->uncompiled_code[$tlp_handle] = substr_replace($template->uncompiled_code[$tlp_handle], '', $p_beg, $p_end - $p_beg); return $s; } /* Ajout une partie du code dans un template après la chaine $insert_after */ function personal_add_after_tpl_code($tlp_handle, $insert_after, $code) { global $template; $template->loadfile($tlp_handle); $template->uncompiled_code[$tlp_handle] = str_replace($insert_after, $insert_after.$code, $template->uncompiled_code[$tlp_handle]); } /* Ajout une partie du code dans un template avant la chaine $insert_before */ function personal_add_before_tpl_code($tlp_handle, $insert_before, $code) { global $template; $template->loadfile($tlp_handle); $template->uncompiled_code[$tlp_handle] = str_replace($insert_before, $code.$insert_before, $template->uncompiled_code[$tlp_handle]); } /* Remplace une partie du code par une autre dans un template */ function personal_replace_tpl_code($tlp_handle, $old, $new) { global $template; $template->loadfile($tlp_handle); $template->uncompiled_code[$tlp_handle] = str_replace($old, $new, $template->uncompiled_code[$tlp_handle]); } //add_event_handler('loc_begin_menubar', 'personal_filter_button_move'); function personal_filter_button_move() { // Recupere le bout de code des boutons filtres $s = personal_remove_tpl_code('menubar', '<!-- BEGIN start_filter -->', '<!-- END stop_filter -->'); // Ajout le bout de code des boutons filtres //personal_add_after_tpl_code('index', '<!-- END mode_created -->', ' //<li> //'.$s.' //</li> //'); // Ajout le bout de code des boutons filtres avant le bouton order // Les retours à la ligne sont nécessaire pour que le tpl fonctionne // $s doit être mis à la ligne car le code sur les même lignes que les // délimiteurs de blocs d'un template ne sont pas pris en compte par le moteur du template // Ajout de <li> necessaire et du texte language // La traduction est à ajouté dans les fichiers local.lang.php // Il existe un autre moyen d'ajouter des boutons mais cet exemple sert à montrer comment déplacer et modifier du code personal_add_before_tpl_code('index', '<!-- BEGIN preferred_image_order -->', ' <li> '.$s.' </li> '); } add_event_handler('init', 'personal_obligatory_user_mail_address'); function personal_obligatory_user_mail_address() { global $page, $template; if (in_array(script_basename(), array('register', 'profile'))) { if (isset($_POST['submit']) or isset($_POST['validate'])) { if (empty($_POST['mail_address'])) { $_POST['mail_address'] = '<A REMPLIR>'; } } } } add_event_handler('user_init', 'personal_local__user_init'); function personal_local__user_init() { global $user, $conf; if (in_array(script_basename(), array('popuphelp', 'controller', 'dotclear_easy_controller'))) { $theme = $conf['default_admin_layout']; if ( !empty($theme) ) { list($user['template'], $user['theme']) = explode('/', $theme); } } } add_event_handler('loc_end_page_header', 'personal_local_banner'); function personal_local_banner() { global $template, $user; if ($user['theme'] == 'montblanc') { $template->assign_var('PAGE_BANNER', '<h1>Love Family</h1><p>'.$template->get_var('PAGE_BANNER').'</p>'); } } add_event_handler('init', 'personal_local_theme'); function personal_local_theme() { global $template, $user, $page, $conf; //$local_path=''; $local_path='http://lovefamily.free.fr/phpwebgallery/'; $css = ''; if ($user['theme'] != 'montblanc') { $css .= ' BODY, #theAdminPage, #the_page { background-color: transparent !important; background-image:url('.$local_path.'local/LoveFamilyBackground.jpg) !important; background-attachment:fixed !important; '; } else { $template->themeconf = array_merge($template->themeconf, array( 'icon_dir' => 'template/yoga/icon', 'admin_icon_dir' => 'template/yoga/icon/admin', 'mime_icon_dir' => 'template/yoga/icon/mimetypes/', )); $W = $conf['tn_width'] + 10; $H = $conf['tn_height'] + 10; $M = $conf['tn_width'] + 10; $css .= ' #theHeader { background: transparent url('.$local_path.'local/LoveFamily_montblanc_header.jpg) no-repeat center bottom !important; height: 165px; } #theHeader h1 { color: #666; top: 130px; } /* Set some sizes according to your maximum thumbnail width and height */ #content UL.thumbnails SPAN, #content UL.thumbnails SPAN.wrap2, #content UL.thumbnails SPAN.wrap2 A, #content UL.thumbnails SPAN.wrap2 LABEL, #content DIV.thumbnailCategory DIV.illustration { width: '.$W.'px !important; /* max thumbnail width + 2px */ } #content UL.thumbnails SPAN.wrap2, #content DIV.thumbnailCategory DIV.description { height: '.$H.'px !important; /* max thumbnail height + 2px */ } #content DIV.comment BLOCKQUOTE { margin-left: '.$M.'px !important; /*maximum thumbnail width + ~10px */ } #content DIV.thumbnailCategory DIV.illustration img { height: auto; width: auto; } .header_notes { height: 37px !important; } #content UL.thumbnails SPAN.wrap2 img { border: none; } #content UL.thumbnails SPAN.wrap2 { border: 1px solid #aaaaaa; /* thumbnails border color and style */ border-radius: 4px 4px; /* round corners with CSS3 compliant browsers */ } #content UL.thumbnails SPAN.wrap2:hover { background-color: AntiqueWhite; color: black; } #content UL.thumbnailCategories DIV.thumbnailCategory:hover { background-color: AntiqueWhite; color: black; } #content UL.thumbnailCategories DIV.thumbnailCategory:hover A { background-color: AntiqueWhite; color: black; } '; $css .= ' #content ul.thumbnailCategories li div.thumbnailCategory .description p + p { border-top:10px solid transparent !important; '; } $template->assign_block_vars('head_element', array('CONTENT' => ' <style type="text/css"> '.$css.' </style> ')); } ?>
Il surcharge donc le theme montblanc, change de thème suivant les fenêtres (montblanc trop large pour les popups).
Avoir aussi que j'ai modifié mon fichier config_local.inc.php pour y mettre le thème clear comme le thème admin!
Hors ligne
C'est à peu près ce que j'ai fait finalement pour remplacer la banniere par une autre sur la page des images: si page image -> chargement d'un fichier css ou je remplace le fichier image de la banniere et ou je rajoute aussi #theHeader h1 {display:none} pour enlever le titre...
J'ai aussi rajouté dans mon plug le chargement d'un autre fichier menubar.tpl perso.
Par contre, voila comment je change de banniere pour la page d'affichage des images:
function no_picture_header()
{
global $page,$template,$user;
if ( isset($page['body_id']) and $page['body_id'] == 'thePicturePage')
{
$template->assign_var( 'PAGE_BANNER', null);
$template->assign_block_vars('head_element', array('CONTENT' =>
'<link rel="stylesheet" type="text/css" '. 'href="'.PHPWG_PLUGINS_PATH.'Plug_perso/'.$user['theme'].'/picture.css">',));
};
}
Ainsi, il suffit de créer dans le répertoire du plug perso des repertoires ayant les noms des différents thèmes, et de mettre dans chacun un ficher picture.css (qui fait eventuellement donc appel à un autre fichier jpg pour une banniere plus petite)...
Bon, c'est peut-etre pas très clair.....
++
Dernière modification par P@t (2007-06-20 01:33:38)
Hors ligne
P@t a écrit:
Bon, c'est peut-etre pas très clair.....
Si si, c'est clair!
Il suffit de suivre le lien de ton site!
Et que fait ton fichier menubar.tpl perso? (suppression de menus et ?)
Dernière modification par rub (2007-06-20 01:23:23)
Hors ligne
P@t a écrit:
J'ai aussi rajouté dans mon plug le chargement d'un autre fichier menubar.tpl perso.
Et comment fais-tu pour ca? (j'ai une petite idée mais c'est toujours intéressant si c'est pas la même!)
Hors ligne
rub a écrit:
Et comment fais-tu pour ca? (j'ai une petite idée mais c'est toujours intéressant si c'est pas la même!)
Comme ca:
add_event_handler('loc_begin_menubar', 'menubar_perso');
function menubar_perso()
{
global $template;
$template->set_filenames(array('menubar'=> PHPWG_PLUGINS_PATH.'Plug_perso/menubarperso.tpl'));
}
Sur mon site, je l'ai viré et j'ai modifié directement le menubar.tpl du template.
Mais j'ai testé cette méthode et ca roule... ;-)
Je pompé sur le Fix Admin Theme de VDigital 8-)))
Dernière modification par P@t (2007-06-20 01:35:36)
Hors ligne
P@t a écrit:
rub a écrit:
Et comment fais-tu pour ca? (j'ai une petite idée mais c'est toujours intéressant si c'est pas la même!)
Comme ca:
add_event_handler('loc_begin_menubar', 'menubar_perso');
function menubar_perso()
{
global $template;
$template->set_filenames(array('menubar'=> PHPWG_PLUGINS_PATH.'Plug_perso/menubarperso.tpl'));
}Sur mon site, je l'ai viré et j'ai modifié directement le menubar.tpl du template.
Mais j'ai testé cette méthode et ca roule... ;-)
Je pompé sur le Fix Admin Theme de VDigital 8-)))
Ben alors, c'était pas en plugin!
Il faut savoir que cette méthode ne fonctionne pas dans tous les cas.
Elle fonctionne pour menubar car on a le trigger juste avant qui va bien.
En 1.7.1, j'ai rajouter des triggers dans le template, tu pourras faire le changement de fichier directement lors du 1er set_filename.
(D'ailleurs, il existe une fonction set_filename [ajout de la 1.7] qui evite d'utiliser directement un array).
Une 2eme méthode, vu que tu ne fais que de "simples suppressions" et la modification en direct du tpl. Sur le même évènement, tu utilises les fonctions du WIKI (personal_remove_tpl_code) pour supprimer les branches que tu ne veux pas, c'est peut-être plus simple à maintenir que la 1ere méthode mais en plus gourmand en ressource.
Tout ca pour permettre "de se mettre en php"... ;-)
Hors ligne