Назрела необходимость удалять несколько сообщений одновременно.
Три дня изысков и вуаля - чекбоксы,массив данных-и можно удалять отмеченные сообщения.
Код под спойлером.
В Instant CMS подобный код называется хаком. Так что я теперь официально хакер =)
Это пихаем в темплейт:
<td width=30px><input name="checkbox[]" type="checkbox" id="checkbox[]" value="{$record.id}"></td>
checkbox[] - название массива. В скобки ничего не пихаем, ибо php тогда не поймет что ему передают массив.
<form action="/users/delselectedmsg.html" id="selmessage" method="POST" name="selmessage">
Это будет форма, в которой выводятся месседжи.
<a href="javascript:document.selmessage.submit();">Удалить отмеченные</a>
Это волшебная кнопочка =)
Это пихаем во фронтенд:
if ($do=='delselected'){ if (!$cfg['sw_msg']) { cmsCore::error404(); } if (!$inUser->id) { cmsCore::error404(); } // Удалить сразу несколько записей можно // при помощи запроса "DELETE FROM table_1 WHERE id IN (1,3,5,7)" // Получаем список отмеченных checkbox $type = $_POST["checkbox"]; if(!empty($type)) { // Начинаем формировать переменную, содержащую этот список // в формате "(3,5,6,7)" foreach($type as $val) $query.= "$val,"; // Удаляем последнюю запятую, заменяя ее закрывающей скобкой) $query = substr($query, 0, strlen($query) - 1 ); // Завершаем формирование SQL-запроса на удаление //$query = "DELETE FROM table_1 WHERE id IN ".$query; $msg = $inDB->get_fields('cms_user_msg', "id IN ($query)", '*'); if ($msg['to_id']==$inUser->id){ $inDB->query("UPDATE cms_user_msg SET to_del=1 WHERE id IN ($query)"); $inCore->addSessionMessage($_LANG['MESS_DEL_OK'], 'info'); } if ($msg['from_id']==$inUser->id && !$msg['is_new']){ $inDB->query("UPDATE cms_user_msg SET from_del=1 WHERE id IN ($query)"); $inCore->addSessionMessage($_LANG['MESS_DEL_OK'], 'info'); } if ($msg['from_id']==$inUser->id && $msg['is_new']){ $inDB->query("DELETE FROM cms_user_msg WHERE id IN ($query) LIMIT 1"); $inCore->addSessionMessage($_LANG['MESS_BACK_OK'], 'info'); } $inDB->query("DELETE FROM cms_user_msg WHERE to_del=1 AND from_del=1"); $inCore->redirectBack(); } else $inCore->redirectBack(); }
Это - в роутер:
$routes[] = array( '_uri' => '/^users\/delselectedmsg.html$/i', 'do' => 'delselected', 1 => 'id' );
Еще у одного чувака спиздил классный аяксовый аккордеон, но тут выкладывать не буду, ибо лень.