Исчезновение ссылки для редактирования через время - Tickets
Всем добра! Как то давно делал знакомым страницу вопроса — ответов на Tickets, а на днях спросили где в настройках задается время жизни для кнопки редактировать, чтобы пользователь через время уже не мог исправить или удалить написанное. Пересмотрел весь компонент Tickets, такая функция есть только для комментариев. Ссылка на редактирование в данный момент выводится так:
Возможно кто нибудь уже делал такое — чтобы кнопка/ссылка была недоступна через заданное время, ну или в какую сторону копать? Хотелось бы конечно сильно не затрагивать сам Tickets, в идеале вообще не трогать.
UPD: Вариант
Один нюанс — загрузка картинок будет с помощью компонента Uploadify.
Копируем чанк tpl.Tickets.form.update, переименовываем в tpl.Tickets.form.update.two, в нем находим:
Далее по шагам.
Шаг 1. Поскольку форма будет подгружаться, то воспользуемся основами — Основы Ajax
Создаем сниппет ajax_edit
Шаг 3. Создаем простейший сниппет для исчезновения кнопки.
Сниппет editt:
[[!+modx.user.id:is=`[[*createdby]]`:then=`<a href="/vopros-otvet.html?tid=[[+id]]">Редактировать вопрос</a>`]]Есть одна идея но пока смутно представляю как лучше реализовать это.Возможно кто нибудь уже делал такое — чтобы кнопка/ссылка была недоступна через заданное время, ну или в какую сторону копать? Хотелось бы конечно сильно не затрагивать сам Tickets, в идеале вообще не трогать.
UPD: Вариант
Один нюанс — загрузка картинок будет с помощью компонента Uploadify.
Копируем чанк tpl.Tickets.form.update, переименовываем в tpl.Tickets.form.update.two, в нем находим:
<div class="ticket-form-files">
[[+files]]
</div>Меняем на:<div class="svoi_class">
<h3>Если вы вставляте картинку в теге img, пожалуйста, воспользуйтесь нашим <a href="/zagruzka-izobrazheni.html" target="_blank">файлохранилищем</a>
</h3>
</div>где ссылка — переход на страницу с Uploadify.Далее по шагам.
Шаг 1. Поскольку форма будет подгружаться, то воспользуемся основами — Основы Ajax
Создаем сниппет ajax_edit
if (empty($_SERVER['HTTP_X_REQUESTED_WITH']) || $_SERVER['HTTP_X_REQUESTED_WITH'] != 'XMLHttpRequest') {return;}
if (empty($_POST['action'])) {return;}
$res = '';
switch ($_POST['action']) {
case 'change':
$param = array(
'tid' => $modx -> resource -> id,
'tplFormUpdate' => 'tpl.Tickets.form.update.two'//подставляем свое имя чанка редактирования
);
$res = $modx->runSnippet('TicketForm',$param);
break;
}
if (!empty($res)) {
die($res);
}На странице где будем вызывать форму вставим скрипт<script type="text/javascript">
$(document).ready(function() {
$(document).on('click', 'a.to_link', function(e)
{
e.preventDefault();
var action = $(this).data('action');
$.post(document.location.href, {action: action}, function(data) {
$('#upform').html(data);
$('#ticket-editor').markItUp(TicketsConfig.editor.ticket); //подтягиваем редактор Markitup
})
$(document).ajaxStop(function() {
$( ".to_link" ).hide();
});
return false;
})
})
</script>Шаг 2. В системных настройках создаем новый параметр, называем tickets.change_time — Время изменения тикета, в котором указываем «время жизни» кнопки редактировать в секундах. Например, если надо чтобы кнопка исчезла через сутки, то указываем в параметре цифры: 86400 Шаг 3. Создаем простейший сниппет для исчезновения кнопки.
Сниппет editt:
$time = time() - strtotime($modx->resource->get('createdon'));
$change_time = $modx->getOption('tickets.change_time');
$url = $link;
if ($time > $change_time) {
$url = false;
}
return $url;На этом все. Показываем кнопку где нужно вот так:[[!+modx.user.id:is=`[[*createdby]]`:then=`[[!editt? &link=`<a href="#" data-action="change" class="btn to_link">Изменить</a>`]]`]]Сюда подгрузится форма:<div id="upform"></div>Почему загрузка картинок/файлов не стандартно с plupload? Вот здесь ответ — modx.pro/development/3139#comment-58414 Комментарии: 5
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
По тому же условию просто не выводить форму редактирования по прошествии заданных дней.
Думаю попробовать подгружать форму редактирования через Ajax, как вариант