rub a écrit:
Ce soir, j'allège la page personal plugin si c'est n'est pas déjà fait.
Voila.
Et MM et MV pour la relecture et la correction de mes nombreuses fautes de frappes et d'orthographe...
Hors ligne
Eric a écrit:
Bonsoir !
Je suis un assidu des cours du soir du professeur rub ;-) Mais j'ai quelques soucis pour faire mes devoirs. [mode fayot = On]Je ne pense pourtant pas être le cancre de la classe et "je_ne_dors_pas_au_fond_près_de_la_fenêtre_où_il_y_a_le_radiateur".[mode fayot = Off].
Voila ce que je souhaite réussir à obtenir : Ajouter une colonne "Langue" et remonter les paramètres de langue pour chaque visiteur dans la page de gestion des utilisateurs du panneau d'admin (user_list.php et user_list.tpl).
Alors, fort des recommandations très claires de rub sur le wiki, j'ai pondu çà :Code:
/* 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_page_tail', 'personal_user_manager'); function personal_user_manager() { global $page, $template; if ( is_admin() and (script_basename() == 'admin') and ($page['page'] == 'user_list') ) { personal_replace_tpl_code('tail',' SELECT DISTINCT u.'.$conf['user_fields']['id'].' AS id, u.'.$conf['user_fields']['username'].' AS username, u.'.$conf['user_fields']['email'].' AS email, ui.status, ui.adviser, ui.enabled_high',' SELECT DISTINCT u.'.$conf['user_fields']['id'].' AS id, u.'.$conf['user_fields']['username'].' AS username, u.'.$conf['user_fields']['email'].' AS email, ui.status, ui.language, ui.adviser, ui.enabled_high' ); personal_replace_tpl_code('tail'," $template->assign_block_vars( 'user', array( 'CLASS' => ($num % 2 == 1) ? 'row2' : 'row1', 'ID' => $local_user['id'], 'CHECKED' => $checked, 'U_PROFILE' => $profile_url.$local_user['id'], 'U_PERM' => $perm_url.$local_user['id'], 'USERNAME' => $local_user['username'] .($local_user['id'] == $conf['guest_id'] ? '<BR />['.l10n('is_the_guest').']' : '') .($local_user['id'] == $conf['default_user_id'] ? '<BR />['.l10n('is_the_default').']' : ''), 'STATUS' => $lang['user_status_'. $local_user['status']].(($local_user['adviser'] == 'true') ? '<BR />['.l10n('adviser').']' : ''), 'EMAIL' => get_email_address_as_display_text($local_user['email']), 'GROUPS' => $groups_string, 'PROPERTIES' => (isset($local_user['enabled_high']) and ($local_user['enabled_high'] == 'true')) ? $lang['is_high_enabled'] : $lang['is_high_disabled'] ) );"," $template->assign_block_vars( 'user', array( 'CLASS' => ($num % 2 == 1) ? 'row2' : 'row1', 'ID' => $local_user['id'], 'CHECKED' => $checked, 'U_PROFILE' => $profile_url.$local_user['id'], 'U_PERM' => $perm_url.$local_user['id'], 'USERNAME' => $local_user['username'] .($local_user['id'] == $conf['guest_id'] ? '<BR />['.l10n('is_the_guest').']' : '') .($local_user['id'] == $conf['default_user_id'] ? '<BR />['.l10n('is_the_default').']' : ''), 'STATUS' => $lang['user_status_'. $local_user['status']].(($local_user['adviser'] == 'true') ? '<BR />['.l10n('adviser').']' : ''), 'LANGUAGE' => $local_user['language'], 'EMAIL' => get_email_address_as_display_text($local_user['email']), 'GROUPS' => $groups_string, 'PROPERTIES' => (isset($local_user['enabled_high']) and ($local_user['enabled_high'] == 'true')) ? $lang['is_high_enabled'] : $lang['is_high_disabled'] ) );" ); } }Mais c'est tout pourri :-(
Surtout la première partie personal_replace_tpl_code qui attaque un code non tpl ! Je sais : je suis mauvais... Mais je ne demande qu'à m'améliorer.
Dans mon cas, comment peut-on modifier un code php par le biais d'un plugin perso ? Un peu comme pour l'email obligatoire mais en plus complexe ?
Les problèmes actuellement pour ton cas sont:
o le remplacement du code php n'est pas possible (sauf à faire que le plugin le fasse lui-même)
o le remplacement du tpl n'est pas possible aussi car il manque des evenements (en 1.7.1, il y a ce qu'il faut pour modifier tous les éléments.
Les voies possibles:
o Modifier le contenu de la valeur ADMIN_CONTENT dans le tpl, c'est le code compilé (HTML pur) de la liste des users
o Utiliser du javascript pour modifier le contenu d'une cellule ou en rajouter
Hors ligne
Merci rub.
Je crois que je vais attendre la 1.7.1 dans ce cas ;-)
Hors ligne
Eric a écrit:
Merci rub.
Je crois que je vais attendre la 1.7.1 dans ce cas ;-)
Mais, j'ai peut-être une idée à suivre...
Hors ligne
rub a écrit:
Eric a écrit:
Merci rub.
Je crois que je vais attendre la 1.7.1 dans ce cas ;-)Mais, j'ai peut-être une idée à suivre...
Cette idée est issue d'un vieux mod (v1.4 ou 1.5 - je ne sais plus) que j'ai pu adapter pour chaque version successive de PWG. Ce soir j'ouvrirai une discussion sur le sujet. A savoir, la possibilité d'afficher des colonnes d'info en plus (ou en moins) dans la gestion des utilisateurs.
Hors ligne
Eric a écrit:
Cette idée est issue d'un vieux mod (v1.4 ou 1.5 - je ne sais plus) que j'ai pu adapter pour chaque version successive de PWG. Ce soir j'ouvrirai une discussion sur le sujet. A savoir, la possibilité d'afficher des colonnes d'info en plus (ou en moins) dans la gestion des utilisateurs.
Une évolution ou un plugin à la clef ;-)
Hors ligne
rub a écrit:
Eric a écrit:
Cette idée est issue d'un vieux mod (v1.4 ou 1.5 - je ne sais plus) que j'ai pu adapter pour chaque version successive de PWG. Ce soir j'ouvrirai une discussion sur le sujet. A savoir, la possibilité d'afficher des colonnes d'info en plus (ou en moins) dans la gestion des utilisateurs.
Une évolution ou un plugin à la clef ;-)
Hors ligne
add_event_handler('loc_begin_page_tail', 'personal_test'); function personal_test() { global $page; if ( is_admin() and (script_basename() == 'admin') and ($page['page'] == 'user_list') ) { global $template; //$template->output = str_replace($template->get_var('ADMIN_CONTENT'), '', $template->output); $template->output = ''; $template->parse('header'); personal_add_after_tpl_code('user_list', '<th>{lang:Groups}</th>', ' <th>{lang:language}</th> '); personal_add_after_tpl_code('user_list', '<td>{user.GROUPS}</td>', ' <td>{user.LANG}</td> '); /*$v = $template->_tpldata['user' . '.'][]; $template->_tpldata[$blockname . '.'][] = array_merge($v, arr);*/ global $lang, $conf, $start, $groups, $profile_url, $perm_url; foreach ($page['filtered_users'] as $num => $local_user) { // simulate LIMIT $start, $conf['users_page'] if ($num < $start) { continue; } if ($num >= $start + $conf['users_page']) { break; } $v = $template->_tpldata['user'.'.'][$num]; $template->_tpldata['user'.'.'][$num] = array_merge($v, array('LANG' => $num.' A REMPLIR')); } $template->assign_var_from_handle('ADMIN_CONTENT', 'user_list'); $template->parse('admin'); } }
Quel beau TP que tu m'as donné! lol...
Ca fonctionne, il ne reste plus qu'à renseigner la langue (et plus).
Avec $page['filtered_users'], tu peux avoir la liste des users pour lesquels il faut rechercher la langue.
Hors ligne
Waouh ! Cà déchire !
Faut déjà que j'épluche ton code pour comprendre les rudiments du pourquoi et du comment (pas envie de mourir idiot :-) ).
J'essaye çà pour voir ;-)
Hors ligne
Ci-après, mes réflexions sur le sujet qui nous intéresse. Déjà pour voir si j'ai vraiment pigé et aussi car çà m'aide à faire le point.
Je pense avoir compris la substitution de template et j'ai reconnu une partie du code de user_list.php. Le pb est de pouvoir "surcharger" la requète initiale :
SELECT DISTINCT u.'.$conf['user_fields']['id'].' AS id, u.'.$conf['user_fields']['username'].' AS username, u.'.$conf['user_fields']['email'].' AS email, ui.status, ui.adviser, ui.enabled_high FROM '.USERS_TABLE.' AS u INNER JOIN '.USER_INFOS_TABLE.' AS ui ON u.'.$conf['user_fields']['id'].' = ui.user_id LEFT JOIN '.USER_GROUP_TABLE.' AS ug ON u.'.$conf['user_fields']['id'].' = ug.user_id WHERE u.'.$conf['user_fields']['id'].' > 0';
par celle remontant l'info supplémentaire (ici la langue) :
SELECT DISTINCT u.'.$conf['user_fields']['id'].' AS id, u.'.$conf['user_fields']['username'].' AS username, u.'.$conf['user_fields']['email'].' AS email, ui.status, ui.language, ui.adviser, ui.enabled_high FROM '.USERS_TABLE.' AS u INNER JOIN '.USER_INFOS_TABLE.' AS ui ON u.'.$conf['user_fields']['id'].' = ui.user_id LEFT JOIN '.USER_GROUP_TABLE.' AS ug ON u.'.$conf['user_fields']['id'].' = ug.user_id WHERE u.'.$conf['user_fields']['id'].' > 0';
Comme tu l'as dit, $page['filtered_users'] remonte les users. Il est issu de la requête initiale retournée par get_filtered_user_list(). Mon raisonnement était de refaire une requête complète un peu dans ce style :
(...) /*$v = $template->_tpldata['user' . '.'][]; $template->_tpldata[$blockname . '.'][] = array_merge($v, arr);*/ global $page, $lang, $conf, $start, $groups, $profile_url, $perm_url; $query = ' SELECT DISTINCT u.'.$conf['user_fields']['id'].' AS id, u.'.$conf['user_fields']['username'].' AS username, u.'.$conf['user_fields']['email'].' AS email, ui.status, ui.language, ui.adviser, ui.enabled_high FROM '.USERS_TABLE.' AS u INNER JOIN '.USER_INFOS_TABLE.' AS ui ON u.'.$conf['user_fields']['id'].' = ui.user_id LEFT JOIN '.USER_GROUP_TABLE.' AS ug ON u.'.$conf['user_fields']['id'].' = ug.user_id WHERE u.'.$conf['user_fields']['id'].' > 0'; if (isset($filter['username'])) { $query.= ' AND u.'.$conf['user_fields']['username'].' LIKE \''.$filter['username'].'\''; } if (isset($filter['group'])) { $query.= ' AND ug.group_id = '.$filter['group']; } if (isset($filter['status'])) { $query.= ' AND ui.status = \''.$filter['status']."';"; } ; $result = pwg_query($query); while ($row = mysql_fetch_array($result)) { $user = $row; } return $user; foreach ($page['filtered_users'] as $num => $local_user) { // simulate LIMIT $start, $conf['users_page'] if ($num < $start) { continue; } if ($num >= $start + $conf['users_page']) { break; } $v = $template->_tpldata['user'.'.'][$num]; $template->_tpldata['user'.'.'][$num] = array_merge($v, array('LANG' => $local_user['language'])); } $template->assign_var_from_handle('ADMIN_CONTENT', 'user_list'); $template->parse('admin'); } }
Mais tu t'en doute, çà ne fonctionne pas. :
Notice: Undefined index: language in d:\web\developpement\easyphp1-8\www\infernoweb\phpwebgallery\plugins\Plugin_perso2\main.inc.php on line 120
Pas si simple, finalement...
Hors ligne
Ce soir, je vous propose encore d'alléger votre galerie via votre plugin personnel...
Un assez simple (mais pas évident à imaginer):
[PLUGIN] Plus d'upload de la miniature
Un autre, un peu plus tordu (mais plus simple à concevoir que le précédent):
[PLUGIN] Un upload public général
8-)
Hors ligne
VDigital a écrit:
Un assez simple (mais pas évident à imaginer):
[PLUGIN] Plus d'upload de la miniature
J'adore celui-la... par sur le fond ... mais sur la forme...
Hors ligne
Eric a écrit:
...
Pas si simple, finalement...
Pour garder ce fil générique, j'en ai fait un nouveau http://forum.phpwebgallery.net/viewtopi … 08#p62508!
Hors ligne
Merci rub, c'était la bonne décision.
8-)
Hors ligne
Une astuce de la 1.6 en personal plugin mail invisible des bots
Hors ligne