2011-03-03 2 views
0

세션을 사용하여 Zend 응용 프로그램의 옵션으로 다중 선택 상자를 채 웁니다.세션을 사용하여 zend 양식 필드를 채우는 방법은 무엇입니까?

사용자가 하나 이상의 옵션을 선택하고 양식의 다른 필드를 채운 다음 제출합니다. 사용자가 다중 선택에서 모든 옵션을 선택하지 않은 경우 양식이 다시 표시되지만 다중 선택은 사용자가 마지막으로 선택하지 않은 옵션 만 갖습니다. 이 프로세스는 다중 선택 왼쪽에서 처리 할 옵션이 없을 때까지 계속됩니다. 그러나 때,

if($form_successful){ 
// TODO remove $post['keyword_names'] (i.e. already processed) from $keyword_names (that come from $_SESSION) 
    $keyword_names = array_diff($keyword_names, $post['keyword_names']); 
    print_r($keyword_names); 
if(is_array($keyword_names) && !empty($keyword_names)){ 
// save updated $keyword_names into $_SESSION['workflow1'] 
$session = new Zend_Session_Namespace('workflow1'); 
$session->keyword_names = $keyword_names; 

// set flag to false so that we display form again 
$form_successful = false; 
}else{ // all keywords have been assigned 
// go to next step 
$this->_redirect('/workflow-1/step-'.($step+1).'/'); 
} 
} 

print_r($keyword_names); 표시 올바른 옵션 : 여기

나는 그들이 다중 선택 상자를 채우는 데 사용되지 않도록 이미 처리 된 옵션을 제거하는 데 사용하는 코드입니다 사용자가 제출할 때 양식이로드되면 다중 선택은 처음부터 선택한 옵션을 표시합니다. 예를 들어 사용자가 방금 선택한 후 제출 한 옵션이 다중 선택에서 제외되지 않은 경우 사용자가 양식을 다시 제출할 때만 나타납니다 다중 선택 상자가 업데이트됩니다.

감사합니다.

답변

1

URL 매개 변수를 사용하여 문제를 해결했습니다. 다음은 코드입니다 (일부 큰 변경이 있었기 때문에 처음 게시 한 것과 많이 다를 수 있음).

// after successful form submission 
    if($form_successful){ 
     // remove $post['keyword_names'] (i.e. already processed) from $keyword_names (that come from $_SESSION) 
     $keyword_names = array_diff($keyword_names, $post['keyword_names']); 

     // save remaining $keyword_names into $_SESSION['workflow1'] 
     $session = new Zend_Session_Namespace('workflow1'); 
     $session->keyword_names = $keyword_names; 

     if(is_array($keyword_names) && !empty($keyword_names)){ 

      // redirect to the same step again - to ensure that the form will reflect (in select lists) newly created AdGroup and/or Campaign 
      // GET parameteres ($params_array) provide a way to remember user's choice 
      $params_array = array(); 
      if(!empty($post['match_type_id'])){ 
       $params_array['match_type_id'] = $post['match_type_id']; 
      } 
      if(!empty($post['with_permutations'])){ 
       $params_array['with_permutations'] = $post['with_permutations']; 
      } 
      if(!empty($ad_group_id)){ 
       $params_array['ad_group_id'] = $ad_group_id; 
      }          
      $this_step_url = UrlUtils::assemble('', $this->getRequest()->getActionName(), $this->getRequest()->getControllerName(), $this->getRequest()->getModuleName(), $params_array); 
      $this->_redirect($this_step_url);    

     }else{ // all keywords have been assigned 
      // go to next step 
      $this->_redirect('/workflow-1/step-'.($step+1).'/'); 
     } 
    } 
0

그래서 여기에 Zend_Form 객체에 대한 코드가 없습니다. 양식 요소를 어떻게 채우고 있습니까? Zend_Form (또는 양식에 다른 코드 다이얼을 확장) 클래스 코드를 게시하면 도움이 될 수 있습니다. 그러나 어느 경우 든 multiselectbox의 각 항목에 대해 setMultiOptions() 메서드 또는 addMultiOption()을 사용하여 multiselectbox를 채울 수 있습니다.

+0

내 양식이 길고 복잡합니다. 코드 - http://pastebin.com/gBWM42ct - 처음에는 다중 선택 상자를 채우는 데 사용합니다. - 옵션을 생성하기 위해 양식에서 루프 된 세션에서 검색 한 키워드 이름 배열을 전달합니다. 다중 선택 용. – Sid

+0

그러나 이것은 요소의 초기화 코드 일뿐입니다. 다중 선택기를 채우는 방법은 무엇입니까? setMultioption의 키/값 쌍을 유지하고 selectbox를 채우는 코드는 무엇입니까? – ufucuk

+0

http://pastebin.com/9pBs031c – Sid

관련 문제