2014-01-21 3 views
3

Joomla 3을 기반으로 웹 사이트를 구축하고 있습니다. 이름, 사용자 이름, password1 (두 번째, 첫 번째는 password2이므로 필드 유효성 검사를 비활성화해야합니다.) and email2 그리고 email1을 사용자 이름으로 사용합니다 (사용자 인증을 위해 플러그인 이메일을 설치했습니다). 파일 구성 요소/com_users/models/forms/registration.xml에서이 필드를 제거하려고했지만 유효성 검사가 아직 남아 있습니다. 이 필드를 삭제하지 않고 필수 항목 인 "true"를 false로 변경하면 등록이 전혀 작동하지 않으며 DB에 저장된 사용자도 전혀 작동하지 않습니다. 이 필드를 어떻게 비활성화 할 수 있습니까?Joomla 3 등록에서 일부 필드의 유효성을 사용하지 않도록 설정하는 방법

+0

코어 파일을 해킹하지 않는 것 외에도. Joomla 3의 정확한 버전을 사용하고 있습니까? – Craig

+0

최신 3.2.1 – stckvrw

+0

사람들이 원하는 것을 넣을 수있게 허용하는 것이 매우 위험 할 수 있으므로 유효성 검사를 변경하지 말고 변경하지 않으십시오. 이런 이유로 몇 가지 최소한의 것들이 시행됩니다. 정말로 원하는 것은 새로운 등록 구성 요소를 만들고 핵심 구성 요소를 사용하지 않는 것입니다. 그런 다음 누군가가 핵심 서비스로 이동하려고 시도하면 리디렉션을 강제하기 위해 플러그인을 사용합니다. 핵심 joomla에서 당신은 사용자 이름, 비밀 번호 및 이메일 주소가 있어야하며 그들은 플러그인을 사용하여 사용자 이름과 이메일이 동일하게 작동하도록 할 수 있지만 그들은 별도로 저장해야합니다. – Elin

답변

4

쉬운 해결 방법이 아니므로 Joomla 및 PHP에 대한 기본적인 지식이 필요하지만 가능한 한 간단하게 설명해 드리겠습니다. 뷰 템플릿 재정의 당신이 당신의 등록 뷰 템플릿의 재정의를 만들어야합니다 모든

먼저 (증거 줌라 업데이트를 유지하기 위해) 만들기

>>>. 이렇게하려면 /templates/YOUT_TEMPLATE/html/com_users/registration 폴더를 만들고 /components/com_users/views/registration/tmpl/default.php 파일을 복사하십시오.

지금부터 템플릿 폴더의 등록 출력을 수정할 수 있습니다. 등록 양식 출력 수정

>>> 줌라 파일 형태가 정의 /components/com_users/models/forms/registration.xml, 모든 필드를 취하고, 그들을 출력 기본적

관점. 그러나 모든 필드를 사용하지 않으려면 수동으로 필드를 출력해야합니다. 예제 코드는 등록 할 전자 메일 및 암호 필드 만 출력합니다. 다음은 샘플 코드는 이렇게이다 : (default.php 파일)

<?php 
defined('_JEXEC') or die; 
JHtml::_('behavior.keepalive'); 
?> 
<div class="grid_8" id="register_block"> 
<div class="content_block"> 
<h1>Registracija</h1> 
<div class="login<?php echo $this->pageclass_sfx?>"> 
<form id="member-registration" action="<?php echo JRoute::_('index.php?option=com_users&task=registration2.register'); ?>" method="post" enctype="multipart/form-data"> 
<div> 
<div class="login-fields"> 
<label id="jform_email1-lbl" for="jform_email1">E-mail:</label> 
<input type="text" name="jform[email1]" id="jform_email1" value="" size="30"> 
</div> 
<div class="login-fields"> 
<label id="jform_password1-lbl" for="jform_password1">Password:</label> 
<input type="password" name="jform[password1]" id="jform_password1" value="" autocomplete="off" size="30"> 
</div> 
<button type="submit" class="button"><?php echo JText::_('JREGISTER');?></button> 
<input type="hidden" name="option" value="com_users" /> 
<input type="hidden" name="task" value="registration2.register" /> 
<?php echo JHtml::_('form.token');?> 
</div> 
</form> 
</div> 
</div> 
</div> 

주의 사항, 나는 또한 registration2.registerregistration.register에서 작업 값을 대체 한 것으로, 나는 우회 이런 짓을 내 자신의 컨트롤러를 사용하는 일부 유효성 검사 규칙. 컨트롤러 오버라이드를 만들기

>>>

파일 /components/com_users/controllers/registration.php를 찾아이 같은 폴더에 registration2.php 전화의 사본을 만들 수 있습니다.

파일 열기 registration2.php 및 Joomla를 등록 양식에 지금부터 UsersControllerRegistration2

UsersControllerRegistration에서의 클래스 이름을 변경 새 사용자를 만들려면이 클래스를 사용합니다.

레지스터라는 방법을 찾아이 줄을 찾을 :

$requestData = JRequest::getVar('jform', array(), 'post', 'array'); 

이 줌라가의 얻을 등록 양식 데이터입니다.다음 줄을 추가합니다 :

$requestData['name'] = $requestData['email1']; 
$requestData['username'] = $requestData['email1']; 
$requestData['email2'] = $requestData['email1']; 
$requestData['password2'] = $requestData['password1']; 

그것은 등록 정보 누락 추가하고 확인을 통과하는 데 도움이됩니다.

참고 : 이것은 주 로직을 표시하는 샘플 코드입니다. 누구든지 더 좋은 해결책을 가지고 있다면, 나는 그것을 듣기보다 기쁠 것입니다.

0

것은 같은 생각에 따라, 간단한 해결책은 com_users \ 전망 \ 등록 \ tmpl \ default.php 위

<button type="submit" class="btn btn-primary validate"><?php echo JText::_('JREGISTER');?></button>

의 값에 숨겨진 입력을 추가 포함 할 수

<input type="hidden" id="jform[username]" name="jform[username]" value="username" /> 
<input type="hidden" id="jform_name" name="jform[name]" value="name" /> 

그것을 유효성 검사를 통과하면 컨트롤러 등을 더 이상 오버라이드 할 필요가 없습니다.

관련 문제