Предположим, есть проект вроде www.weddingrush.ru, на котором пользователи могут размещать свою информацию. Объявления сохраняются в простой таблице (см. статью про организацию гостевых книг). Макрос Form настроен чтобы при каждом добавлении нового объявления модератору отсылалось письмо. Далее, классическая схема предполагает что модератор войдет в админзону и удалит или отредактирует сообщение.
Это, естественно, требует времени. Хотелось бы откровенный спам с досок удалять проще и быстрее. Реализуем ссылку в письме, при нажатии на которую объявление будет удалено из базы минуя админзону.
1. Создадим страницу, ссылку на которую разместим в шаблоне письма, которая и будет у нас удалять сообщения. Плюс нам понадобятся еще две страницы с сообщениями об успешном и неупешном удалении записи. Размещать их в hidden зоне menu.xml или в публичном дереве с assign="content" - решать разработчику.
Вы можете взять в качестве примера вот эту папку и вставить в ваш menu.xml
<folder id="mod_001" locked="true" title="Модерация">
<node id="delrec_001" title="Удалить запись">
<alias editable="true" title="Псевдоним страницы">
deleterecord
</alias>
<template editable="true" title="Шаблон фронтзоны" type="front-templates">
blank
</template>
<admin_template editable="false" title="Шаблон админзоны" type="back-templates">
page_simple_edit
</admin_template>
</node>
<node id="delrec_002" title="Запись удалена">
<alias editable="true" title="Псевдоним страницы">
deleterecord_success
</alias>
<template editable="true" title="Шаблон фронтзоны" type="front-templates">
blank
</template>
<admin_template editable="false" title="Шаблон админзоны" type="back-templates">
page_simple_edit
</admin_template>
</node>
<node id="delrec_003" title="Запись не найдена">
<alias editable="true" title="Псевдоним страницы">
deleterecord_failure
</alias>
<template editable="true" title="Шаблон фронтзоны" type="front-templates">
blank
</template>
<admin_template editable="false" title="Шаблон админзоны" type="back-templates">
page_simple_edit
</admin_template>
</node>
</folder>
Обратите внимание, что мы рекомендуем заменить выделенный boldом псевдоним на любое бессмысленное сочетание букв или хотя бы добавьте к нему несколько цифр, это усложнит угадывание этого служебного URL потенциальным негодяям. Хотя, все равно мы будем далее все шифровать, но, как говорится, береженого бог бережет.
2. В странице deleterecord мы пишем следующий макрос:
$RegistrationConfirm[source: yourtable; filter: id=$Decrypt[]$; action: delete; onsuccess: deleterecord_success; onfailure: deleterecord_failure]$
То есть, при входе на данную страницу мы примем ключ yourkey из URL, расшифруем его макросом Decrypt, удалим запись из таблицы yourtable и в случае успеха покажем страницу deleterecord_success, а в случае ошибки (например, если запись с таким id не найдена) - deleterecord_failure.
3. На указанные страницы введите сообщения для модератора, вроде "Запись удалена" и "Запись не найдена".
4. Создадим ссылку в письме. Идем в шаблон email оповещения, который отвечает за письмо при добавлении сообщения на доску объявлений. Туда вбиваем что-то вроде:
<A href="http://www.weddingrush.ru/deleterecord/?yourkey=$Crypt[$id$]$" target=_new>Удалить объявление с сайта</A>
Данная ссылка при нажатии на неё в письме приведет модератора на страницу deleterecord, передавая туда шифрованный макросом Crypt атрибут id добавленной записи.
Все шифрования и дешифровка базируются на уникальных для сайта ключах, вся система шифрования поддерживается полностью автоматически, подобрать шифрованный id практически невозможно, но письмами с подобными URL все равно лучше не разбрасываться. Если с сайтом начинает работать другой контент-менеджер, на всякий случай рекомендуется сбросить кэш сайта и удалить файл cryptkey.twl в папке Data, чтобы перегенерировать ключи шифрования.
Естественно, вместо удаления записи можно организовать update некоторых полей, например разрешать публикацию устанавливая поле типа state в значение on или off, или делать любые другие действия. Смотрите документацию по макросам, возможности широкие.