2012-11-28 2 views
0

내가 필요한 것은 CakePHP (Ver 2.2.2)가하고있는 일을하는 이유를 알 수있는 사람입니까? 확인 내 코드의 고장은 다음과 같습니다. DIV PageList는 두 개의 드롭 다운이있는 JQuery 아코디언입니다. 하나는 관리자가 새로운 사용을 추가하고 다른 하나는 모든 사용자를보고 약간 변경합니다. 사용자 추가는 문제없이 작동합니다.CakePHP, Form Helper 태그 문제가 페이지 된 결과

내 문제는 양식 도우미와 관련이 있습니다. 이전에 foreach 루프 외부에서 Form Create 호출을했는데 아무런 문제없이 작업 중이 었는데 사용자를 변경하려고했습니다. 다음 문제없이 저장하십시오. 결과를 요약 할 때 문제가 생기기 시작했습니다. Form Create가 foreach 외부에서 테이블 코드가 시작되기 직전에 표시된 마지막 결과 만 변경 사항을 저장할 수 있습니다. 문제의 원인을 찾았습니다. ID 필드는 항상 마지막으로 표시된 결과를 기본값으로 사용했습니다. 그래서 Form Create를 foreach 루프 내로 옮겼습니다.

이제는 작동하지만 어떤 이유로 시작 부분이 즉시 시작되므로 입력 내용이 이제 양식 태그 외부에 배치됩니까? foreach 루프 맨 아래에서 Form Helper end() 호출을 끝내기 때문에 왜 그런지 이해할 수 없습니다. 따라서 각 사용자를 고유 한 형식으로 표시해야합니다.

문제인지 확인한 후 여전히 이와 같이 사용할 수 있는지 확실하지 않습니다. 그러나 한 가지 문제는 W3C로 검증하지 않을 내 양식이 내 테이블에서 시작된다는 것입니다. 큰 문제는 아닙니다. 사이드 노트, 여전히 테이블을 사용해도 괜찮습니까? 나는 그 (것)들을 가진 자료를 목록으로 만들고 있는가? HTML 5 사양을 배우려고합니다. 하지만 실제로 테이블에 대해 아무것도 보지 못했 ...

많은 감사. 글렌 커티스.

echo '<div id="PageList">'; 

$OutputHolder = '<h3 class="Background-Titles">Add User</h3>'; 
$OutputHolder .= '<div class="Background-Content" id="AdminAddUser">'; 
$OutputHolder .= $this->Form->create('User', array('url'=>'http://glenns-showcase.net/projects/cake/DrWho/adminadd/', 'inputDefaults' => array('div' => false))); 
$OutputHolder .= $this->Form->input('username'); 
$OutputHolder .= $this->Form->input('password'); 
$OutputHolder .= $this->Form->input('firstname'); 
$OutputHolder .= $this->Form->input('surname'); 
$OutputHolder .= $this->Form->input('email'); 
$OutputHolder .= 'Select Role For User <br />'; 
$OutputHolder .= $this->Form->radio('role_id', $opt_role, $attributes); 
$OutputHolder .= '<br />Select Active State For User <br />'; 
$OutputHolder .= $this->Form->radio('active', $opt_active, $attributes); 
$OutputHolder .= $this->Form->end('Submit'); 
$OutputHolder .= '</div>'; //End for AddUser 
echo $OutputHolder; 

$OutputViewUsers = '<h3 class="Background-Titles">View All Users</h3>'; 
$OutputViewUsers .= '<div class="Background-Content" id="AdminViewUsers">'; 

$OutputViewUsers .= '<table border="0">'; 
$OutputViewUsers .= '<tr><td>Username</td><td>First Name</td><td>Surname</td><td>E-mail</td><td>Stutus</td><td>Level</td><td>Save</td></tr>'; 
foreach($users as $key => $value) { 
    $OutputViewUsers .= $this->Form->create('UserEdit', array('url'=>'http://glenns-showcase.net/projects/cake/DrWho/adminedit/', 'inputDefaults' => array('div' => false))); 
    $BaseLink = $users[$key]['User']; 
    $OutputViewUsers .= "<td class=\"AdminViewUsersUN\">" .($BaseLink ['username']) . "</td>"; 
    $OutputViewUsers .= "<td>" . $this->Form->input('fname', array('default' => $BaseLink ['firstname'], 'label' => false, 'class' => 'AdminViewUsersFN')) . "</td>"; 
    $OutputViewUsers .= "<td>" . $this->Form->input('sname', array('default' => $BaseLink ['surname'], 'label' => false, 'class' => 'AdminViewUsersSN')). "</td>"; 
    $OutputViewUsers .= "<td>" . $this->Form->input('email', array('default' => $BaseLink ['email'], 'label' => false, 'class' => 'AdminViewUsersEM')). "</td>"; 
    $OutputViewUsers .= "<td>" . $this->Form->select('active', $ActOpts, array('empty' => false, 'default' => $BaseLink ['active'], 'class' => 'AdminViewUsersAS')). "</td>"; 
    $OutputViewUsers .= "<td>" . $this->Form->select('role', $RoleOpts, array('empty' => false, 'default' => $users[$key]['Role']['id'], 'class' => 'AdminViewUsersUL')). "</td>"; 
    $OutputViewUsers .= $this->Form->hidden('id', array('default' => $BaseLink ['id'],)); 
    $OutputViewUsers .= "<td>" . $this->Form->submit('Save', array('div' => false, 'class' => 'AdminViewUsersSB')). "</td></tr>"; 
    //$test = array('label' => 'Save', 'div' => array('class' => 'AdminViewUsersSB')); 
    $OutputViewUsers .= $this->Form->end(); 

} //End of foreach loop 
$OutputViewUsers .= '</table>'; 

$OutputViewUsers .= $this->Paginator->numbers(array('first' => 2)); 
$OutputViewUsers .= '</div>'; //End for AllUsers 
echo $OutputViewUsers; 

echo '</div>'; //End for PageList 

UPDATE :::

이 지금의 모습입니다! 하지만 지금은 이것이 내가 전에 어떻게 있었는지에 대해 더 많은 또는 불만이 있습니다. 누락 된 태그를 추가했습니다. 그러나 이제는 이것이 마지막 결과 만 가능하게합니다! 나는 페이지 당 5 개의 결과로 페이지를 매긴다. 잘못된 ID 번호를 가지기 때문에 페이지의 상위 4 개 결과가 작동하지 않을 것이다. '저장'을 누를 때마다 마지막 결과의 ID 만 제공된다.

"입력 필드를 색인화하십시오"는 것이 확실하지 않지만 "관련 요소의 적절한 색인을 포함하는 고유 한 이름을 제출하십시오"와 같이 제가 알고있는 한 ID를 제공하는 숨겨진 필드가 있습니다.

내게 닮은 것은 루프 내에서 전체 양식을 넣어야하므로 반환 된 각 결과가 자체 양식에 있으므로 오류가 없어야합니다! 그러나 루프 내에서 내 테이블의 시작을 넣을 수 없거나 각 결과에 대한 헤더가 있습니다! 나는이 문제를 해결할 수 있어야한다고 생각한다!

많은 도움을 주셔서 감사합니다.

$OutputViewUsers = '<h3 class="Background-Titles">View All Users</h3>'; 
$OutputViewUsers .= '<div class="Background-Content" id="AdminViewUsers">'; 
$OutputViewUsers .= $this->Form->create('UserEdit', array('url'=>'http://glenns-showcase.net/projects/cake/DrWho/adminedit/', 'inputDefaults' => array('div' => false))); 
$OutputViewUsers .= '<table border="0">'; 
$OutputViewUsers .= '<tr><td>Username</td><td>First Name</td><td>Surname</td><td>E-mail</td><td>Stutus</td><td>Level</td><td>Save</td></tr>'; 
foreach($users as $key => $value) { 
    $BaseLink = $users[$key]['User']; 
    $OutputViewUsers .= "<tr><td class=\"AdminViewUsersUN\">" .($BaseLink ['username']) . "</td>"; 
    $OutputViewUsers .= "<td>" . $this->Form->input('fname', array('default' => $BaseLink ['firstname'], 'label' => false, 'class' => 'AdminViewUsersFN')) . "</td>"; 
    $OutputViewUsers .= "<td>" . $this->Form->input('sname', array('default' => $BaseLink ['surname'], 'label' => false, 'class' => 'AdminViewUsersSN')). "</td>"; 
    $OutputViewUsers .= "<td>" . $this->Form->input('email', array('default' => $BaseLink ['email'], 'label' => false, 'class' => 'AdminViewUsersEM')). "</td>"; 
    $OutputViewUsers .= "<td>" . $this->Form->select('active', $ActOpts, array('empty' => false, 'default' => $BaseLink ['active'], 'class' => 'AdminViewUsersAS')). "</td>"; 
    $OutputViewUsers .= "<td>" . $this->Form->select('role', $RoleOpts, array('empty' => false, 'default' => $users[$key]['Role']['id'], 'class' => 'AdminViewUsersUL')). "</td>"; 
    $OutputViewUsers .= $this->Form->hidden('id', array('default' => $BaseLink ['id'],)); 
    $OutputViewUsers .= "<td>" . $this->Form->submit('Save', array('div' => false, 'class' => 'AdminViewUsersSB')). "</td></tr>"; 
} //End of foreach loop 
$OutputViewUsers .= '</table>'; 
$OutputViewUsers .= $this->Form->end(); 
$OutputViewUsers .= $this->Paginator->numbers(array('first' => 2)); 
$OutputViewUsers .= '</div>'; //End for AllUsers 
echo $OutputViewUsers; 

ANOTHER UPDATE :

이 지금 작동하는 것 같다

, 각 결과는 양식 태그 내에서 자신의 폼 요소 및 모든 입력에 있거나 지금. 그러나 이제는 폼 내부에 테이블이 있기 때문에 각 결과에 고유 한 헤더가 있습니다. 이제는 foreach 루프 내에 있으므로 루프 할 때마다 결과 맨 위의 헤더를 에코/인쇄합니다. 나는이 일을하고있다. 어떤 도움이라도 여전히 대환영입니다 !!

foreach($users as $key => $value) { 
    $OutputViewUsers .= $this->Form->create('UserEdit', array('url'=>'http://glenns-showcase.net/projects/cake/DrWho/adminedit/', 'inputDefaults' => array('div' => false))); 
    $OutputViewUsers .= '<table border="0">'; 
    $OutputViewUsers .= '<tr><td>Username</td><td>First Name</td><td>Surname</td><td>E-mail</td><td>Stutus</td><td>Level</td><td>Save</td></tr>'; 
    $BaseLink = $users[$key]['User']; 
    $OutputViewUsers .= "<tr><td class=\"AdminViewUsersUN\">" .($BaseLink ['username']) . "</td>"; 
    $OutputViewUsers .= "<td>" . $this->Form->input('fname', array('default' => $BaseLink ['firstname'], 'label' => false, 'class' => 'AdminViewUsersFN')) . "</td>"; 
    $OutputViewUsers .= "<td>" . $this->Form->input('sname', array('default' => $BaseLink ['surname'], 'label' => false, 'class' => 'AdminViewUsersSN')). "</td>"; 
    $OutputViewUsers .= "<td>" . $this->Form->input('email', array('default' => $BaseLink ['email'], 'label' => false, 'class' => 'AdminViewUsersEM')). "</td>"; 
    $OutputViewUsers .= "<td>" . $this->Form->select('active', $ActOpts, array('empty' => false, 'default' => $BaseLink ['active'], 'class' => 'AdminViewUsersAS')). "</td>"; 
    $OutputViewUsers .= "<td>" . $this->Form->select('role', $RoleOpts, array('empty' => false, 'default' => $users[$key]['Role']['id'], 'class' => 'AdminViewUsersUL')). "</td>"; 
    $OutputViewUsers .= $this->Form->hidden('id', array('default' => $BaseLink ['id'],)); 
    $OutputViewUsers .= "<td>" . $this->Form->submit('Save', array('div' => false, 'class' => 'AdminViewUsersSB')). "</td></tr>"; 
    //$test = array('label' => 'Save', 'div' => array('class' => 'AdminViewUsersSB')); 
    $OutputViewUsers .= '</table>'; 
    $OutputViewUsers .= $this->Form->end(); 

} //End of foreach loop 

답변

1

단순히 잘못된 HTML을 생성하는 것입니다.루프에 개구부 tr 태그가 누락되어 있지만, 존재하더라도 여전히 유효하지 않으므로 tr is only allowed to hold td or th elements이므로 브라우저가 양식을 표 외부로 렌더링 할 수 있습니다.

Form inside a table

한 가지 해결 방법은 관련 기록의 적절한 인덱스를 포함하는 요소에게 고유 한 이름을 제출주고, 형태, 인덱스 입력 입력 필드 내에서 전체 테이블을 포장하고,이 이름을 사용하는 것입니다 참조 서버 측에서 저장할 레코드를 결정합니다. 또는 제출 된 데이터를 데이터베이스와 비교하고 무언가가 변경된 레코드 만 저장하십시오.

ps. 그렇습니다. 테이블은 테이블 형식의 데이터를 설명하기 위해 의도 한 용도로 사용되는 한 괜찮습니다.

0

나는 옳은 길로 나를 설정 했으므로 위의 내용을 답으로 표시했습니다. 많은 감사합니다!

이제 루프 내부의 양식과 양식 내의 테이블을 갖게되었습니다. 이제 각 결과가 자체 양식 태그에 있음을 의미합니다.

헤더를 사용하여 방금 CSS 및 span 태그를 사용하여 줄을 바 꾸었습니다.

많은 감사 글렌.

여기 내 마지막 코드입니다. 다른 사람이이 코드를 사용하는 경우를위한 것입니다.

$OutputViewUsers = '<h3 class="Background-Titles">View All Users</h3>'; 
$OutputViewUsers .= '<div class="Background-Content" id="AdminViewUsers">'; 
$OutputViewUsers .= '<div class="AdminViewUsersListHeaders"> 
    <span class="AdminViewUsersUNHeader">Username</span> 
    <span class="AdminViewUsersFNHeader">First Name</span> 
    <span class="AdminViewUsersSNHeader">Surname</span> 
    <span class="AdminViewUsersEMHeader">E-mail</span> 
    <span class="AdminViewUsersASHeader">Stutus</span> 
    <span class="AdminViewUsersULHeader">Level</span> 
    <span class="AdminViewUsersSAHeader">Save</span></div>'; 


foreach($users as $key => $value) { 
    $OutputViewUsers .= $this->Form->create('UserEdit', array('url'=>'http://glenns-showcase.net/projects/cake/DrWho/adminedit/', 'inputDefaults' => array('div' => false))); 
    $OutputViewUsers .= '<table border="0">'; 
    //$OutputViewUsers .= '<tr><td>Username</td><td>First Name</td><td>Surname</td><td>E-mail</td><td>Stutus</td><td>Level</td><td>Save</td></tr>'; 
    $BaseLink = $users[$key]['User']; 
    $OutputViewUsers .= "<tr><td class=\"AdminViewUsersUN\">" .($BaseLink ['username']) . "</td>"; 
    $OutputViewUsers .= "<td>" . $this->Form->input('fname', array('default' => $BaseLink ['firstname'], 'label' => false, 'class' => 'AdminViewUsersFN')) . "</td>"; 
    $OutputViewUsers .= "<td>" . $this->Form->input('sname', array('default' => $BaseLink ['surname'], 'label' => false, 'class' => 'AdminViewUsersSN')). "</td>"; 
    $OutputViewUsers .= "<td>" . $this->Form->input('email', array('default' => $BaseLink ['email'], 'label' => false, 'class' => 'AdminViewUsersEM')). "</td>"; 
    $OutputViewUsers .= "<td>" . $this->Form->select('active', $ActOpts, array('empty' => false, 'default' => $BaseLink ['active'], 'class' => 'AdminViewUsersAS')). "</td>"; 
    $OutputViewUsers .= "<td>" . $this->Form->select('role', $RoleOpts, array('empty' => false, 'default' => $users[$key]['Role']['id'], 'class' => 'AdminViewUsersUL')). "</td>"; 
    $OutputViewUsers .= $this->Form->hidden('id', array('default' => $BaseLink ['id'],)); 
    $OutputViewUsers .= "<td>" . $this->Form->submit('Save', array('div' => false, 'class' => 'AdminViewUsersSB')). "</td></tr>"; 
    //$test = array('label' => 'Save', 'div' => array('class' => 'AdminViewUsersSB')); 
    $OutputViewUsers .= '</table>'; 
    $OutputViewUsers .= $this->Form->end(); 

} //End of foreach loop 


$OutputViewUsers .= $this->Paginator->numbers(array('first' => 2)); 
$OutputViewUsers .= '</div>'; //End for AllUsers 
echo $OutputViewUsers;