Affichage :
Le laboratoire de Darathor Index du Forum

Le laboratoire de Darathor

Ressources diverses, principalement sur les fourms phpBB
Bug avec Extend profil

Poster un nouveau sujet Répondre au sujet

Rechercher dans ce sujet :
Messages
Cacahuete Sexe : Masculin
Membre

Inscrit le : 22 Mar 2006
Messages : 84
MessagePosté le : 26 Fév 2007 20:09
Masquer ce messageAfficher ce message
Répondre en citantAjouter à liste des messages à citerRetirer de la liste des messages à citer
Darathor a écrit :
Ah ben oui, idéalement faudrait que je fasse une prémod mais j'ai pas le temps :o Et comme de toutes façons, la v3 va pas trop tarder et qu'il faudra tout migrer j'ai pas trop envie de m'en occuper :p

Sinon, a priori la classe addedfields se trouve dans le fichier includes/classes/class_added_fieds.php de Extended profile, non ?


Oki, bon j'ai laissé de côté l'install du mod, je verrais plus tard ^^
_________________
Revenir en haut Aller en bas
Hors ligne | Profil | MP
Cacahuete Sexe : Masculin
Membre

Inscrit le : 22 Mar 2006
Messages : 84
MessagePosté le : 06 Juin 2007 09:21
Masquer ce messageAfficher ce message
Répondre en citantAjouter à liste des messages à citerRetirer de la liste des messages à citer
Hello Dara,

Ton mod fonctionne à merveille, les membres apprécient ! Suelement j'ai une petit question à laquelle je me heurte ! Voila j'aimerais dissocier la page memberlist.php des champs suplémentaires:

~lien~

Comme tu peux le voir y'a déjà pas mal de monde dans cette page (et encore j'ai viré pas mal d'info), et je devrais arriver à environ 20 champs supplémentaire d'ici à la fin de l'année. Donc la page à rallonge pas génial.
Serait-il possible d'enlever le bloc champs personnalisable de cette page et de le mettre dans une nouvelle page memberlist mais vierge, ainsi on verra juste le pesudo puis tous les champs perso.

Comment m'y prendre ? D'avance merci :)
_________________
Revenir en haut Aller en bas
Hors ligne | Profil | MP
Darathor Sexe : Masculin
Site Admin
Membre

Inscrit le : 02 Nov 2003
Messages : 1101
Localisation : Strasbourg
MessagePosté le : 06 Juin 2007 18:37
Masquer ce messageAfficher ce message
Répondre en citantAjouter à liste des messages à citerRetirer de la liste des messages à citer
A priori, à vue de nez (j'ai pas testé tout ça mais en théorie c'est bon) :
0) dans class_added_fields.php, tu cherches la méthode get_field_display et tu la remplaces par (ajout d'un paramètre pour gérer le fait que chaque liste n'aura pas le même nombre de champs en dur) :
Code :
   /**
    * Génère l'affichage public (non-éditable).
    *
    * @param $profile_data données du membre concerné.
    * @param $user_data données de l'utilisateur affichang la page.
    * @param $context contexte considéré.
    * @param $bloc_name nom du bloc dans le fichier .tpl destination (par défaut <em>ADVANCED_BLOCK</em>).
    * @param $row éventuel bloc dans lequel sera inséré ce bloc (exemple dans le cas des posts : 'postrow').   
    * @param $nbHardCodedFields nombre de champs codés en dur déjà présents et à ajouter dans le colspan (utile pour la memberlist notamment).
    * @return nombre de champs affichés.
    */ 
   function get_field_display($profile_data, $user_data, $context, $block_name = 'ADVANCED_BLOCK', $row = '', $nbHardCodedFields = 9)
   {
      global $template, $lang, $board_config, $phpbb_root_path, $phpEx;
      $displayed_fields = 0;
      
      // Récupéraiton des données relatives au contexte.
      $context_data = AddedFields::get_context($context);
      if($context_data['context_alias'] != '') { $context = $context_data['context_alias']; }
            
      // On ne génère rien dans le cas des invités ou dans le cas où les données de configuration sont incomplètes.
      if($block_name != '' && $context_data['context_template_block'] != '' && (!$context_data['context_generate_values'] || $profile_data['user_id'] != ANONYMOUS))
      {
         // Sauvegarde de l'état du template.
         $template_state_save = $template->_tpldata;
         
         // Création du bloc pour le template.
         $template->set_filenames(array('advanced_block' => 'extended_profile_blocks.tpl'));
         
         // Données globales au bloc.
         $template->assign_block_vars($context_data['context_template_block'], array(
            'L_ADVANCED_PROFILE' => $lang['ChSu_Advanced_profile'],
            'L_ITEMS_REQUIRED' => $lang['Items_required'])
         );
         
         // Parcours des champs.   
         if(is_array($this->get_all_fields()))
         {
            foreach($this->get_all_fields() as $field)
            {
               // On affiche le champ s'il doit être affiché dnas le profil public.
               if(AddedFields::can_display($field, $user_data, $context))
               {
                  // Calcul de la valeur affichable du champ, si elle existe.
                  if($context_data['context_generate_values'])
                  {
                     if($field['field_type'] == 'custom_field')
                     {
                        $this->temporary_profile_data = $profile_data;
                        $value = $field['field_text'];   
                        $value = str_replace('&lt;', '<', $value);
                        $value = str_replace('&gt;', '>', $value);
                        $value = str_replace('&quot;', '"', $value);
                        $value = preg_replace_callback("#%%(\S*)%%#U", 'ChSu_replace_reference', $value);
                     }
                     else
                     {
                        $value = AddedFields::get_converted_value($field, $profile_data[$field['_field_var']], 'displayable');
                     }
                  }
                  else
                  {
                     $value = FALSE;
                  }
               
                  // Si l'on doit ignorer les champs vides, on n'affiche pas.            
                  if(!$context_data['context_generate_values'] || $context_data['context_display_empty'] || $value !== FALSE)
                  {
                     $displayed_fields++;
                     $template->assign_block_vars($context_data['context_template_block'] . '.field_row', array(
                        'NAME' => $field['field_name'],
                        'DESCRIPTION' => $field['field_description'],
                        'VALUE' => $value)
                     );
                  }
               }
            }
         }
      
         // Génération du bloc.
         $template->assign_var_from_handle('_block', 'advanced_block');
         $generated_block = $template->_tpldata['.'][0]['_block'];

         // Restauration de l'état du template.
         $template->_tpldata = $template_state_save;
   
         // Assigantion du bloc à la page.
         if($row == '')
         {
            $template->assign_vars(array(
               'CHSU_DISPLAYED_FIELDS' => $displayed_fields,
               'CHSU_COLSPAN_VALUE' => $nbHardCodedFields + $displayed_fields,
               $block_name => $generated_block)
            );
         }
         else
         {
            $template->assign_block_vars($row, array(
               'CHSU_DISPLAYED_FIELDS' => $displayed_fields,
               'CHSU_COLSPAN_VALUE' => $nbHardCodedFields + $displayed_fields,
               $block_name => $generated_block)
            );
         }
      }
      
      return $displayed_fields;
   }

1) dupliques la page memberlist et le template associé (genre en "memberlist2") d'avant modification par l'extended profile.
2) dans le template de la 2e tu enlèves tous les champs que tu veux pas.
3) dans le code de la 2e, tu cherches :
Code :
$template->set_filenames(array(
   'body' => 'memberlist_body.tpl')
);

et tu remplaces par :
Code :
$template->set_filenames(array(
   'body' => 'memberlist2_body.tpl')
);

4) dans le code de la 2e, tu cherches :
Code :
      // DEBUT MOD Extended Profile
      $added_fields->get_field_display($row, $userdata, 'memberlist', 'ADVANCED_BLOCK', $row = 'memberrow.advanced_block');
      // FIN MOD Extended Profile

Et
  1. tu ajoutes à la fin le nombre de colonnes qui restent dans le template (au moins deux pour le pseudo et le numéro).
  2. comme j'ai codé dynamiquement les contextes d'affichage, on va ajouter un 2e contexte memberlist en remplaçant le
    Code :
    'memberlist'
    par
    Code :
    'memberlist2'

Et comme on est dans la liste des membres il faut aussi compléter l'en-tête de tableau correctement. Donc tu recherces :
Code :
$added_fields->get_field_display('', $userdata, 'memberlist_header');
Et
  1. tu ajoutes à la fin le nombre de colonnes qui restent dans le template, le même qu'avant.
  2. tu remplaces le
    Code :
    'memberlist_header'
    par
    Code :
    'memberlist2_header'

5) Comme j'ai pas pris le temps de faire une interface d'admin pour la gestion des contextes il va par contre falloir l'ajouter manuellement dans la table phpbb_extended_profile_contexts :
Code :
INSERT INTO `phpbb_extended_profile_contexts` ( `context_id` , `context_name` , `context_name_key` , `context_internal_name` , `context_alias` , `context_test_visibility` , `context_display_empty` , `context_generate_values` , `context_template_block` )
VALUES (
NULL , '2e liste des membres', '0', 'memberlist2', '', '1', '1', '1', 'display_memberlist_block'
);
INSERT INTO `phpbb_extended_profile_contexts` ( `context_id` , `context_name` , `context_name_key` , `context_internal_name` , `context_alias` , `context_test_visibility` , `context_display_empty` , `context_generate_values` , `context_template_block` )
VALUES (
NULL , 'En-tête de la 2e liste des membres', '0', 'memberlist2_header', 'memberlist2', '1', '1', '0', 'display_memberlist_header_block'
);

Et du coup normalement tu devrais avoir dans ton interface de gestion des champs un contexte d'affichage en plus pour choisir les champs de la 2e liste.

Du coup si tu veux encore rajouter d'autres listes il suffit de répéter les points 1 à 5 avec un autre numéro...
Revenir en haut Aller en bas
Hors ligne | Profil | MP | E-mail | Site web
Dernière édition par Darathor le 06 Juin 2007 18:58; édité 5 fois
Cacahuete Sexe : Masculin
Membre

Inscrit le : 22 Mar 2006
Messages : 84
MessagePosté le : 06 Juin 2007 18:47
Masquer ce messageAfficher ce message
Répondre en citantAjouter à liste des messages à citerRetirer de la liste des messages à citer
Dans le petit 4, tu dis que dans memberlist2 je dois cherché un bout de code, ça sous entends que je fais les modifs pour memberlist dispo ici ? ~lien~
_________________
Revenir en haut Aller en bas
Hors ligne | Profil | MP
Darathor Sexe : Masculin
Site Admin
Membre

Inscrit le : 02 Nov 2003
Messages : 1101
Localisation : Strasbourg
MessagePosté le : 06 Juin 2007 18:57
Masquer ce messageAfficher ce message
Répondre en citantAjouter à liste des messages à citerRetirer de la liste des messages à citer
Yep tu laisses ton memberlist comme il est avec les modifs de l'extended profile ;)

En fait au final tu auras pourras choisir les champs à afficher dans chacune des listes (y aura une case en plus dans la partie affichage de l'admin des champs).

EDIT : Ah oui, j'oubliais qu'il faut naturellement ajouter quelque part le lien vers la 2e liste mais bon je pense que tu devrais t'en sortir ;)
Revenir en haut Aller en bas
Hors ligne | Profil | MP | E-mail | Site web
Dernière édition par Darathor le 06 Juin 2007 19:00; édité 1 fois
Cacahuete Sexe : Masculin
Membre

Inscrit le : 22 Mar 2006
Messages : 84
MessagePosté le : 06 Juin 2007 19:00
Masquer ce messageAfficher ce message
Répondre en citantAjouter à liste des messages à citerRetirer de la liste des messages à citer
J'ai bien coché dans l'admin, l'affichage dans la seconde memberlist mais ça fonctionne pas:

~lien~

JE pense que j'ai du me trompé à ce niveau, j'ai mis dans memberlist2:

Code :
$added_fields->get_field_display('', $userdata, 'memberlist2_header', $row = '2');


et

Code :
      // DEBUT MOD Extended Profile
      $added_fields->get_field_display($row, $userdata, 'memberlist2', 'ADVANCED_BLOCK', $row = '2');
      // FIN MOD Extended Profile

_________________
Revenir en haut Aller en bas
Hors ligne | Profil | MP
Darathor Sexe : Masculin
Site Admin
Membre

Inscrit le : 02 Nov 2003
Messages : 1101
Localisation : Strasbourg
MessagePosté le : 06 Juin 2007 19:02
Masquer ce messageAfficher ce message
Répondre en citantAjouter à liste des messages à citerRetirer de la liste des messages à citer
Oui, je problème est bien là, il faut AJOUTER un paramètre à la fin (en l'occurrence la valeur 2) et non remplacer le dernier ;)

EDIT : Merde je me suis emmêlé les pinceaux pour celui-ci :
Code :
$added_fields->get_field_display('', $userdata, 'memberlist_header');

Il faut en gros le remplacer par :
Code :
$added_fields->get_field_display('', $userdata, 'memberlist2_header', 'ADVANCED_BLOCK', '', 2);

Revenir en haut Aller en bas
Hors ligne | Profil | MP | E-mail | Site web
Dernière édition par Darathor le 06 Juin 2007 19:04; édité 3 fois
Cacahuete Sexe : Masculin
Membre

Inscrit le : 22 Mar 2006
Messages : 84
MessagePosté le : 06 Juin 2007 19:04
Masquer ce messageAfficher ce message
Répondre en citantAjouter à liste des messages à citerRetirer de la liste des messages à citer
Code :
      // DEBUT MOD Extended Profile
      $added_fields->get_field_display($row, $userdata, 'memberlist', 'ADVANCED_BLOCK', $row = 'memberrow.advanced_block', $row = '2' );
      // FIN MOD Extended Profile      $i++;


Apparement c'est pas ça non plus, :gni:
_________________
Revenir en haut Aller en bas
Hors ligne | Profil | MP
Darathor Sexe : Masculin
Site Admin
Membre

Inscrit le : 02 Nov 2003
Messages : 1101
Localisation : Strasbourg
MessagePosté le : 06 Juin 2007 19:05
Masquer ce messageAfficher ce message
Répondre en citantAjouter à liste des messages à citerRetirer de la liste des messages à citer
Cacahuete a écrit :
Code :
      // DEBUT MOD Extended Profile
      $added_fields->get_field_display($row, $userdata, 'memberlist', 'ADVANCED_BLOCK', $row = 'memberrow.advanced_block', $row = '2' );
      // FIN MOD Extended Profile      $i++;
Apparement c'est pas ça non plus, :gni:
Hum, déjà le $i++; il devrait pas être sur cette ligne là mais sur la suivante ;)

Ensuite, juste un 2 suffit plutôt que $row = '2' ;)

EDIT : ne pas rater mon edit précédent ;)
Revenir en haut Aller en bas
Hors ligne | Profil | MP | E-mail | Site web
Dernière édition par Darathor le 06 Juin 2007 19:06; édité 1 fois
Cacahuete Sexe : Masculin
Membre

Inscrit le : 22 Mar 2006
Messages : 84
MessagePosté le : 06 Juin 2007 19:11
Masquer ce messageAfficher ce message
Répondre en citantAjouter à liste des messages à citerRetirer de la liste des messages à citer
Oui le $i++; je viens de voir, ah c'est tout simple en faite lol, mais ça veut toujours pas:
Code :
Could not query users

DEBUG MODE

SQL Error : 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '* FROM phpbb_users WHERE user_id <> -1 AND username LIKE '%

SELECT user_level, user_color, user_group_id, user_topics, user_allow_viewonline, user_session_time, user_points, user_cf_iso3661_1, user_lastlogin, user_allow_viewonline, * FROM phpbb_users WHERE user_id <> -1 AND username LIKE '%' ORDER BY user_regdate ASC LIMIT 0, 50

Line : 339
File : memberlist2.php


J4ai effectué les même modifs que dans le memberlist normal :)
_________________
Revenir en haut Aller en bas
Hors ligne | Profil | MP
Darathor Sexe : Masculin
Site Admin
Membre

Inscrit le : 02 Nov 2003
Messages : 1101
Localisation : Strasbourg
MessagePosté le : 06 Juin 2007 19:16
Masquer ce messageAfficher ce message
Répondre en citantAjouter à liste des messages à citerRetirer de la liste des messages à citer
Heu dans ta requête tu as :
Code :
user_level, user_color, user_group_id, user_topics, user_allow_viewonline, user_session_time, user_points, user_cf_iso3661_1, user_lastlogin, user_allow_viewonline, *
Mais l'* de la fin veut justement dire "tous les champs" (vu qu'il n'y a qu'une table), donc en fait l'étoile suffira, pas besoin du reste ;)
Revenir en haut Aller en bas
Hors ligne | Profil | MP | E-mail | Site web
Cacahuete Sexe : Masculin
Membre

Inscrit le : 22 Mar 2006
Messages : 84
MessagePosté le : 06 Juin 2007 19:21
Masquer ce messageAfficher ce message
Répondre en citantAjouter à liste des messages à citerRetirer de la liste des messages à citer
Y'es, j'ai oublié de viré en dessous, les requêtes qu'ajoutes d'autres mods:

~lien~

Faut juste que je regarde le petit soucis de TR et des clés qui ne s'affichent pas et c'est good :)
_________________
Revenir en haut Aller en bas
Hors ligne | Profil | MP
Dernière édition par Cacahuete le 06 Juin 2007 19:22; édité 1 fois
Darathor Sexe : Masculin
Site Admin
Membre

Inscrit le : 02 Nov 2003
Messages : 1101
Localisation : Strasbourg
MessagePosté le : 06 Juin 2007 19:27
Masquer ce messageAfficher ce message
Répondre en citantAjouter à liste des messages à citerRetirer de la liste des messages à citer
Pour l'en-tête de tableau, cf mon edit 3 posts plus haut avec la modif exacte ;)
Revenir en haut Aller en bas
Hors ligne | Profil | MP | E-mail | Site web
Cacahuete Sexe : Masculin
Membre

Inscrit le : 22 Mar 2006
Messages : 84
MessagePosté le : 06 Juin 2007 19:35
Masquer ce messageAfficher ce message
Répondre en citantAjouter à liste des messages à citerRetirer de la liste des messages à citer
Tu es tout pardonné, chapeau, être capable de nous pondres un hack en 5 minutes, j'aplaudie, cela fonctionne désormais, j'ai plus qu'a informer les membres et c'est nikle. MErci ;)
_________________
Revenir en haut Aller en bas
Hors ligne | Profil | MP
Darathor Sexe : Masculin
Site Admin
Membre

Inscrit le : 02 Nov 2003
Messages : 1101
Localisation : Strasbourg
MessagePosté le : 06 Juin 2007 19:51
Masquer ce messageAfficher ce message
Répondre en citantAjouter à liste des messages à citerRetirer de la liste des messages à citer
Ça m'a pris quand même pas loin de 30 minutes d'écrire le message sans en oublier la moitié :p

Mais là la modif était finalement pas compliquée ;)
Revenir en haut Aller en bas
Hors ligne | Profil | MP | E-mail | Site web
Cacahuete Sexe : Masculin
Membre

Inscrit le : 22 Mar 2006
Messages : 84
MessagePosté le : 06 Juin 2007 20:33
Masquer ce messageAfficher ce message
Répondre en citantAjouter à liste des messages à citerRetirer de la liste des messages à citer
Par contre, si je désactive l'affichage de la liste de membre 1, ça désactive celle de la liste de membre 2

~lien~
_________________
Revenir en haut Aller en bas
Hors ligne | Profil | MP
Darathor Sexe : Masculin
Site Admin
Membre

Inscrit le : 02 Nov 2003
Messages : 1101
Localisation : Strasbourg
MessagePosté le : 07 Juin 2007 18:14
Masquer ce messageAfficher ce message
Répondre en citantAjouter à liste des messages à citerRetirer de la liste des messages à citer
Uh ?

Heu tu peux préciser dans quel contexte exactement tu arrives à ça ?
Revenir en haut Aller en bas
Hors ligne | Profil | MP | E-mail | Site web
Cacahuete Sexe : Masculin
Membre

Inscrit le : 22 Mar 2006
Messages : 84
MessagePosté le : 13 Juin 2007 09:00
Masquer ce messageAfficher ce message
Répondre en citantAjouter à liste des messages à citerRetirer de la liste des messages à citer
désolé d'avoir mis autant de temps = exams

Donc en faite, si je décoche dans la liste des membres 1 (l'affichage de la memberlist d'un champ ajouté), ça la désactive dans la liste des membres 2. Les modifications sont liés entre la liste des membres 1 et 2. Tu comprends ?
_________________
Revenir en haut Aller en bas
Hors ligne | Profil | MP
Darathor Sexe : Masculin
Site Admin
Membre

Inscrit le : 02 Nov 2003
Messages : 1101
Localisation : Strasbourg
MessagePosté le : 13 Juin 2007 12:31
Masquer ce messageAfficher ce message
Répondre en citantAjouter à liste des messages à citerRetirer de la liste des messages à citer
Hum, va falloir que je regarde ça parce que normalement y a pas de raison... Tu peux me passer te deux fichiers que je regarde directement, ce sera plus rapide ;)

(rappel : je ne lis pas les .rar)
Revenir en haut Aller en bas
Hors ligne | Profil | MP | E-mail | Site web
Cacahuete Sexe : Masculin
Membre

Inscrit le : 22 Mar 2006
Messages : 84
MessagePosté le : 19 Juin 2007 15:15
Masquer ce messageAfficher ce message
Répondre en citantAjouter à liste des messages à citerRetirer de la liste des messages à citer
Voulou,

Désolé d'avoir encore autant de temps :irony:
~lien~

Merci :)
_________________
Revenir en haut Aller en bas
Hors ligne | Profil | MP
Poster un nouveau sujet Répondre au sujet
  Vous ne pouvez pas poster de nouveaux sujets dans ce forum
Vous ne pouvez pas répondre aux sujets dans ce forum
Vous ne pouvez pas éditer vos messages dans ce forum
Vous ne pouvez pas supprimer vos messages dans ce forum
Vous ne pouvez pas voter dans les sondages de ce forum