Po pierwsze, mam świadomość tego pytania:
/programming/14799733/remove-name-field-from-joomla-registration-form
Ale link w jego odpowiedzi jest martwy, a wspomniana ścieżka do pliku nie istnieje w najnowszej wersji Joomla (wersja 3.3), więc odpowiedź jest bezużyteczna.
To, czego chcę, jest proste: formularz rejestracyjny dla Joomla wygląda następująco:
Chcę, aby proces rejestracji był jak najprostszy dla moich użytkowników, aby faktycznie go ukończyli, i są pewne problemy:
- Nie muszę znać prawdziwego imienia użytkownika.
- Wolę nie mieć pól „potwierdzania”. Ogólny konsensus jest taki, że nie są one konieczne. /ux/484/is-a-repeat-password-field-necessary-in-a-signup-page
- Wszystko jest wymagane, po co męczyć się z zaznaczaniem wymaganych pól?
Z pewnością jest to znacznie lepsza strona rejestracji:
Zmodyfikowałem plik \ components \ com_users \ models \ form \ register.xml, aby formularz wyglądał tak, jak chcę i działał! Ale za każdym razem, gdy przesyłam formularz, sprawdzanie poprawności nadal szuka brakujących pól, więc informuje mnie, że muszę podać nazwę:
„Rejestracja nie powiodła się: proszę podać swoje imię i nazwisko”.
Jak mogę wyłączyć sprawdzanie pola nazwy, a także dwóch pól potwierdzenia?
Ponieważ nazwa jest wymagana, chciałbym ustawić ją na podaną nazwę użytkownika (więc nazwa użytkownika i nazwa są domyślnie takie same). Jeśli użytkownik naprawdę chce po rejestracji ustawić prawdziwe imię i nazwisko na swojej stronie profilu , powinien to zrobić, ale nie powinno to być wymagane.
Czy robię to w niewłaściwy sposób? Czytałem już w niektórych miejscach, że modyfikowanie podstawowych plików Joomla nie jest dobre, ponieważ może się włamać podczas aktualizacji i że zamiast tego należy użyć „przesłonięcia”. Zazwyczaj odpowiedzi te po prostu zawierają link do strony Joomla na temat przesłonięć i nie zawierają dalszego wyjaśnienia, jak je wykorzystać, aby zrobić to, czego chce pytający. Próbowałem je rozgryźć, ale nie mogę, więc jeśli przesłonięcia są dobrym rozwiązaniem, wyjaśnij, jak bym to zrobił z nimi, zamiast po prostu linkować do samouczka zastępowania.
Byłbym bardzo wdzięczny za wszelką pomoc, którą próbuję rozwiązać od kilku godzin!
źródło
Odpowiedzi:
Idealnie byłoby to zrobić we wtyczce użytkownika. Nie jestem pewien, czy wiele osób zdaje sobie z tego sprawę, ale możesz edytować formularz z wtyczki (nie wymaga hakowania rdzenia).
Podobnie wtyczka zobaczy dane wejściowe, zanim model podejmie próbę zapisania pozycji, dzięki czemu można wyśmiewać niektóre pola duplikacji pól, aby zmusić ją do przejścia weryfikacji.
Ta funkcja wtyczki „Użytkownicy” umożliwia zmianę formy:
Następnie można użyć funkcji onUserBeforeSave, aby zresetować dowolne pola, które należy zresetować, aby przejść sprawdzanie poprawności. (Może to nie być całkowicie konieczne, więc spróbuj bez i zobacz, jakie błędy otrzymujesz).
źródło
Ok, więc myślałem o podejściu bez konieczności rdzenia czegokolwiek lub instalowania rozszerzeń innych firm. Moja metoda będzie obejmowała zastąpienie szablonu, które trzeba będzie wykonać dla komponentu com_users , a konkretnie w widoku Rejestracja .
Teraz w przypadku pól (zakładając, że wszystkie ustawienia zastąpienia szablonu zostały skonfigurowane), nie będziemy ich usuwać, ale zamiast tego będziemy je ukrywać, ponieważ kontroler i modal wymagają od nich danych. Więc otwórz następujący plik, który jest teraz zastąpieniem szablonu:
i dodaj następujący kod u góry pliku zaraz po
JHtml::_('behavior.formvalidation');
:Dodałem kilka komentarzy, abyś wiedział, co robi każdy fragment kodu.
Mam nadzieję że to pomoże :)
źródło
Odpowiedź DavidaFritscha była bardzo pomocna. Kilka problemów, które znalazłem, to:
Odp .: Nie można całkowicie usunąć niektórych obowiązkowych pól, ponieważ powoduje to problemy z filtrowaniem danych podczas przesyłania formularza (patrz komentarze w kodzie poniżej). Aby temu przeciwdziałać, ukryj zamiast usuwać pola z obiektu formularza. B) Zdarzenie onUserBeforeSave nie jest uruchamiane, dopóki nie jest za późno, aby zapobiec odrzuceniu przez formularz logiki sprawdzania poprawności rejestracji. Zamiast tego użyj zdarzenia onUserBeforeDataValidation.
W moim szczególnym przypadku chciałem tylko adres e-mail i hasło. Joomla wrzuciła tu jednak komplikację, ponieważ adres e-mail pojawiał się po haśle (podyktowany porządkiem pól zadeklarowanych w pliku register.xml), co wyglądałoby głupio z punktu widzenia doświadczenia użytkownika. Aby obejść ten problem, ponownie oznaczyłem pole nazwy użytkownika na „Adres e-mail”, a zamiast tego ukryłem pole adresu e-mail. Adres e-mail jest następnie domyślnie używany w nazwie użytkownika podczas przesyłania formularza.
(Drobna uwaga: ograniczyłem wtyczkę do działania tylko w formularzu „com_users.registration” dla moich celów, w porównaniu do odpowiedzi Davida, która rozważa także inne formularze).
źródło