Назрела необходимость удалять несколько сообщений одновременно.
Три дня изысков и вуаля - чекбоксы,массив данных-и можно удалять отмеченные сообщения.
Код под спойлером.
В 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' );
Еще у одного чувака спиздил классный аяксовый аккордеон, но тут выкладывать не буду, ибо лень.