Text unter Benutzername bei Registrierung ändern
Eingetragen von mattmatt (33)
am 18.02.2011 - 14:30 Uhr in
am 18.02.2011 - 14:30 Uhr in
hi.
Ich würde gerne die Beschreibung des Benutzernamen bei der Registrierung ändern.
Da steht nämlich
"Leerzeichen sind erlaubt; Satzzeichen sind nicht erlaubt außer Kommata, Bindestriche, Apostrophe und Unterstriche."
und ich würde gerne was dazuschreiben.
Leider gibt es für Benutzernamen keine Bearbeiten-Funktion wie bei den selbst angelegten Registrierungsfeldern.
Wie lässt sich das denn anstellen?
PS: hab bereits das Modul "String Overrides" ausprobiert. Funktioniert aber hierfür auch nicht.
- Anmelden oder Registrieren um Kommentare zu schreiben
Das kannst Du über den
am 18.02.2011 - 15:14 Uhr
Das kannst Du über den hook_form_alter() ändern.
sense-design | online solutions | Do not hack core!
Drupalcenter Verhaltensregeln | Threads bitte auf [gelöst] stellen.
hm kenn mich nicht soo gut
am 18.02.2011 - 16:11 Uhr
hm kenn mich nicht soo gut aus.
Wo find ich das?
Wie geht das?
danke
Das kannst Du über ein
am 18.02.2011 - 16:14 Uhr
Das kannst Du über ein eigenes Modul realisieren:
sense-design | online solutions | Do not hack core!
Drupalcenter Verhaltensregeln | Threads bitte auf [gelöst] stellen.
hm finde dort keinen download
am 18.02.2011 - 16:41 Uhr
hm finde dort keinen download eines moduls.
Kann mir das jemand genauer beschrieben.
danke
Du sollst kein Modul
am 18.02.2011 - 16:59 Uhr
Du sollst kein Modul downloaden, sondern du musst selbst ein eigenes Modul dafür erstellen, darin hook_form_alter implementieren und damit den Text ändern.
sorry ich hab noch nie ein
am 18.02.2011 - 19:24 Uhr
sorry ich hab noch nie ein eigenes modul erstellt.
Wenn jemand die Zeit hat, mir Punkt für Punkt erklären kann, was ich tun muss, um den Text zu ändern, wäre ich sehr dankbar.
Vielen Dank und sorry fürs nerven.
PS: Nicht dass ihr glaubt, ich kann keine Probleme alleine lösen. Hab schon viel durch Google lösen können, aber dieses Problem hab ich nicht hinbekommen.
Du könntest alternativ auch
am 18.02.2011 - 19:41 Uhr
Du könntest alternativ auch unter Verwalten » Strukturierung » Oberfläche übersetzen bei Suche den Text eingeben, und dann den deutschen Text nach Deinen Wünschen ändern.
Na bitte geht doch auch
am 18.02.2011 - 22:20 Uhr
Na bitte geht doch auch einfach ;) vielen dank
sind aber auch versteckt die sachen...
Aber dafür verfälscht Du dann
am 18.02.2011 - 22:28 Uhr
Aber dafür verfälscht Du dann die Übersetzungen ... ganz sauber ist das aber nicht ...
sense-design | online solutions | Do not hack core!
Drupalcenter Verhaltensregeln | Threads bitte auf [gelöst] stellen.
Obwohl das meiner Meinung
am 18.02.2011 - 22:29 Uhr
Obwohl das meiner Meinung nach eher eine "Notlösung" ist, denn die Bezeichnung "Oberfläche übersetzen" sagt ja, dass die Funktion dafür da ist, Strings zu übersetzen. Ich persönlich würde die Funktion nicht verwenden, um Texte hinzuzufügen, sondern eben nur, um korrekte Übersetzungen einzufügen.
Um eigene Module kommst du
am 18.02.2011 - 22:38 Uhr
Um eigene Module kommst du wohl früher oder später nicht drumrum. Da gibt es aber wirklich leicht erklärte Tutorials.
hook_form_alter ist aber nicht so schwer zu verwenden.
Hier zum Beispiel 1 von 1000:
http://11heavens.com/theming-the-register-form-in-Drupal-6
So sollte es auch eigentlich
am 18.02.2011 - 22:45 Uhr
So sollte es auch eigentlich sein. Dafür gibt es ja das sehr gut funktionierende HOOK System von Drupal dass einem fast jede Möglichkeit offen lässt die entsprechenden Formulare anzupassen und entsprechend neu zu definieren.
sense-design | online solutions | Do not hack core!
Drupalcenter Verhaltensregeln | Threads bitte auf [gelöst] stellen.
Die obigen Antworten sind unerfindlich
am 27.08.2011 - 17:42 Uhr
Moin zusammen.
Was "mattmatt" da schrieb ist völlig verständlich:
....ich würde gerne was dazuschreiben.
Und das, was die Kommentatoren hier im Thread daraufhin äußerten, mag zwar logisch erscheinen, ist aber nichts desto weniger nicht ganz einleuchtend.
Ein neues Modul ist notwendig, wenn sich Funktionen ändern.
Hier wurden die Links zu den Seiten
angegeben.
Wenn man da aber mal genau nachliest, heißt es:
Nur Text verändern
am 27.08.2011 - 18:00 Uhr
Hallo?
@ alle
Das ist es nicht, was "mattmatt" wollte.
Ich stehe selbst vor derselben Situation. Und dabei sollen keinesfalls Funktionen eingebracht werden, für die ein Code geschrieben werden müßte, der in Drupal von Hause aus nicht existiert.
Vielmehr äußerte sich "mattmatt" dahingehend, dass er den Text des Registrierungsformulars abwandeln wollte. Dabei handelt es sich um nichts anderes, als um:
Die Bearbeitung einer html-Datei
- so wie jeder andere Inhalt ja auch bearbeitet werden kann.
Deshalb stelle ich die Frage an dieser Stelle nochmal anders:
Wie kann man Texte in Drupal verändern (zum Beispiel im Fenster für die Anmeldung) ...reine Texte (Textbearbeitung)?
Funktionell wird da garnichts verändert. Da will es mir nicht so ganz in den Kopf, dass man für eine Textveränderung auf einer Seite gleich ein Modul programmieren soll. Geht das nicht beispielsweise mit Firebug von Mozilla? Oder mit dem Web-Developer? Mit welchem Werkzeug hat man direkten Einfluss auf Inhalte (die ja den Code in keiner Weise verändern) um Textverarbeitung ohne Bearbeitungsmodulen in Drupal zu bewerkstelligen? Und vor allem: Wo liegen diese Textdateien denn eigentlich in Drupal, wenn es kein normales Node gibt, das man aufrufen könnte?
Interessiert mich brennend, dieses Thema!
Grüße aus Berlin ==> Drupi
Darf ich Dich in dieser
am 27.08.2011 - 18:06 Uhr
Darf ich Dich in dieser Hinsicht korregieren? Wenn eine Systemfunktion ein Formular bereistellt, wie hier das Benutzer-Registration-Formular, dann ist hook_form_alter (oder hook_form_FORMID_alter) der adäquate Weg daran zu ändern.
Das muß nun mal in einem eigenen Modul passieren und ist mit wenigen Zeilen Code abgehandelt und hat mit Zusatzfunktionalität nichts zu tun. Im Grunde braucht man nur eine einzige echte Zeile (der Rest ist Funktionsdefinition und Kommentar), weil das, was geändert werden soll, die Beschriftung (=description) für ein Formularfeld ist. Man sieht sich also an, wie das Formular-Array aussieht, welches in die eigene Funktion hereinkommt und ändert einen Wert.
Man muß sich dazu allerdings auch die Forms-API von Drupal ansehen, damit man versteht, welche Werte in der Forms-Api für ein einzelnes Formularfeld gesetzt werden.
Beste Grüße
Werner
.
Werner
drupal-training.de
Moderator und Drupal Trainer
* - - - - - - - - - - - - - - - - - - - - - - - - - - - *
Zu Deinen Fragen:Wie kann
am 27.08.2011 - 18:17 Uhr
Zu Deinen Fragen:
Wie kann man Texte in Drupal verändern (zum Beispiel im Fenster für die Anmeldung) ...reine Texte (Textbearbeitung)?
Es gibt zum einen die Möglichkeit die original Texte, die im Englischen im Code hinterlegt sind, mit "Oberfläche übersetzen" anzupassen, der Nachteil hierbei ist, dass Du damit die Übersetzungen verfälscht. Möchtest Du dies "sauber" lösen musst Du via "hook" System das entsprechende Formular anpassen.
Funktionell wird da garnichts verändert. Da will es mir nicht so ganz in den Kopf, dass man für eine Textveränderung auf einer Seite gleich ein Modul programmieren soll.
Das ist korrekt, jedoch sind die Texte in den einzelnen Formularen im Code definiert, um diese zu ändern musst Du ein entsprechendes Modul erstellen, wo Du diese Texte entsprechend anpasst. Du könntest dieses natürlich auch in der Originaldatei vornehmen, welches aber die Updatefähigkeit deines Drupal Cores zunichte macht.
Geht das nicht beispielsweise mit Firebug von Mozilla? Oder mit dem Web-Developer?
Dieses sind reine Tools um Informationen sammeln zu können, nicht um Inhalte einer Webseite zu verändern. Diese machen einem das Leben bei der Programmierung deutlich einfacher.
Mit welchem Werkzeug hat man direkten Einfluss auf Inhalte (die ja den Code in keiner Weise verändern) um Textverarbeitung ohne Bearbeitungsmodulen in Drupal zu bewerkstelligen?
Dafür gibt es nur die oben angegebene Möglichkeit via "hook"-System und eigenem Modul, wo die entsprechende Funktion anzupasst wird.
Wo liegen diese Textdateien denn eigentlich in Drupal, wenn es kein normales Node gibt, das man aufrufen könnte?
In Diesem speziellen Beispiel: Drupal 6: user.module ab Zeile 2423
<?php
/**
* Form builder; The user registration form.
*
* @ingroup forms
* @see user_register_validate()
* @see user_register_submit()
*/
function user_register() {
global $user;
$admin = user_access('administer users');
// If we aren't admin but already logged on, go to the user page instead.
if (!$admin && $user->uid) {
drupal_goto('user/'. $user->uid);
}
$form = array();
// Display the registration form.
if (!$admin) {
$form['user_registration_help'] = array(
'#value' => filter_xss_admin(variable_get('user_registration_help', '')),
// Ensure that user registration help appears above profile fields.
'#weight' => -20,
);
}
// Merge in the default user edit fields.
$form = array_merge($form, user_edit_form($form_state, NULL, NULL, TRUE));
if ($admin) {
$form['account']['notify'] = array(
'#type' => 'checkbox',
'#title' => t('Notify user of new account')
);
// Redirect back to page which initiated the create request;
// usually admin/user/user/create.
$form['destination'] = array('#type' => 'hidden', '#value' => $_GET['q']);
}
// Create a dummy variable for pass-by-reference parameters.
$null = NULL;
$extra = _user_forms($null, NULL, NULL, 'register');
// Remove form_group around default fields if there are no other groups.
if (!$extra) {
foreach (array('name', 'mail', 'pass', 'status', 'roles', 'notify') as $key) {
if (isset($form['account'][$key])) {
$form[$key] = $form['account'][$key];
}
}
unset($form['account']);
}
else {
$form = array_merge($form, $extra);
}
if (variable_get('configurable_timezones', 1)) {
// Override field ID, so we only change timezone on user registration,
// and never touch it on user edit pages.
$form['timezone'] = array(
'#type' => 'hidden',
'#default_value' => variable_get('date_default_timezone', NULL),
'#id' => 'edit-user-register-timezone',
);
// Add the JavaScript callback to automatically set the timezone.
drupal_add_js('
// Global Killswitch
if (Drupal.jsEnabled) {
$(document).ready(function() {
Drupal.setDefaultTimezone();
});
}', 'inline');
}
$form['submit'] = array('#type' => 'submit', '#value' => t('Create new account'), '#weight' => 30);
$form['#validate'][] = 'user_register_validate';
return $form;
}
?>
bzw. für den Userlogin (Drupal 6: user.module ab Zeile 1257)
<?php
/**
* Form builder; the main user login form.
*
* @ingroup forms
*/
function user_login(&$form_state) {
global $user;
// If we are already logged on, go to the user page instead.
if ($user->uid) {
drupal_goto('user/'. $user->uid);
}
// Display login form:
$form['name'] = array('#type' => 'textfield',
'#title' => t('Username'),
'#size' => 60,
'#maxlength' => USERNAME_MAX_LENGTH,
'#required' => TRUE,
);
$form['name']['#description'] = t('Enter your @s username.', array('@s' => variable_get('site_name', 'Drupal')));
$form['pass'] = array('#type' => 'password',
'#title' => t('Password'),
'#description' => t('Enter the password that accompanies your username.'),
'#required' => TRUE,
);
$form['#validate'] = user_login_default_validators();
$form['submit'] = array('#type' => 'submit', '#value' => t('Log in'), '#weight' => 2);
return $form;
}
?>
sense-design | online solutions | Do not hack core!
Drupalcenter Verhaltensregeln | Threads bitte auf [gelöst] stellen.
Ist ein Mustercode vorhanden?
am 27.08.2011 - 18:47 Uhr
Hallo Werner,
danke für das umgehende Kommentieren :-)
Klar darfst Du mich korrigieren. Dafür ist dieses Forum doch schließlich da, oder?
Nun habe ich zum einen nur sehr begrenzten Bezug zu php-Codes; ich kenne so gerade das Nötigste, was man als User so braucht. Da bereitet es einem natürlich Schwierigkeiten, sich für das Registrierungs- und für das Anmeldefenster um ein paar Textveränderungen willen sich da hinein zu arbeiten.
Gibt es da eine Art Mustercode... ...mit Angabe, wo man ihn dem CMS beilegen muss?
Ich bin davon ausgegangen, dass man mit html und mit css ausreichend versorgt ist, wenn man mit Drupal arbeiten will - zumindest propagiert Drupal das überall! Aber man kann zugleich bei Drupal ja schlecht davon ausgehen, dass man mit einem Webprojekt gerade in der Registrierung -als eine der Visitenkarten gegenüber neu hinzukommenden Interessenten eines Webauftritts- keinerlei Textveränderungen vornehmen kann, ohne php zu beherrschen.
Ich denke nun mal logisch - wenn auch wahrscheinlich laienhaft, aber auch der Laie kann ja versuchen, etwas logisch nach zu vollziehen ....auch wenn er kein Programmierer ist ;-)
Ein solches "Formular" für die Registrierung ist doch im Grunde nichts anderes, als jede andere Seite in dem Managementsystem ansonsten auch. Oder irre ich mich da?
Worauf ich hinaus will ist, dass da doch irgendwo der Text in einem html festgehalten wird, in den quasi die Formularfelder eingearbeitet sind, in die der sich Registrierende oder sich Angemeldende ihre daten eingeben, die dann von Drupal gespeichert werden. Richtig, Werner?
Du schreibst nun:
Wenn eine Systemfunktion ein Formular bereitstellt, ....
- ja gut, das ist natürlich ein entscheidender Unterschied hinsichtlich der Funktion, die eine solche Seite hat im Gegensatz zu einer sonstigen Seite. Diese Seiten sind systembedingte Notwendigkeiten für die Userverwaltung. Aber dennoch sind sie andererseits nichts anderes, als ein html! Ansonsten würde doch beim Öffnen des Fensters (adäquat: beim Aktivieren des Anmelde- oder Registrierungshypertexts) sich keine Seite "Anmeldung" oder "Registrierung" auf unserem Bildschirmen aufbauen können. Nun stelle ich mir vor, dass dieser Text, den der sich Registrierende zu Gesicht bekommt, ja irgendwo niedergelegt sein muss.
Wo
ist das bitte, Werner?
Liege ich damit falsch, dass hier lediglich T e x t b a u s t e i n e geändert werden?
Liege ich damit falsch, dass keinerlei Funktionen an dem Registrierungsformular geändert werden?
Falls dem so ist - Wieso kann man denn nicht einfach an den Text gelangen und da ein paar Wörter austauschen?
Wenn ein Übersetzer da seine Übersetzung einbringt, dann macht der doch auch nichts anderes. Mit den Funktionen der betroffenen Seiten hat der doch überhaupt nichts am Hut! Er tauscht einfach die Variable "Deutschsprachige Beschreibung" gegen eine anderssprachige aus. Er wird doch nicht für jede Seite solch ein Modul benötigen, oder?
Herzlichst, Drupi
@ Sense
am 27.08.2011 - 19:15 Uhr
Danke für die ausführliche Antwort.
Ich werde gleich Stellung dazu nehmen (habe eine halbe Stunde an Werner geschrieben - siehe oben)
Grüße ==> Drupi
________
Nachtrag:
Toll geantwortet; sozusagen Zeile für Zeile!
Ich werde mich erst mit jedem Punkt damit beschäftigen, ehe ich antworten werde.
Danke nochmals, Sense.
Allerdings werde ich sicher noch Fragen haben.
Kein Grund, sich
am 27.08.2011 - 23:10 Uhr
Kein Grund, sich aufzuregen.
Es ist nun mal so, daß in Drupal die Formulare im Code entsprechender Module mittels der Forms-Api definiert werden. Dabei werden Texte (sofern der Programmierer das richtig macht) mittels der t-Funktion definiert und dadurch eine nachträgliche Übersetzung ermöglicht. Sofern das spezielle Textpassagen sind kannst Du, wie schon Sense geschrieben hat, mit Hilfe der Oberflächenübersetzung diese Texte ändern. Manchmal geht das auch nicht, weil die Texte nicht speziell genug sind, oder es Nebeneffekte gibt.
Mit hook_form alter kann ich das für eine spezielle Form in meiner Installation ändern. Hier mal ein Beispiel.
Ich habe bei einem Event-Datentyp Zeit und Datum trennen wollen. Das geht nur, wenn Du zwei Datumsfelder benutzt. Im Eingabeformular des Nodes steht nun zwei mal Von-Datum und zweimal Bis-Datum. Ich wollte aber beim zweiten Feld Von-Zeit und Bis-Zeit stehen haben. Hier kommst Du auch mit der Oberflächenübersetzung nicht weiter. Also muß ein Minimodul her.
Das braucht einen .info File
; $Id$
name = wla_event
description = Change event creation and edit form
package = wla
core = 6.x
Und dann einen Modul-File
<?php
/**
* Implementation of hook_form_FORM_ID_alter().
*/
function wla_event_form_event_node_form_alter (&$form, &$form_state) {
// set the function for dealing with the form once it's complete
$form['#after_build'][] = 'wla_event_after_build';
}
/**
* Modify CCK form elements on the form_event_node form.
*/
function wla_event_after_build($form, &$form_state) {
// change the values in the Time Field
$form['field_time'][0]['value' ]['#title'] = '„Von“-Zeit'; // was „Von“-Datum
$form['field_time'][0]['value2']['#title'] = '„Bis“-Zeit'; // was „Bis“-Datum
return $form;
}
Dieses Beispiel ist sogar schon komplexer, da beim ersten Aufruf der Funktion das Widget für das Datum noch nicht aufgebaut ist. Deshalb setze ich nur den Namen einer Funktion, die nach den Aufbau des Formulars aber vor seiner Anzeige aufgerufen wird und hier den Label-Text ändert (hier ohne die t-Funktion, da ich sonst für dieses Minimodul noch einen Übersetzungstext hätte anlegen müssen und es sich um eine rein deutsche Seite handelte).
In vielen Fällen reicht eine Funktion für kleine Änderungen. Aber der HTML-Code der Form ist auch beim Aufruf der after_build-Funktion noch nicht vorhanden. Der wird anschließend von Drupal generiert und dann an den Browser ausgeliefert.
Es tut mir leid, aber Deine Vorstellung von einem extistierenden HTML-File ist leider nicht zutreffend. Ich helfe Dir aber bei einem konkreten Problem gerne weiter.
Beste Grüße
Werner
.
Werner
drupal-training.de
Moderator und Drupal Trainer
* - - - - - - - - - - - - - - - - - - - - - - - - - - - *
@ wla / Dein Hilfeangebot
am 28.08.2011 - 01:12 Uhr
Hallo Werner,
Es tut mir leid, aber Deine Vorstellung von einem extistierenden HTML-File ist leider nicht zutreffend.
tja, da komme ich natürlich nicht umhin, das zu bestätigen, wenn es sich so verhält, wie ihr beide, Sense und Du, das schildert.
Die allgemein veröffentlichte Darstellung von Drupal (so, wie es sich in der Öffentlichkeit präsentiert) mit html und css-Kenntnissen "fast" alles erreichen zu können, was man gestalten will, ist zwar weitgehend richtig; Pech allerdings, wenn man davon betroffen ist, in den Bereich derer zu fallen, deren Änderungswünsche durch das Wörtchen "fast" ausgegrenzt werden ;-)
Um das alles zu verstehen (die h o o k s und dann beispielsweise, was überhaupt eine t-Funktion ist) werde ich das Wochenende über mal ein wenig bei Drupal.org schmökern, um so in etwa zu wissen, wovon überhaupt die Rede ist.
Ansonsten ist (bis auf ein Darstellungsproblem des Websitetitels auf dem Slider) alles funktionsfähig, schlank (ohne einem einzigen corefremden Modul) toppschnell und optisch bis ins kleinste Detail so umgesetzt, wie ich es haben wollte. Ich habe sogar auf die Taxonomie und auf alle Navigationsofferten von Drupal verzichtet und mir ein eigenes Linksystem in den Sideboards aufgebaut, um meine Orientierungsvorgaben optimieren zu können und gestalterisch dem Gesamtbild der Seite zu entsprechen. Die bei den vielen von mir deaktivierten Modulen verbleibenden Core Module ergeben ein kompaktes, auf das Wesentliche zugeschnittenes Gerüst, das die Resourcen möglichst gering beansprucht. Dabei bin ich bis jetzt mit html und css vollständig ausgekommen!
Es ist hoffentlich verständlich, dass ich nur für die paar Textänderungen auf den beiden besagten, vom System bereitgestellten Seiten, mir nun nicht die ganzen php-Kenntnisse aneignen möchte ...zum Beispiel, wie man selbst ein Modul aufbaut, weil ich ansonsten wohl kein weiteres Modul benötige. Alles ist soweit komplett.
Insofern werde ich die von Dir, Werner, angebotene Hilfestellung gern annehmen und ich werde gern darauf zurück kommen.
Wenn ich soweit bin melde ich mich wieder und wünsche allen einen schönen Sonntag.
:-)
Grüße ==> Drupi
DrupiDino schriebWieso kann
am 28.08.2011 - 08:09 Uhr
Wieso kann man denn nicht einfach an den Text gelangen und da ein paar Wörter austauschen?
Einen Oberflächen-Text kannst du unter "Verwalten -> Strukturierung -> Oberfläche übersetzen" ändern und solange du nicht den eigentlichen Sinn des Ursprungstextes änderst oder um Inhalte erweiterst, die mit dem Ursprungstext rein gar nichts zu tun haben, solltest du keine Probleme bekommen. In den beiden anderen genannten Fällen solltest du dies - wie hier schon empfohlen - besser mit einem kleinen Modul realisieren.
Bei Hagen Graf findest du übrigens ein paar grundlegende Infos zum Thema: klick
Do it with Drupal.