2012-11-01 3 views
1

이라는 추가 사용자 정의 필드 ()를 만들었습니다. 나는 onUserBeforeSave() 함수를 플러그인 내의 PHP 파일에 추가했다. 이것은 등록 양식의 이름뿐 아니라 내 사용자 정의 필드에서 esrnumber를 가져 와서 데이터베이스를 확인하고 일치하는 경우 true를 반환하기로되어 있습니다. 따라서 사용자가 등록 할 수 있습니다.JRequest :: getVar()가 내 사용자 정의 프로파일/등록 플러그인에서 아무것도 반환하지 않는 이유는 무엇입니까?

문제는이 PHP 스크립트로 양식의 필드 값을 가져올 수없는 것입니다. 아래는 제 코드입니다. 당신이 그 대부분이 불필요 볼 수 있듯이

function onUserBeforeSave($user, $isnew, $new){ 
//sql code removed for example 
    $foundesr = false; 
    if ($_SERVER['REQUEST_METHOD'] == 'GET' && isset($_GET['esrnumber'])) { 
    $test = $_GET['esrnumber']; 
    } else if ($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST['esrnumber']))   { 
     $test = $_POST['esrnumber']; 
    } else { 
     $test = "booo"; 
    } 
    if($foundesr == false){ 
     JError::raiseWarning(1000, JText::_('There is a problem with your ESR number, ' . JRequest::getVar('username') . JRequest::getVar('esrnumber') . JRequest::getVar('jform_username') . $test . 'it does not match that name in our records.')); 
     return false; 
    } 
    return true; 
} 

, 나는 단지 그들 모두가 빈 반환, 등록 양식 필드의 값을 검색하기 위해 여러 가지 방법을 시도했습니다. 내가 어디로 잘못 가고 있니? 내 양식의 값을이 메소드로 간단하게 가져올 수 있습니까? 나는 개인적으로 새로운 방법 내가 만든 것을 호출되지

<div class="registration"> 
<form id="member-registration" action="/index.php/component/users/?task=registration.register" method="post" class="form-validate"> 
      <fieldset> 
       <legend>User Registration</legend> 
       <dl> 
           <dt> 
       <span class="spacer"><span class="before"></span><span class="text"><label id="jform_spacer-lbl" class=""><strong class="red">*</strong> Required field</label></span><span class="after"></span></span>         </dt> 
      <dd>&#160;</dd> 
              <dt> 
       <label id="jform_name-lbl" for="jform_name" class="hasTip required" title="Name::Enter your full name">Name:<span class="star">&#160;*</span></label>         </dt> 
      <dd><input type="text" name="jform[name]" id="jform_name" value="[email protected]" class="required" size="30"/></dd> 
              <dt> 
       <label id="jform_username-lbl" for="jform_username" class="hasTip required" title="Username::Enter your desired user name">Username:<span class="star">&#160;*</span></label>         </dt> 
      <dd><input type="text" name="jform[username]" id="jform_username" value="[email protected]" class="validate-username required" size="30"/></dd> 
              <dt> 
       <label id="jform_password1-lbl" for="jform_password1" class="hasTip required" title="Password::Enter your desired password - Enter a minimum of 4 characters">Password:<span class="star">&#160;*</span></label>         </dt> 
      <dd><input type="password" name="jform[password1]" id="jform_password1" value="" autocomplete="off" class="validate-password required" size="30"/></dd> 
              <dt> 
       <label id="jform_password2-lbl" for="jform_password2" class="hasTip required" title="Confirm Password::Confirm your password">Confirm Password:<span class="star">&#160;*</span></label>         </dt> 
      <dd><input type="password" name="jform[password2]" id="jform_password2" value="" autocomplete="off" class="validate-password required" size="30"/></dd> 
              <dt> 
       <label id="jform_email1-lbl" for="jform_email1" class="hasTip required" title="Email Address::Enter your email address">Email Address:<span class="star">&#160;*</span></label>         </dt> 
      <dd><input type="text" name="jform[email1]" class="validate-email required" id="jform_email1" value="[email protected]" size="30"/></dd> 
              <dt> 
       <label id="jform_email2-lbl" for="jform_email2" class="hasTip required" title="Confirm email Address::Confirm your email address">Confirm email Address:<span class="star">&#160;*</span></label>         </dt> 
      <dd><input type="text" name="jform[email2]" class="validate-email required" id="jform_email2" value="[email protected]" size="30"/></dd> 
                      </dl> 
    </fieldset> 
       <fieldset> 
       <legend>User ESR Profile</legend> 
       <dl> 
           <dt> 
       <label id="jform_esrprofile_esrnumber-lbl" for="jform_esrprofile_esrnumber" class=" required">ESR Number<span class="star">&#160;*</span></label>         </dt> 
      <dd><input type="text" name="jform[esrprofile][esrnumber]" id="jform_esrprofile_esrnumber" value="" class="required"/></dd> 
          </dl> 
    </fieldset> 
     <div> 
     <button type="submit" class="validate">Register</button> 
     or   <a href="/" title="Cancel">Cancel</a> 
     <input type="hidden" name="option" value="com_users" /> 
     <input type="hidden" name="task" value="registration.register" /> 
     <input type="hidden" name="b44564159b9c7ebe3b7caf93cc5ce8de" value="1" />  </div> 
</form> 

(모든 기본 재료는 asfaik) 여기

줌라 양식에 대해 생성하는 HTML 코드입니다, 난 그냥 방법을 생성 Joomla는 양식을 제출할 때 자동으로 호출하는 것 같습니다.

건배. 대신 입력 대신 $new 변수를 사용하여 검색 할 수 JRequest를 사용

+0

매개 변수로 'onUserBeforeSave' 함수에 값을 전달해야합니다. – Toretto

+0

안녕하세요, 어떻게해야합니까? 내가 따라 갔던 가이드는 그것을 언급하지 않았다. $ user 또는 $ new 매개 변수일까요? 확실히 그 사용자에 대한 상세한 정보가 없으므로 $ new 매개 변수가됩니다. 그렇다면 어디에서 값을 전달할 것인가? 사용자가 제출을 클릭하면 함수가 제대로 호출 된 것 같습니다. – user1785732

+0

'onUserBeforeSave' 함수를 호출 한 곳에서 코드를 보여 주시겠습니까? – Toretto

답변

0

를 해결했다. 아무도이 스레드를 발견하고 알 필요가 있다면, 이것은 내가 onUserBeforeSave($user, $isnew, $new) 함수에서 어떻게했는지입니다.

JArrayHelper::getValue($new, 'name', 0, 'STRING') 

변수를 제공합니다. 원하는 사용자 세부 정보를 얻으려면 이름을 변경하십시오.나는이 작업을 수행했다 (내 사용자 정의 필드)에 ESR 번호를 얻으려면 :

 foreach ($new['esrprofile'] as $k => $v) { 
      $esrnumber = $v; 
     } 

수의 하나의 인스턴스 만 거기에 내가 생각하는 방법으로보고 그 배열에서 그 ESR 번호를 얻기의보다 효율적인 방법은 아마도있다 거기에 있지만 지금은 효과가 있습니다.

0

: 잘못된 이름을 사용하고 있기 때문에

echo $new->username; 
echo $new->email; 

그러나, JRequest::getVar가 작동하지 않는 이유는 간단하다. 이름이 아닌 입력 필드의 ID를 사용하려는 것 같습니다. 당신이> 2.5 참조 줌라 버전을 사용하는 경우, 또한

$jform = JRequest::getVar('jform'); 
$username = $jform['username']; 

: 등

입력 이름

jform를 [이름] 그래서 전체 배열을 얻을 JRequest를 사용하여 검색 할 JInput : 모든 JRequest의 http://docs.joomla.org/Retrieving_request_data_using_JInput

0

우선은 더 이상 사용되지 않으며 2.5에서 사용할 수 없습니다 그것은 완전히 새로운 Joomla를 3.0에서 제거됩니다. 대신과 같이 JInput를 사용

$jinput = JFactory::getApplication()->input; 
$fields = $jinput->getArray('jform'); 

이제과 같이 행해져 Yout 필드를 참조 할 수 있어야한다 :

$fields['name']; 
$fields['username']; 
etc. 
+0

나는 그것을 시도했지만'$ fields = $ jinput-> getArray ('jform');'줄을 어기는 것 같다. 그냥 흰색 화면을 만듭니다. 나는 그것을 $ fields = $ jinput-> getArray ($ new);로 변경하려고 시도했다. 그것은 그것을 깨뜨리지는 않았지만 단지 비어있는 것처럼 보였다. – user1785732

+0

무슨 일이 일어나고 있는지 보려면 오류 표시를 사용하도록 설정해야합니다. –

1
$jinput = JFactory::getApplication()->input; 
$fields = $jinput->get('jform','','array');