[FAQ] Wie füge ich zum Profil weitere Felder hinzu?

Started by andrea, June 30, 2004, 11:56:16 AM

Previous topic - Next topic

andrea

Mittlerweile ist auch eine Modifikation von winrules für die SMF Versionen 1.1 RC2 und 1.1 RC3 verfügbar:
Custom Profile Field Mod




Alternativ findet Ihr die Lösung in diesen Tutorials (englisch):

Adding new profile values...  (im Chartermember Bereich)
Creating custom profile fields in SMF

Die deutsche Übersetzung von robo47 findet ihr weiter unten.

Andrea Hubacher
Ex Lead Support Specialist
www.simplemachines.org

Personal Signature:
Most recent work:
10 Aqua Themes for SMF



robo47

ist das im chartermember-bereich weil ich ne fehlermeldung bekomm

andrea

Habe noch einen 2. Link angefügt, welcher allgemein zugänglich ist.

Andrea Hubacher
Ex Lead Support Specialist
www.simplemachines.org

Personal Signature:
Most recent work:
10 Aqua Themes for SMF



robo47


robo47

hier die Übersetzung:

Erstellen individueller Profilfelder im SMF

Eines der wichtigsten Dinge bei einen guten Forum ist die Anpassungsfähigkeit. Und ein großer Teil der Anpassung ist es die Mitglied Informationen über sich selbst- und Informationen die wichtig für das Forum sind.

Eine wichtige Anmerkung ist, dass dieses Tutorial für das SMF geschrieben wurde und wahrscheinlich nicht an anderer Stelle funktioniert. Wenn du Informationen für eine andere Forums-Software suchen, bist du hier falsch.



Was willst du tun?

Plannung ist für alles wichtig. Du musst wissen was für eine Art von Typ du willst und wie er aussehen sol. In diesem Tutorial werden wir 2 Beispiele behandeln . Text und Auswahl aus einer Liste. Es gibt noch andere Möglichkeiten, das hier sind nur Beispiele.

Du musst auch wissen wo du sie hinhaben willst. Anzeigen bei den anderen Mitglieder-Informationen bei Post? Nur im Profil? Beides? Uch werde euch alle 3 Möglichkeiten zeigen, aber am besten ist es, wenn ihr bedenkt, was ihr wollt und was eure Mitglieder wollen.



Es steckt alles im Template-System...

Die Möglichkeit das Profil zu verändern steckt in dem leistungsfähigen Template-System des SMF. Während Felder autmaitsch mit einen Interface hinzugefügt werden könnten, gibt einem dieser Weg die meiste Kontrolle darüber wie die Dinge ablaufen und aussehn.

Aber du must kein PHP oder etwas anderes lernen - du must nur wissen wie man kopiert und einfügt.


Du wirst auf jeden Fall einen Texteditor benötigen. Es gibt mehrere, so wie zum Beispiel ConText .


Hinzufügen eines einfachen Textfeldes

Dies ist wohl die einfachste Methode. Bei diesem Beispiel werden wir ein Feld mit dem Namen "location" zum Profil hinzufügen.

Öffne Themes/yourtheme/Profile.template.php in einem Texteditor. Wenn du die Datei nicht hast, koprier sie vom Standard-Theme (default theme).

Wer werden es in der Nähe des Feldes "website" platzieren, also sucht nach:

<td><input
  type="text" name="websiteUrl" size="50" value="',
  $context['member']['website']['url'], '" /></td>

Anmerkung: Dies kann etwas abweichen, abhängig von eurem Theme.

Jetzt fügt das darunter hinzu: ihr braucht nichts zu verändern aus der Wort "Location".

</tr><tr> <td
  width="40%"><b>Location: </b></td> <td><input
  type="text" name="default_options[text_location]" size="50" value="',
  isset($context['member']['options']['text_location']) ?
  $context['member']['options']['text_location'] : '', '"
  /></td>

Anmerkung: Der "default_optoons" Teil macht das Feld global für alle Themes. Benutzt "options" um es nur für das aktuelle Theme zu verwenden.

Wenn du willst, dass es angzeigt wird, wenn man sich das Profil anschaut, füge es hier auch ein. In der selben Datei suche:

<td><a href="',
  $context['member']['website']['url'], '" target="_blank">',
  $context['member']['website']['title'], '</a></td>

Und füge hinter dieser Linie das hinzu:

</tr><tr>
  <td><b>Location: </b></td> <td>',
  isset($context['member']['options']['text_location']) ?
  $context['member']['options']['text_location'] : '',
'</td>


Das ist alles was du für ein Textfeld im Profil brauchst. Alles was jetzt noch fehlt ist, das Feld zum Anzeige (Display) und Persönliche Nachrichten (InstantMessage) Tehme hinzuzufügen. Das wird so gemacht:

Öffne Themes/yourtheme/Display.template.php, und suche nach:

if
  (!empty($settings['show_blurb']) && $message['member']['blurb'] !=
  '')

Jetze werden wir etwas genau vor das "blurb" setzen, indem wir darüber hinzufügen:

if
  (isset($message['member']['options']['text_location'])) echo 'Location: ',
  $message['member']['options']['text_location'], '<br />';

Und jetzt das gleiche nochmal für InstantMessage.template.php

Hinzufügen einer einfachen Auswahl

Manchmal ist es einfacher etwas aus einer Liste auszuwählen. Glücklicherweise kannst du das im Profil machen, anstatt eine Textbox zu benutzen. In diesem Fall werden wir ein Feld "Favorite Browser" machen.

Das einzige was wir anders machen als im oberen Teil: ( und natürlich ausser dem benutzen von "Favorite Browser" anstatt "Location"...)


</tr><tr> <td
width="40%"><b>Location: </b></td> <td><input
type="text" name="default_options[text_location]" size="50" value="',
isset($context['member']['options']['text_location']) ?
$context['member']['options']['text_location'] : '', '" /></td>


Jetzt ist es fast nur Basic-HTML, aber anfangs sieht es kompliziert aus. Wir werden das <input>-Element zu einen <select>-Element ändern:

</tr><tr> <td
width="40%"><b>Favorite Browser: </b></td> <td>
<select name="default_options[text_favorite_browser]"> <option',
isset($context['member']['options']['text_favorite_browser']) &&
$context['member']['options']['text_favorite_browser'] == "Internet Explorer" ?
' selected="selected"' : '', '>Internet Explorer</option> <option',
isset($context['member']['options']['text_favorite_browser']) &&
$context['member']['options']['text_favorite_browser'] == "Opera" ? '
selected="selected"' : '', '>Opera</option> <option',
isset($context['member']['options']['text_favorite_browser']) &&
$context['member']['options']['text_favorite_browser'] == "Mozilla Firefox" ? '
selected="selected"' : '', '>Mozilla Firefox</option> </select>
</td>


Ich weis, das sieht ein bißchen kompliziert aus. Aber macht euch keine Sorgen, ich werde eine "SDK" für Themes herausgeben, dies wir etwas enthalten, was dies viel einfacher macht. Aber jetzt nur fürs kopieren und einfügen, macht euch keine Gedanken über die Details.

Was ist mit der Registration?

Es ist fast genauso einfach, zusätzliche Daten beim registrieren zu erfassen. Diesmal müssen wir das Register-Template editieren und das finden:

</tr><tr> <td
width="40%"> <b>', $txt[82], ':</b> </td> <td>
<input type="password" name="passwrd2" size="30" /> </td>


Und dann fügt etwas, etwo so darunter, für euren Lieblingsbrowser, nur als Beispiel:

</tr><tr> <td
width="40%"> <b>Favorite Browser:</b> </td> <td>
<select name="options[text_favorite_browser]"> <option>Internet
Explorer</option> <option>Opera</option> <option>Mozilla
Firefox</option> </select> </td>




Anmerkung: Bei der Registrierung sind Optionen immer Global zu allen Themes.

Ich hoffe das war brauchbar für euch

-[Unknown]

Übersetzt von Robo47

für Fehler jeglicher Art entschuldige ich mich schonmal im vorraus, mein Englisch ist nicht sonderlich gut, aber ich glaube man kann mit der Übersetzung etwas anfangen.

Ripper

QuoteHinzufügen einer einfachen Auswahl

Manchmal ist es einfacher etwas aus einer Liste auszuwählen. Glücklicherweise kannst du das im Profil machen, anstatt eine Textbox zu benutzen. In diesem Fall werden wir ein Feld "Favorite Browser" machen.

Das einzige was wir anders machen als im oberen Teil: ( und natürlich ausser dem benutzen von "Favorite Browser" anstatt "Location"...)


</tr><tr> <td
width="40%"><b>Location: </b></td> <td><input
type="text" name="default_options[text_location]" size="50" value="',
isset($context['member']['options']['text_location']) ?
$context['member']['options']['text_location'] : '', '" /></td>


Jetzt ist es fast nur Basic-HTML, aber anfangs sieht es kompliziert aus. Wir werden das <input>-Element zu einen <select>-Element ändern:

</tr><tr> <td
width="40%"><b>Favorite Browser: </b></td> <td>
<select name="default_options[text_favorite_browser]"> <option',
isset($context['member']['options']['text_favorite_browser']) &&
$context['member']['options']['text_favorite_browser'] == "Internet Explorer" ?
' selected="selected"' : '', '>Internet Explorer</option> <option',
isset($context['member']['options']['text_favorite_browser']) &&
$context['member']['options']['text_favorite_browser'] == "Opera" ? '
selected="selected"' : '', '>Opera</option> <option',
isset($context['member']['options']['text_favorite_browser']) &&
$context['member']['options']['text_favorite_browser'] == "Mozilla Firefox" ? '
selected="selected"' : '', '>Mozilla Firefox</option> </select>
</td>


Ich weis, das sieht ein bißchen kompliziert aus. Aber macht euch keine Sorgen, ich werde eine "SDK" für Themes herausgeben, dies wir etwas enthalten, was dies viel einfacher macht. Aber jetzt nur fürs kopieren und einfügen, macht euch keine Gedanken über die Details.
Von welcher Datei wird hier gesprochen??

Daniel D.


Ripper

Wie kann ich denn dieses neue Feld in einen neuen Abschnitt machen? Also nicht unter Website oder so, sondern in einen neuen Abschnitt. Mit dem Strich drüber und drunter.

noex

Indem du vor deinem

<tr>
    <td>dein code...</td>
    <td>dein code...</td>
</tr>

folgendes einfügst:

<tr>
    <td colspan="2"><hr size="1" width="100%" class="hrcolor" /></td>
</tr>


Fertig.  ;D

lg
noex
"Jetzt, wo ich weiß wie es geht, versteh ich auch die Gebrauchsanleitung"

Ripper

#9
Und wie geht das, dass das dann auch in einer Ebene ist, wenn man sich das Profil anguckt?

H3lium

hey!
klappt alles bestens bis jetzt!
aber kann man die neue info auch in der kleinen box neben jedem beitrag anzeigen lassen???
lg
h3lium

bng

Hallo,

Ich habe mehrere Felder hinzugefügt; soweit so gut.

Jetzt hab ich folgende Fragen::

Wie kann ich erreichen, dass alle Custom-Felder nur durch Admins (oder best. Benutzergruppen) geändet werden dürfen und selbst des Users eingenes Profil für ihn nicht zu ändern ist. Alle felder sollen für alle "Anderen" aber lesbar sein.
Wichtig: hier geht es nur um die hinzugefügten Felder (und evtl um das vorhandene EMail-Feld, falls machbar). Werden diese Änderungen bei einem Update mit dem Template-Konverter übernommen oder nicht?

Wann wird das nächste Release kommen, damit ich jetzt nicht in 2 Wochen alles nochal anpassen muss?

DANKE

Gruß, bng

scoutladen

die anleitung ist klasse... und es hat auch alles funktioniert.
meine frage ist nur, wenn ich nun noch die mitgliederliste nach einem weiteren feld ergänzen möchte, nach dem auch sortiert werden kann... wie stelle ich das an? welche ...theme.php brauche ich dazu?

joydealer

Quote from: bng on June 14, 2005, 04:37:24 AM
Hallo,

Ich habe mehrere Felder hinzugefügt; soweit so gut.

Jetzt hab ich folgende Fragen::

Wie kann ich erreichen, dass alle Custom-Felder nur durch Admins (oder best. Benutzergruppen) geändet werden dürfen und selbst des Users eingenes Profil für ihn nicht zu ändern ist. Alle felder sollen für alle "Anderen" aber lesbar sein.
Wichtig: hier geht es nur um die hinzugefügten Felder (und evtl um das vorhandene EMail-Feld, falls machbar). Werden diese Änderungen bei einem Update mit dem Template-Konverter übernommen oder nicht?

Wann wird das nächste Release kommen, damit ich jetzt nicht in 2 Wochen alles nochal anpassen muss?

DANKE

Gruß, bng


Ich würde auch gerne wissen, wie ich die neuen Felder nur durch den Admin ändern lassen kann. Weiß jemand, wie das funktioniert?

Heiko

Hi Leutz!

Gibt es denn auch die Möglichkeit, die neuen Felder, die man im Profil angelegt hat, aber auch schon das bereits vorhandene Alter, Ort usw. bei der Mitglieder-Suche zu integrieren?

Wenn man jetzt auf "Mitglieder suchen" geht, kann man ja nur nach E-Mail-Adresse, Namen, Messenger Spitzname, Webseite und Position suchen. Das ist meiner Meinung nach viiiiiiiiiiiiiel zu wenig! Toll wäre z. B. noch, wenn man nach "ALTER" und "GESCHLECHT" suchen könnte - wahlweise dann auch nach allen anderen Profil-Feldern! Halt "so ähnlich" wie in einer Flirt-Community. Muss nicht so umfangreich sein, aber etwas erweitert wäre schon toll!

Gibt es dazu schon einen Mod oder kann mir jemand sagen, in welcher PHP-Datei ich welche Zeilen einfügen müsste, damit das funktioniert? Das wäre echt super! :)

Danke und Gruß,
Heiko
www.uffmusik.de

taucher

ich möchte noch ein weiteres url feld definiern. ist das möglich?

noex

"Jetzt, wo ich weiß wie es geht, versteh ich auch die Gebrauchsanleitung"

taucher

#17
Leider nicht möglich, da ich noch 1.0.7 benutze.
Das Problem hat sich jedoch von alleine gelöst. Die Eingabe bleibt weiterhin ein normales Textfeld, es wird nur bei der Ausgabe in eine Url umgewandelt.

Aber bei dieser Gelegenheit: Werde demnächst auf 1.1. RC2 updaten.
Ist das dann mit den weiteren Feldern immer noch so möglich? Möchte ja meinde bisher eingegebenen Daten nicht verlieren.

taucher

So wies aussieht funktioniert die alte Methode bei 1.1 RC2 nicht mehr - ich bekomme immer einen Parse Error.
Welche Möglichkeit habe ich, die alten Daten aus den hinzu gefügten Dateien zu behalten?

ruedigers

Hmm, eigentlich schade, aber es scheint, dass sich dieser thread totgelaufen hat.

Mall schauen, ob es doch noch jemand liest:  Ich bin Neuling in PHP und MySQL, aber kein Neuling in punkto SQL und Web an sich.  Daher brennt mir noch die Frage im Hirn, wie um alles in der Welt die extra Felder in der Datenbank angelegt werden.  Passiert das automagisch?  ???

Und eine zweite Frage:  Wie melde ich Fehler im Sprach-Modul "German"? (allerdings ist Frage wahrscheinlich nicht richtig in diesem thread...  :-\ :o 8)
Version Information:
Forum version: SMF 2.0
SimplePortal 2.3.3 © 2008-2010
Aeva Media 1.4w
Adk Blog 2.0

Advertisement: