Jump to content
InvisionCommunity.de - Der Deutsche Invision Community Support
Sign in to follow this  
craxelburger

[Suche] Alter als Zahl in Topic und Memberlist

Recommended Posts

Hallo!

Kann mir mal jemand aushelfen?

Ich brauche das Alter (errechnet aus dem Geburtsdatum) als Zahl in der Memberlist und im Topic.

Kann ruhig in der selben Spalte wie die Mitgliedernamen stehen.

Beispiel:

Egon (28)

EDIT:

Wär Cool, wenn die Mitglieder auch nach Alter sortiert werden könnten.

Danke.

Craxelburger

Edited by craxelburger

Share this post


Link to post

Also hier mal eine Lösung für die Topicanzeige. ;)

Datei Topics.php

Suchen:

  $DB->query( "SELECT p.*,
       m.id,m.name,m.mgroup,m.email,m.joined,m.avatar,m.avatar_size,m.posts,m.aim_
ame,m.icq_number,
       m.signature, m.website,m.yahoo,m.integ_msg,m.title,m.hide_email,m.msnname, m.warn_level, m.warn_lastwarn,
       g.g_id, g.g_title, g.g_icon, g.g_dohtml $join_get_fields
       FROM ibf_posts p
         LEFT JOIN ibf_members m ON (p.author_id=m.id)
         LEFT JOIN ibf_groups g ON (g.g_id=m.mgroup)
         $join_profile_query
       WHERE p.topic_id=".$this->topic['tid']." and p.queued != 1
       ORDER BY p.{$ibforums->vars['post_order_column']} {$ibforums->vars['post_order_sort']} LIMIT $first, ".$ibforums->vars['display_max_posts']);
Ergänzen mit rotmarkierten Teil:
  $DB->query( "SELECT p.*,         m.id,m.name,m.mgroup,m.email,m.joined,m.avatar,m.avatar_size,m.posts,m.aim_name, .icq_number, m.bday_day, m.bday_month, m.bday_year,         m.signature, m.website,m.yahoo,m.integ_msg,m.title,m.hide_email,m.msnname, m.warn_level, m.warn_lastwarn,         g.g_id, g.g_title, g.g_icon, g.g_dohtml $join_get_fields         FROM ibf_posts p           LEFT JOIN ibf_members m ON (p.author_id=m.id)           LEFT JOIN ibf_groups g ON (g.g_id=m.mgroup)           $join_profile_query         WHERE p.topic_id=".$this->topic['tid']." and p.queued != 1         ORDER BY p.{$ibforums->vars['post_order_column']} {$ibforums->vars['post_order_sort']} LIMIT $first, ".$ibforums->vars['display_max_posts']);
Suchen:
  $member['member_joined'] = $ibforums->lang['m_joined'].' '.$std->get_date( $member['joined'], 'JOINED' );

 $member['member_group'] = $ibforums->lang['m_group'].' '.$member['g_title'];

 $member['member_posts'] = $ibforums->lang['m_posts'].' '.$std->do_number_format($member['posts']);

 $member['member_number'] = $ibforums->lang['member_no'].' '.$std->do_number_format($member['id']);
Darüber einfügen:
  if (!empty($member['bday_year']))
 {
 $temptime = explode ("-", date("d-m-Y", time()));
 
 $age = $temptime[2] - $member['bday_year'];
 
 if ($temptime[1] < $member['bday_month'])
   $age -= 1;
 
 if ( ($temptime[1] = $member['bday_month']) && ($temptime[0] < $member['bday_day']) )
   $age -= 1;
 }
 else
 {
 $age = "-";
 }

 $member['member_age'] = $ibforums->lang['m_age'].' '.$age;
Datei skin_topic.php Suchen:
        {$author['member_rank_img']}<br /><br />
       {$author['member_group']}<br />
Darunter einfügen:
 {$author['member_age']}<br />
Datei lang_topic.php Suchen:
m_group   	 =>	"Gruppe:",
Darunter einfügen:
m_age   	 =>	"Alter:",
Bei anderer Schreibweise des Arrays, folgendes suchen:
$lang['m_group']   	 =>	"Gruppe:";
Darunter einfügen:
$lang['m_age']   	 =>	"Alter:";

So nun wird das Alter schon in der Topicanzeige unterhalb der Gruppe angezeigt. Kannst es ja bei Bedarf woeanders hinsetzten im Skin.

Share this post


Link to post

Okay, Teil 2 und das mit der Suchfunktion ist ein wenig trickreicher, aber auch kein Problem. ;)

Datei Memberlist.php

Suche:

   	 $the_sort_key = array( 'name'    => 'sort_by_name',
            'posts'   => 'sort_by_posts',
            'joined'  => 'sort_by_joined',
          );
Mit rot markierten Teil ergänzen:
    $the_sort_key = array( 'name'    => 'sort_by_name',             'posts'  => 'sort_by_posts',             'joined'  => 'sort_by_joined',             'age'  => 'sort_by_age',           );
Suchen:
  $DB->query("SELECT m.name, m.id, m.posts, m.joined, m.mgroup, m.email,m.title, m.hide_email, m.location, m.aim_name, m.icq_number,
                    me.photo_location, me.photo_type, me.photo_dimensions
       FROM ibf_members m
         LEFT JOIN ibf_member_extra me ON me.id=m.id
         LEFT JOIN ibf_groups g ON m.mgroup=g.g_id
       WHERE m.id > 0".$q_extra." AND g.g_hide_from_list <> 1
       ORDER BY m.".$this->sort_key." ".$this->sort_order."
       LIMIT ".$this->first.",".$this->max_results);
Mit rot markierten Teil ergänzen:
  if ($this->sort_key == 'age')   {   $this->sort_order = $this->sort_order == "desc" ? "asc" : "desc";     $this->sort_key = "bday_year ".$this->sort_order.", m.bday_month ".$this->sort_order.", m.bday_day";   }     $DB->query("SELECT m.name, m.id, m.posts, m.joined, m.mgroup, m.email,m.title, m.hide_email, m.location, m.aim_name, m.icq_number,m.bday_day, m.bday_month, m.bday_year,                     me.photo_location, me.photo_type, me.photo_dimensions         FROM ibf_members m           LEFT JOIN ibf_member_extra me ON me.id=m.id           LEFT JOIN ibf_groups g ON m.mgroup=g.g_id         WHERE m.id > 0".$q_extra." AND g.g_hide_from_list <> 1         ORDER BY m.".$this->sort_key." ".$this->sort_order."         LIMIT ".$this->first.",".$this->max_results);
Suchen:
 	 $member['joined'] = $std->get_date( $member['joined'], 'JOINED' );

 $member['group']  = $this->mem_groups[ $member['mgroup'] ]['TITLE'];
Darunter einfügen:
            if (!empty($member['bday_year']))
           {
               $temptime = explode ("-", date("d-m-Y", time()));

               $member['member_age'] = $temptime[2] - $member['bday_year'];

               if ($temptime[1] < $member['bday_month'])
                   $member['member_age'] -= 1;

               if ( ($temptime[1] = $member['bday_month']) && ($temptime[0] < $member['bday_day']) )
                   $member['member_age'] -= 1;
           }
           else
           {
               $member['member_age'] = "-";
           }
Datei skin_mlist.php Suchen:
	<th class='pformstrip' align="center">{$ibforums->lang['member_icq']}</th>
Darunter einfügen:
<th class='pformstrip' align="center">{$ibforums->lang['member_age']}</th>
Suchen:
<td class='row2' align="center">{$member['icq_number']}</td>
Darunter einfügen:
<td class='row2' align="center">{$member['member_age']}</td>
Suchen (3 mal):
colspan="9"
Ersetzen durch:
colspan="10"
Datei lang_mlist.php: Hinzufügen:
sort_by_age      =>	"Alter",
member_age    => "Alter",
Bei anderer Schreibweise des Arrays
$lang['sort_by_age']      =	"Alter";
$lang['member_age']    = "Alter";

Sollte funktionieren. :)

Share this post


Link to post

Wie schon in der PM angesprochen, eine einfache Methode ist die Änderung in der functions.php:

In der Funktion load_member folgendes Query

            $DB->query("SELECT moderator.mid as is_mod, moderator.allow_warn, m.id, m.name, m.mgroup, m.password, m.email, m.restrict_post, m.view_sigs, m.view_avs, m.view_pop, m.view_img, m.auto_track,
                             m.mod_posts, m.language, m.skin, m.new_msg, m.show_popup, m.msg_total, m.time_offset, m.posts, m.joined, m.last_post,
                 m.last_visit, m.last_activity, m.dst_in_use, m.view_prefs, m.org_perm_id, m.temp_ban, m.sub_end, m.module_cal, g.*
                 FROM ibf_members m
                   LEFT JOIN ibf_groups g ON (g.g_id=m.mgroup)
                   LEFT JOIN ibf_moderators moderator ON (moderator.member_id=m.id OR moderator.group_id=m.mgroup )
                 WHERE m.id=$member_id");
abändern in
            $DB->query("SELECT moderator.mid as is_mod, moderator.allow_warn, m.id, m.name, m.mgroup, m.password, m.email, m.restrict_post, m.view_sigs, m.view_avs, m.view_pop, m.view_img, m.auto_track,                               m.mod_posts, m.language, m.skin, m.new_msg, m.show_popup, m.msg_total, m.time_offset, m.posts, m.joined, m.last_post,                   m.last_visit, m.last_activity, m.dst_in_use, m.view_prefs, m.org_perm_id, m.temp_ban, m.sub_end, m.module_cal, m.bday_day, m.bday_month, m.bday_year, g.*                   FROM ibf_members m                     LEFT JOIN ibf_groups g ON (g.g_id=m.mgroup)                     LEFT JOIN ibf_moderators moderator ON (moderator.member_id=m.id OR moderator.group_id=m.mgroup )                   WHERE m.id=$member_id");
Nun kannst du es überall per $ibforums->member[] abfragen, also der Alg. müßte so aussehen:
            if (!empty($ibforums->member['bday_year']))
          {
              $temptime = explode ("-", date("d-m-Y", time()));

              $ibforums->member['member_age'] = $temptime[2] - $ibforums->member['bday_year'];

              if ($temptime[1] < $ibforums->member['bday_month'])
                  $ibforums->member['member_age'] -= 1;

              if ( ($temptime[1] = $ibforums->member['bday_month']) && ($temptime[0] < $ibforums->member['bday_day']) )
                  $ibforums->member['member_age'] -= 1;
          }
          else
          {
              $ibforums->member['member_age'] = "-";
          }

In $ibforums->member['member_age'] hättest du dann das Alter drin stehen. Könntest natürlich die ganze Sache auch weiter anpassen und alles in die load_member Funktion integrieren, so das du überall in der Forensoftware über die Variable das Alter abfragen kannst.

Share this post


Link to post

Hmm, aber wenn ich das in der functions.php einbaue, belaste ich da nicht unnötig meinen Server mit Abfragen?

Also ich wollte das nur noch in der Startseite haben.

Wenn Du auf meine Seite gehst, siehst Du ja Direkt am Anfang das Portal mit "Neustes Mitglied" und "Neueste Mitglieder". Dahinter wollte ich das auch so haben wie es auch jetzt schon in meiner Memberlist ist.

Ich schicke Dir gleich mal meine portal.php per Email.

:rolleyes:

Share this post


Link to post

Naja, es ist keine zusätzliche Datenbankabfrage, sondern du holst nur drei Zellen mehr aus der DB, was jetzt nicht wirklich eine große Datenmenge ist.

Im Portal wird man wohl eine Datenbankabfrage mehr einbauen müssen, aber das kann ich dir erst genau sagen, wenn ich die den Sourcecode vor Augen habe.

Share this post


Link to post

So, hier eine Methode, die du in deiner Portal.php einbauen kannst. Sollte funktionieren, jedoch hab ich es nicht getestet und nur kurz hier runter getippert. ;)

function get_memberage()
{
global $DB, $ibforums;

$age  = "";
$member = array();

if ($ibforums->member['id'] == 0)
 return $age;
 
$DB->query("SELECT m.bday_day, m.bday_month, m.bday_year FROM ibf_members WHERE id ='".$ibforums->member['id']."'");


if ($DB->get_num_rows() != 1)
 return $age;
 
$member = $DB->fetch_row();

   if (!empty($member['bday_year']))
   {
      $temptime = explode ("-", date("d-m-Y", time()));

      $age = $temptime[2] - $member['bday_year'];

      if ($temptime[1] < $member['bday_month'])
          $age -= 1;

      if ( ($temptime[1] = $member['bday_month']) && ($temptime[0] < $member['bday_day']) )
          $age -= 1;
   }
   else
   {
          $age = "";
   }
   
   $DB->free_result();
   
   return $age;
}
Diese Methode rufst du nun einfach innerhalt der Methode auf, wo du das Alter haben willst. Aufruf zum Beispiel:
$alter = $this->get_memberage();

Nun kannst du die Variable $alter der jeweiligen Skindatei übergeben. Sollten da Probleme auftreten, meld dich einfach und ich mach eine Schritt-für-Schritt Anleitung. :)

Share this post


Link to post

Sorry, Stefan aber ich bekomme es einfach nicht hin.

Hab mittlerweile schon einige Versuche dahinter.

Was ich erreichen will:

Anzeige des Alters so wie in meiner Memberlist.

Das heisst das Alter in Klammern hinter dem Namen an folgenden Stellen meines Portals?:

Statistik

Beiträge:

Themen:

Registrierte Mitglieder:

Neustes Mitglied: Mitgliedsname (Alter)

Neusten Mitglieder

Name Beiträge

Name1 (Alter)

Name2 (Alter)

usw.

Unter diesem Link habe ich meine Portal-Dateien gezippt liegen.

Ich denke mal das das für Dich bestimmt nur eine Kleinigkeit ist.

Vielen Dank schonmal im Voraus.

Craxelburger

Share this post


Link to post

Hat etwas länger gedauert, da ich in den letzten Tagen nicht soviel Zeit hatte. ;)

Probier mal die folgenden Dateien aus, sollte eigentlich klappen. Ich hab das Protal jetzt mal nicht auf meinen Testforum installiert, weil ich es mir nicht ruinieren will. ;)

Bei Problemen meld dich mal per PM bei mir, dann schau ich mir das mal auf deiner Seite an.

Edited by Stefan

Share this post


Link to post

Ist ja kein Problem ;) Hab ja geduldig gewartet.

Habs gleich mal auf den Server geschmissen.

Leider klappts nicht ganz mit den Dateien.

Ich krieg folgende Fehlermeldung:

Warning: mysql_fetch_array(): 29 is not a valid MySQL result resource in /home/www/htdocs/skypeflirt.de/forum/sources/Drivers/mySQL.php on line 199

Dann wird in der Box "Statistik" beim Neusten Mitglied zwar eine Klammer angezeigt, eine Zahl mit dem Alter ist aber nicht darin.

Weiter wird in der Box "Neuste Mitglieder" jetzt nur noch ein einziges Mitglied angezeigt (jedoch ohne Klammer und Zahl für das Alter). Vorher hatte ich dort die zehn neusten Mitglieder aufgelistet.

MFG

Craxelburger

Share this post


Link to post

Such mal in der skin_portal.php folgende Stelle:

       $DB->free_result();

      return $age;

Entferne das $DB->free_result(); und probier es dann nochmal aus. :)

Share this post


Link to post

Hab ich gemacht.

Fehlermeldung ist jetzt weg. :)

Auch werden jetzt wieder alle Mitglieder aufgelistet :) (jedoch ohne Alter :unsure: ).

Die Klammer beim neusten Mitglied ist immer noch leer, obwohl das betreffende Mitglied das Alter angegeben hat.

EDIT: Demo siehe mein Forum. Ich lass die Dateien mal on.

Edited by craxelburger

Share this post


Link to post

Also Stefan klappt super das ganze !

eines nur ich will das alter in klammern haben so wie craxel... wie mache ich das mein code ist momentan so

 $member['member_age'] = $age;

wie füge ich da ein das der das alter in klammern anzeigt ???

das zweite prob ist Das mein Alter 1 Jahr zu wenig anzeigt aber von einem anderen User wird es richtig angezeigt beide hatten wir aber schon geb. und eingestellt ist es richtig

Achso der vollständigkeit

ich habe im März der andere User im November !

und ich nutze das ipb1.2

Sooo Klammern habe ich selber gelöst :-)

Edited by benne

Share this post


Link to post

mhhh also das Mit dem Alter hatts sich über nacht ohne was zu machen selbst geregelt! nun zeigt es eigentlich richtig an ! Fragt Bitte nicht warum ! Ich weiss es nicht!

Share this post


Link to post

Die Formel ist schon richtig, aber da hat sich ein Copy & Paste Fehler eingeschlichen. :)

f (!empty($member['bday_year']))

{

  $temptime = explode ("-", date("d-m-Y", time()));

  $age = $temptime[2] - $member['bday_year'];

  if ($temptime[1] < $member['bday_month'])

  $age -= 1;

  if ( ($temptime[1] == $member['bday_month']) && ($temptime[0] < $member['bday_day']) )

  $age -= 1;

}

else

{

  $age = "-";

}

$member['member_age'] = $ibforums->lang['m_age'].' '.$age;

Schau mal, die rotmarkierte Stelle, das zweite Gleichzeichen für einen Vergleich hatte gefehlt, deswegen wurde noch ein Jahr abgezogen. :)

Naja, manchen Frauen wird es wohl lieber sein, wenn der Fehler drin bleibt. :lol:

Share this post


Link to post

Mal wieder Danke Stefan :-)

Das Ganze funzt übrigens auch mit dem 1.2er. Wenn also bei dieser Version etwas nicht hinhauen sollte, liegt es mit ziemlicher Sicherheit am Einbau, jedoch nicht am Code.

Share this post


Link to post

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this  

×