[gelöst] Mehr Felder mit Benutzerdaten anlegen
am 08.01.2010 - 20:10 Uhr in
Hallo,
ich möchte auf der User-Registrierungsseite neue Felder anlegen(Adressanschrift, Telefonnummer, Fax, etc). Bestimmte Angaben sollten dabei unbedingt erforderlich sein. Anschliessend sollen diese Daten unter einem verfassten Artikel des entsprechenden Benutzers aufgelistet werden.
Kann man das mit den Drupal-hauseigenen Funktionen oder mit CCK realisieren?
MFG
- Anmelden oder Registrieren um Kommentare zu schreiben

Neue Profilfelder kannst du
am 09.01.2010 - 01:45 Uhr
Neue Profilfelder kannst du doch ohne weiteres mit dem Profile-Modul anlegen, genauso kannst du dabei festlegen, ob diese Felder Pflichtfelder sein sollen oder nicht.
Und wenn des ganze unter einem geschriebenen Beitrag ausgegeben werden soll, dann lege dir für den Inhaltstyp eine extra node.tpl.php an und gib dort die Profil-felder aus:
<?php//Profil des handelnden Benutzers laden
profile_load_profile($user);
print $user->profil_feldname;
?>
Das musst du natürlich für deine Anforderungen abstimmen, aber damit kannst du ganz einfach unter jedem Node eines Inhaltstyps beliebige Profilfelder ausgeben.
Danke füe die Antwort. Doch
am 11.01.2010 - 13:26 Uhr
Danke füe die Antwort. Doch welches Profile Modul ist denn hierbei empfehlsnwert. Ich finde lediglich ein Modul welches aber für die 4-er und 5-er Version ist. Ich habe aber die 6--er Version.
Dann hab ich mir das Modul Advanced Profile runtergeladen und àuf die Schnelle angetestet. Doch damit kann man anscheinend keine neue Profilfelder anlegen.
Ich habe noch nach anderen Modulen gesucht, aber nix gefunden. Was gibts denn noch?
Gemeint ist das Core-Modul
am 11.01.2010 - 13:30 Uhr
Gemeint ist das Core-Modul Profile.
Ahhh ok, danke. So, ich habe
am 11.01.2010 - 14:34 Uhr
Ahhh ok, danke.
So, ich habe nun neue Profilfelder angelegt. Ich möchte jtzt dass die Propfilfelder unter den Artikeln des entsprechendes Autors angezeigt werden. Doch mit dem Code von exterior klappt das leider nicht. Ich habe in meiner node.tpl folgenden Code eingetragen:
<?php//Profil des handelnden Benutzers laden
profile_load_profile($user);
print $user->profile_name;
?>
Doch damit wird rein garnichts angezeigt... Ein Wert in profile_name ist definitiv angegeben. Ich vermute mal dass der Code nicht ganz korrekt ist, denn wenn ich andere Zeichen eingebe, werden diese angezeigt.
Kann einer bitte sagen wie der richtige Code aussehen muss? Danke!
(Perfekt wäre es, wenn die entsprechenden Felder nur dann angezeigt werden, wenn diese auch vom User eingetragen worden sind)
Der Code funktioniert
am 11.01.2010 - 15:43 Uhr
Der Code funktioniert definitiv, habe es gerade nochmal getestet, irgendwas musst du falsch gemacht haben.
Habe gerade diesen Code probiert:
<?phpprofile_load_profile($user);
print $user->profile_vorname . '<br>';
print $user->profile_nachname;
?>
Damit werden mir untereinander die Inhalte von den Feldern "profile_vorname" und "profile_nachname" angezeigt.
Angezeigt wird das auch nur, wenn etwas drin steht.
Die Frage ist nun, wo dein Fehler steckt...
Baust du diesen Code direkt in die Content-Ausgabe ein oder in eine extra Funktion, die du in der Content-Ausgabe aufrufst?
Ich habs mittlerweile
am 11.01.2010 - 15:48 Uhr
Ich habs mittlerweile herausgefunden. Wenn ich folgenden Code in die node.tpl einbaue:
<?phpglobal $user;
profile_load_profile($node);
print $node->profile_name;
?>
wird einzig und alleine der entsprechende Wert angegeben. Aber so gefällt mir das nicht, Gibt es einen Code der einfach alles ausspuckt was der User bei der Registrierung angegeben hat? Wenn er z.B. nur seinen Namen, seine Url eingetragen hat und die anderen 10 Felder nicht ausgefüllt hat, dann sollen unter dem Artikel nur diese beiden Werte erscheinen. Ist das irgendwie möglich?
Sorry hab deinen letzten
am 11.01.2010 - 15:57 Uhr
Sorry hab deinen letzten post noch nicht gelesen!
Ich habe grade deinen Code ausprobiert... Funktioniert dennoch nicht. Es wird einfach nix angezeigt
<?phpprofile_load_profile($user);
print $user->profile_name . '<br>';
print $user->profile_plz;
print $user->profile_url;
?>
P.S. Wenn ich ihn ändere in:
<?phpglobal $user;
profile_load_profile($node);
print $node->profile_name . '<br>';
print $node->profile_plz . '<br>';
print $node->profile_url . '<br>';
?>
dann funktioniert es.
Aber wie gesagt, bin auf der Suche nach folgendem Code:
Wenn er z.B. nur seinen Namen, seine Url eingetragen hat und die anderen 10 Felder nicht ausgefüllt hat, dann sollen unter dem Artikel nur diese beiden Werte erscheinen. Ist das irgendwie möglich?
Wo genau benutzt du denn
am 11.01.2010 - 16:14 Uhr
Wo genau benutzt du denn diesen Code? Denn in der normalen Content-Ausgabe in der node.tpl.php ist eigentlich das User-Objekt verfügbar. Wenn du es aber z.B. in einer Funktion benutzt, muss man natürlich noch "global $user" einfügen (dann hätte auch $user->profile_name funktioniert).
Eigentlich dürften damit nur Felder ausgegeben werden, die auch ausgefüllt wurden...
Aber du kannst auch aus jeder Feld-Ausgabe eine If-Anweisung basteln, die erst prüft, ob das Feld belegt ist und nur dann ausgibt, in etwa so:
<?phpglobal $user;
profile_load_profile($node);
if ($node->profile_name != '')
{
print $node->profile_name;
}
?>
Damit musst du evtl. noch ein wenig experimentieren, aber das dürfte so klappen.
Zu Deiner Frage: Ich baue
am 11.01.2010 - 16:28 Uhr
Zu Deiner Frage: Ich baue den Code unten in die themes/garland/nope.tpl.php ein.
Habe nun den If Befehl mit eingebaut und es funktioniert wunderbar! Eine allerletzte Frage habe ich noch: Die Werte werden allerdings auch unter den Einleitungstexten meiner Startseite angezeigt. Das ist natürlich Blödsinn... die Werte sollen nur auf der Artikelseite erscheinen.
Weisst du (oder jemands anders) dafür auch eine Lösung? :-)
Ja, die ist sogar ganz
am 11.01.2010 - 16:50 Uhr
Ja, die ist sogar ganz einfach ;)
Du musst dir für deine Artikel eine extra node.tpl.php anlegen. Dazu kopierst du dir einfach deine node.tpl.php und benennst diese Kopie in "node-typname.tpl.php" um (also zum Beispiel "node-story.tpl.php"). Und nur in dieser node-typ.tpl.php fügst du den Code für die Profil-Felder ein, die normale node.tpl.php lässt du so, wie sie ist. Damit werden die Profil-Felder nur bei dem gewünschten Inhaltstyp ausgegeben.
Übrigens hast du bei Garland in der Node.tpl.php einen Code-Abschnitt, der so aussieht:
<?php<div class="content clear-block">
<?php print $content ?>
</div>
?>
Darin wird die ganze Ausgabe geregelt, also solltest du deinen Code für die Profil-Felder auch dort einbauen. Dann würdest du auch "global $user" nicht mehr brauchen ;)
Würde dann z.B. so aussehen, der Code-Teil:
<?php<div class="content clear-block">
<?php print $content;
profile_load_profile($node);
print $node->profile_name;?>
</div>
?>
Der neue Code Teil funzt
am 11.01.2010 - 17:03 Uhr
Der neue Code Teil funzt leider nicht, bekomme die Fehlermeldung: Parse error: syntax error, unexpected '<' in /home/www/doc/531/domain.de/www/themes/garland/node-story.tpl.php on line 17
Ich schätze mal da ist nur ne Kleinigkeit falsch, aber ich hab leider null Ahnung von PHP...
Habe nun auch eine extra node-story.tpl.php angelegt, den Code hineinkopiert, den anderen Code aus der node.tpl.php entfernt, doch es gibt leider keine Änderung... Die User-Werte werden nachwievor auch auf der Startseite in den Einleitungstexten angezeigt :(
Pfuh, dass du kein PHP
am 11.01.2010 - 17:55 Uhr
Pfuh, dass du kein PHP kannst macht die Sache nicht einfacher -,-'
Auf Zeile 17 in deiner node.tpl.php dürftest du so diesen Code finden:
<?phpprint $content
?>
Setze hinter das "$content" ein ";", dann drücke Enter und füge den Code für deine Profilfelder ein.
Mal ganz ohne Syntax-Highlighting, das müsste dann so aussehen:
'<'div class="content clear-block">
'<'?php print $content;
profile_load_profile($node);
print $node->profile_name;
print $node->profile_plz;
print $node->profile_url;
?'>'
'<'/div>
Damit ersetzt du mal den Code von Zeile 16 bis 18.
(Und entferne bei einigen '<' bzw. '>' die Hochkommas, die habe ich rein gemacht, damit der nicht automatisch den Text zu Code formatiert)
Welchen Inhaltstyp hat denn deine Startseite? Hat die den Typ Seite bzw. Page? Oder ist das auch ein Artikel?
Wenn's auch ein Artikel ist, muss man noch eine neue Abfrage machen. Wenn es kein Artikel ist, dann leere mal deinen Drupal-Cache komplett.
Habe den Code nun so wie du
am 11.01.2010 - 18:32 Uhr
Habe den Code nun so wie du es möchtest, in die node-story.tpl.php eingebaut. Klappt jetzt.
Meine Artikel haben den Typ story. Die Einleitungstexte, die nicht nur auf der Startseite sondern auch auf den Kategorieseiten eingeblendet werden, haben für meine Begriffe keinen Typ. Habe einfach unter admin/content/node-type/story/display die Einleitungstexte aktiviert.
Cache habe ich gelöscht, hat leider nix gebracht. Meine noch nicht fertige Seite ist http://www.du-bist-autor.de
Vielen Dank übrigens für deine bisherige Hilfe. Weiss das sehr zu schätzen! :-)
Mmmh, was genau meinst du
am 11.01.2010 - 19:08 Uhr
Mmmh, was genau meinst du denn mit "Einleitungstexte"?
Meinst du auf der Startseite das "Hier haben Sie die Möglichkeit...."?
Sorry, aber ich kann mir bei deiner Seite gerade unter Einleitungstexte nichts vorstellen =(
Einleitungstexte=Vorschautext
am 11.01.2010 - 19:21 Uhr
Einleitungstexte=Vorschautexte, auch Teasertexte genannt. In admin/content/node-type/story/display wird es auch als "Anrisstext" bezeichnet.
Achso, gut, darauf hätte
am 11.01.2010 - 20:02 Uhr
Achso, gut, darauf hätte ich kommen können -,-'
Du musst vorher also noch prüfen, ob der Inhalt komplett angezeigt wird oder nur der Teaser...mmmh
Probier mal diesen Code hier, das ist im Grunde der gleiche wie vorhin, nur habe ich noch eine kleine If-Anweisung eingebaut:
'<'div class="content clear-block">
'<'?php print $content;
if((arg(0) == 'node') && (is_numeric(arg(1))))
{
profile_load_profile($node);
print $node->profile_name;
print $node->profile_plz;
print $node->profile_url;
}
?'>'
'<'/div>
Damit dürfte das ganze funktionieren.
Zur Erläuterung: Die Abfrage prüft die Adresse des Nodes. Du hast zwar URL-Aliase vergeben, aber jeder Inhalt hat intern eine Adresse wie z.B. example.com/node/31
Mit arg() ruft man die einzelnen URL-Teile nach der Domain ab, also wäre in diesem Beispiel arg(0) "node" und arg(1) "31".
Wenn also in arg(0) "node" steht und in arg(1) eine Zahl, dann betrachtest du gerade einen Node, also einen Inhalt, als ganzes und bist nicht in der Teaser-Ansicht. Und nur dann gibt der Code oben die Profil-Felder aus.
Also den Codeblock so wie den letzten kopieren und einfügen (den alten natürlich vorher löschen ;) ), dann dürfte es klappen.
Juhuuu es hat endlich
am 11.01.2010 - 20:23 Uhr
Juhuuu es hat endlich geklappt! :-)))
Danke für die Mühe und die Zeit die du geopfert hast!!!
Kein Problem ;) Wenn alles
am 11.01.2010 - 20:45 Uhr
Kein Problem ;)
Wenn alles geklärt ist, kannst du den Beitrag ja mal als "gelöst" markieren ;)
(Den ersten Beitrag hier editieren und im Titel "[gelöst]" davor schreiben)