2011-11-23 5 views
2

모양을 원하는 모양으로 양식 레이아웃을 형성하는 데 문제가 있습니다. 여기에있는 문제는 파일 요소 자체를 꾸미는 것이 아니며, 문제는 $file->setMultiFile(3)과 함께 제공됩니다. 여러 파일 입력 요소 사이에 구분 기호를 넣어서 서로 뒤에있는 행에 배치 할 수없는 것처럼 보입니다.Zend_Form 파일 필드 구분자

$this->getElement('file')->setDecorators(array(
    'File', 
    'Errors', 
    array(array('td' => 'HtmlTag'), array('tag' => 'td')), 
    array('Label', array('tag' => 'td')), 
    array(array('tr' => 'HtmlTag'), array('tag' => 'tr')) 
)); 

전류 출력은 다음과 같습니다 :

<tr> 
    <td id="file-label"> 
     <label class="optional" for="file">File</label> 
    </td> 
    <td> 
     <input type="file" id="file-0" name="file[]"> 
     <input type="file" id="file-1" name="file[]"> 
     <input type="file" id="file-2" name="file[]"> 
    </td> 
</tr> 

내가 원하는 것은 내가 장식을 추가 나중에 그런

$oElement = new Zend_Form_Element_File('file'); 
$oElement->setLabel('File') 
    ->setMultiFile(3) 
    ->setDestination('location on server'); 
$this->addElement($oElement); 

:

내가 파일 요소를 생성하는 방법이다 입력 요소 사이에 <br />이 있어야 단일 행에 배치되지 않습니다. 이것이 데코레이터를 통해 가능합니까? radio/mutliselect/multicheckbox를 사용하면 setSeparator 함수를 사용할 수 있지만이 방법은 파일 요소에 해당하지 않습니다.

아무도 나를 도와 줄 수 없나요? 사전에 감사합니다,

Ilian

+0

빠른 수정으로 jQuery를 추가 하시겠습니까? –

+1

이것을 읽으십시오 : http://stackoverflow.com/questions/2143462/how-do-i-use-viewscripts-on-zend-form-file-elements/2993182#2993182 – JellyBelly

+0

뷰 스크립트 사용을 피하려고했지만 그 밖의 아무것도 나타나지 않으면 내가 할 것 같아. 감사. – Ilians

답변

2

이 조금 부정하지만, 당신을 위해 다음과 같은 작업을해야 할 수 있습니다 양식에 요소를 추가 한 후

$fd = $oElement->getDecorator('File'); 

$fd->setOption('placement', 'PREPEND') 
    ->setOption('separator', '<br />'); 

당신이 그 코드를 삽입 할 수 있으며, 데코레이터를 변경하십시오.

Zend_Form_Decorator_File의 render() 메소드는 마크 업을 만들 때 구분 기호를 사용하지만 설정 방법이 없습니다. 게재 위치 및 구분 기호는 블랙리스트에 있지만 위의 트릭을 사용하면 설정할 수 있습니다. Zend_Form_Decorator_File에서

)는 (렌더링 : 나는 PREPEND에 배치를 설정했다

$separator = $this->getSeparator(); 
$placement = $this->getPlacement(); 
//... 

// in a loop, create the array of input elements 
$markup[] = $view->formFile($name, $htmlAttribs); 

//... 
// join each file element by separator, which cannot be set with setSeparator() 
$markup = implode($separator, $markup); 

, APPEND를 사용하는 경우, 그렇지 않으면 <br />*file input*<br />*file input*<br />*file input*했다.

희망이 있습니다.

+0

답장을 보내 주셔서 감사합니다. 한 가지를 제외하고는 큰 효과가 있습니다. 최대 파일 크기입니다. '$ fileElement-> addValidator ('Size', false, 102400);를 사용할 때 필드 상단에 숨겨진 입력을 추가합니다. 일반적으로 이것은 문제가되지 않지만 separator를 사용하면 숨겨진 필드 다음에 '
'을 추가하여 파일 필드가 잘못 배치 될 수 있습니다. 이 문제를 해결할 방법이 있습니까? – Ilians

+0

'Zend_Form_Decorator_File' 클래스를 살펴보고 render 함수에서 설정 한 것을 알아 냈습니다. 숨겨진 필드가 추가되는 방식을 변경할 수 있다고 생각하지 마십시오. ViewHelper를 사용해야 할 것입니다. – Ilians

+0

당신이'input [type = "hidden"] {margin : 0; 패딩 : 0} '배치를 수정하는 데 도움이 될 수 있습니다. – drew010