Erstens ist mir diese Frage bewusst:
/programming/14799733/remove-name-field-from-joomla-registration-form
Aber der Link in seiner Antwort ist tot, und der erwähnte Dateipfad existiert in der neuesten Joomla-Version (Version 3.3) nicht, so dass die Antwort überhaupt keinen Nutzen hat.
Was ich möchte ist einfach: Das Anmeldeformular für Joomla sieht so aus:
Ich möchte sicherstellen, dass der Registrierungsprozess für meine Benutzer so einfach wie möglich ist, damit sie ihn tatsächlich abschließen können, und es gibt einige Probleme:
- Ich muss den richtigen Namen des Benutzers nicht kennen.
- Ich möchte lieber keine "Bestätigungsboxen" haben. Der allgemeine Konsens ist, dass sie nicht notwendig sind. /ux/484/is-a-repeat-password-field-necessary-in-a-signup-page
- Alles ist erforderlich, warum sich die Mühe machen, Pflichtfelder zu markieren?
Dies ist sicherlich eine weitaus bessere Registrierungsseite:
Ich habe die Datei \ components \ com_users \ models \ forms \ registration.xml geändert , damit das Formular so aussieht, wie ich es möchte, und es hat funktioniert! Aber wenn ich das Formular abschicke, sucht die Validierung immer noch nach den fehlenden Feldern und informiert mich, dass ich einen Namen angeben muss:
"Registrierung fehlgeschlagen: Bitte geben Sie Ihren Namen ein."
Wie kann ich die Überprüfungen für das Namensfeld sowie die beiden Bestätigungsfelder deaktivieren?
Da ein Name erforderlich ist, möchte ich den Namen auf den angegebenen Benutzernamen setzen (damit Benutzername und Name standardmäßig identisch sind). Wenn der Benutzer nach der Registrierung tatsächlich einen echten Namen auf seiner Profilseite festlegen möchte , sollte dies möglich sein, dies sollte jedoch nicht erforderlich sein.
Gehe ich das falsch an? Ich habe an einigen Stellen gelesen, dass das Ändern von Kern-Joomla-Dateien nicht gut ist, da es bei einem Update zum Bruch kommen könnte und stattdessen "Overrides" verwendet werden sollten. Normalerweise verlinken diese Antworten einfach auf Joomlas Seite über Überschreibungen und geben keine weitere Erklärung darüber, wie man sie verwendet, um das zu tun, was der Fragesteller will. Ich habe versucht, sie herauszufinden, kann es aber nicht. Wenn also Überschreibungen der richtige Weg sind, erläutern Sie bitte, wie ich das mit ihnen machen würde, anstatt nur auf das Tutorial zum Überschreiben zu verweisen.
Ich würde mich sehr über jede Hilfe freuen, die Sie leisten können. Ich versuche das jetzt schon seit ein paar Stunden herauszufinden!
quelle
Antworten:
Idealerweise wird dies alles in einem Benutzer-Plugin erledigt. Ich bin mir nicht sicher, ob dies vielen Leuten bewusst ist, aber Sie können das Formular über ein Plugin bearbeiten (kein Core-Hack erforderlich).
Ebenso sieht das Plugin die Eingabe, bevor das Modell versucht, den Eintrag zu speichern, sodass Sie einige der Feldduplikationsfelder verspotten können, um zu erzwingen, dass sie die Validierung bestehen.
Mit dieser Funktion in einem "Benutzer" -Plugin können Sie die Form ändern:
Anschließend können Sie eine onUserBeforeSave-Funktion verwenden, um alle Felder zurückzusetzen, die Sie zurücksetzen müssen, um die Validierung zu bestehen. (Dies ist möglicherweise nicht unbedingt erforderlich. Versuchen Sie es also ohne und sehen Sie, welche Fehler angezeigt werden.)
quelle
Ok, also habe ich über einen Ansatz nachgedacht, ohne irgendetwas zu hacken oder Erweiterungen von Drittanbietern zu installieren. Meine Methode beinhaltet eine Vorlagenüberschreibung, die Sie für die com_users- Komponente vornehmen müssen , insbesondere für die Registrierungsansicht .
Nun zu den Feldern (vorausgesetzt, Ihre Vorlagenüberschreibung ist vollständig eingerichtet), werden diese nicht entfernt, sondern ausgeblendet, da der Controller und das Modal Daten von ihnen benötigen. Öffnen Sie also die folgende Datei, die jetzt von Ihrer Vorlage überschrieben wird:
und fügen Sie den folgenden Code in der Nähe des oberen Endes der Datei hinzu
JHtml::_('behavior.formvalidation');
:Ich habe einige Kommentare hinzugefügt, damit Sie wissen, was die einzelnen Codefragmente bewirken.
Hoffe das hilft :)
quelle
@ DavidFritschs Antwort war sehr hilfreich. Ein paar Probleme, die ich fand, waren:
A) Sie können bestimmte Pflichtfelder nicht vollständig entfernen, da dies zu Problemen bei der Datenfilterung beim Absenden des Formulars führt (siehe Kommentare im folgenden Code). Um dem entgegenzuwirken, verstecken Sie die Felder, anstatt sie aus dem Formularobjekt zu entfernen. B) Das Ereignis onUserBeforeSave wird erst ausgelöst, wenn es zu spät ist, um zu verhindern, dass die Registrierungsüberprüfungslogik die Formularübermittlung ablehnt. Verwenden Sie stattdessen das Ereignis onUserBeforeDataValidation.
In meinem speziellen Fall war alles, was ich wollte, E-Mail-Adresse und Passwort. Joomla warf hier jedoch eine Komplikation ein, da die E-Mail-Adresse nach dem Kennwort angezeigt wurde (diktiert durch die Reihenfolge der in der Datei registration.xml deklarierten Felder), was aus Sicht der Benutzererfahrung dumm aussehen würde. Um das zu umgehen, habe ich das Feld "Benutzername" in "E-Mail-Adresse" umbenannt und stattdessen das Feld "E-Mail-Adresse" ausgeblendet. Die E-Mail-Adresse wird beim Absenden des Formulars standardmäßig als Benutzername angegeben.
(Kleinere Anmerkung: Ich habe das Plugin darauf beschränkt, für meine Zwecke nur das Formular 'com_users.registration' zu bearbeiten, im Vergleich zu Davids Antwort, die auch andere Formulare berücksichtigt.)
quelle