Skip to content

Удаление отмеченных сообщений в Instant CMS

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

Еще у одного чувака спиздил классный аяксовый аккордеон, но тут выкладывать не буду, ибо лень.

Leave a Reply

Your email address will not be published. Required fields are marked *

π