오랜만에 블로그를 게을리 하는 것은 아니지만 최근에는 PHP와 zend에 대해 많이 배우지 않았기 때문에 Post 기사 관리에 대한 큰 모듈을 작성하고 있습니다. 구현하는데 일주일정도 걸렸는데 최근에 코드량이 너무 많아서 추가, 삭제, 수정, 확인 기능이 개선되었습니다. 기사 상태를 수정하고 ajax를 사용하여 구현하는 방법에 대해 작성합니다. 이전에는 ajax의 이점에 대해 자세히 설명하고 나면 이제 요점을 살펴보겠습니다.
먼저 ajax 코드를 게시합니다.
<code><span>script</span>><span> $(<span><span>function</span><span>()</span> {</span> $(<span>".post-list-table .check"</span>).click(<span><span>function</span><span>()</span> {</span><span>var</span> post_id = $(<span>this</span>).parent().attr(<span>"alt"</span>); <span>var</span> status = $(<span>this</span>).attr(<span>"alt"</span>); $.get(<span>"/post/operate/"</span>+ post_id +<span>"/?status="</span>+ status, <span><span>function</span><span>(ret)</span> {</span> console.log(ret); <span>if</span>(ret[<span>1</span>] == <span>1</span>) { $(<span>"table tbody .status-"</span>+ post_id).html(<span>"Published"</span>); } <span>else</span><span>if</span>(ret[<span>1</span>] == -<span>1</span>) { $(<span>"table tbody .status-"</span>+ post_id).html(<span>"Rejected"</span>); } <span>else</span> { $(<span>"table tbody .status-"</span>+ post_id).html(<span>"Draft"</span>); } }); }); $(<span>".post-list-table .delete"</span>).click(<span><span>function</span><span>()</span> {</span><span>if</span>(confirm(<span>'确认删除?'</span>)) { <span>var</span> url = $(<span>this</span>).attr(<span>'url'</span>); $.getJSON(url, <span><span>function</span><span>(ret)</span> {</span>console.log(ret); <span>if</span>(ret[<span>0</span>] == <span>true</span>) { $(<span>'.delete[url="'</span>+url+<span>'"]'</span>).parents(<span>'tr'</span>).remove(); } }); } }); }) </span><span><span>script</span>></span></code>
코드를 보면 상태 변경과 삭제라는 두 가지 기능이 구현되어 있는 것을 알 수 있는데, 이는 서로 다른 작업에서 비롯됩니다. 컨트롤러에 작업을 붙여넣습니다.
<code><span>public</span><span><span>function</span><span>operateAction</span><span>()</span> {</span><span>if</span>(!<span>$this</span>->userHasPermission(<span>'ADMIN'</span>, <span>'EDIT_REVIEW'</span>)) { <span>return</span><span>$this</span>->requirePermission(<span>'ADMIN'</span>, <span>'EDIT_REVIEW'</span>); } <span>$ret</span> = <span>false</span>; <span>$request</span> = <span>$this</span>->getRequest(); <span>$log_table</span> = <span>$this</span>->getPostLogTable(); <span>$user_service</span> = <span>$this</span>->getServiceLocator()->get(<span>'UserService'</span>); <span>$curr_user</span> = <span>$user_service</span>->getCurrentUser(); <span>$post_id</span> = <span>$this</span>->params()->fromRoute(<span>'id'</span>, <span>null</span>); <span>$post</span> = <span>$this</span>->getPostTable()->getPostById(<span>$post_id</span>); <span>$from_status</span> = <span>$post</span>[<span>'post_status'</span>]; <span>$status</span> = <span>$request</span>->getQuery(<span>'status'</span>, <span>null</span>); <span>$log_row</span> = <span>array</span>(); <span>if</span> (!is_null(<span>$status</span>)) { <span>if</span>(<span>$post</span>[<span>'post_status'</span>] != <span>$status</span>) { <span>$ret</span> = <span>$this</span>->getPostTable()->checkStatus(<span>$post</span>[<span>'id'</span>], (int)<span>$status</span>); <span>//var_dump($ret);exit();</span><span>if</span> (<span>$ret</span>) { <span>$log_row</span>[<span>'post_id'</span>] = <span>$post_id</span>; <span>$log_row</span>[<span>'user_id'</span>] = <span>$curr_user</span>->id; <span>$log_row</span>[<span>'user_name'</span>] = <span>$curr_user</span>->username; <span>$log_row</span>[<span>'date'</span>] = date(<span>'y-m-d'</span>,time()); <span>$log_row</span>[<span>'from_status'</span>] = <span>$from_status</span>; <span>$log_row</span>[<span>'to_status'</span>] = <span>$status</span>; <span>$log_table</span>->addRows(<span>$log_row</span>); } } <span>$ret</span> = <span>true</span>; } <span>$jsonModel</span> = <span>new</span> JsonModel(<span>array</span>(<span>$post_id</span>, <span>$ret</span> ? (int)<span>$status</span> : <span>$ret</span>)); <span>//var_dump($jsonModel);exit();</span><span>return</span><span>$jsonModel</span>; } <span>public</span><span><span>function</span><span>deletePostAction</span><span>()</span>{</span><span>if</span>(!<span>$this</span>->userHasPermission(<span>'ADMIN'</span>, <span>'VIEW_PRODUCT'</span>)) { <span>return</span><span>$this</span>->requirePermission(<span>'ADMIN'</span>, <span>'VIEW_PRODUCT'</span>); } <span>$post_id</span> = (int) <span>$this</span>->params()->fromRoute(<span>'post_id'</span>, <span>0</span>); <span>$ret</span> = <span>false</span>; <span>if</span> (<span>$post_id</span>) { <span>$table</span> = <span>$this</span>->getPostTable(); <span>$table</span>->deleteRowById(<span>$post_id</span>); <span>$this</span>->layout()->selectedTab = <span>'post-list'</span>; <span>$ret</span> = <span>true</span>; } <span>return</span><span>new</span> JsonModel(<span>array</span>(<span>$ret</span>)); }</code>
두 액션에 대한 라우팅 설정을 작성하지 않을 것이며, 특정 phtml 페이지도 없고 단지 기능만 구현하겠습니다.
ajax 코드에서 .get(url,data) 함수를 통해 여기의 데이터는 action이나 phtml에서 반환된 JsonModel의 배열 배열을 의미하며, 이것이 반환되는 모든 데이터라는 점에 유의하세요. 실제로 클릭 후 get의 첫 번째 매개변수가 액션을 실행하고, 그런데 데이터를 획득한 후, 매개변수에 따라 작업을 수행하게 되므로 매우 편리합니다.
효과가 보이지 않지만 사진을 게시하세요.
녹색 체크 표시를 클릭하면 상태가 게시됨으로 변경됩니다. 빨간색 십자가를 클릭하면 거부됨으로 변경됩니다. 빨간색 휴지통을 클릭하면 삭제를 클릭하게 됩니다.
저작권 표시: 이 글은 해당 블로거의 원본 글이므로 블로거의 허락 없이 복제할 수 없습니다.
위에서는 인턴십 요약 12가지를 소개했습니다. 내용의 측면을 포함하여 Ajax get 함수의 사용 예가 PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되기를 바랍니다.