Исчезновение ссылки для редактирования через время - 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: Вариант
Копируем чанк 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
Посчитать разницу между createdon и текущей датой, в зависимости от нужного кол-ва дней(часов, минут) показывать/скрывать кнопку.
Это понял, так реализовано в комментариях, но надо чтобы пользователь до исчезновения кнопки не видел адрес ссылки на редактирование. Просто скрывать кнопку это немного не то
но надо чтобы пользователь до исчезновения кнопки не видел адрес ссылки на редактированиеТак он её в адресной строке изначально увидит.
По тому же условию просто не выводить форму редактирования по прошествии заданных дней.
Ссылка должна быть такого примерно вида
<a href="#">Редактировать вопрос</a>`
Думаю попробовать подгружать форму редактирования через Ajax, как вариант
В общем там совсем все просто делается, чуть позже выжму свободное время и обязательно обновлю свой топик с одним из рабочих вариантов. Вдруг кому-нибудь неожиданно понадобиться. Для профи это конечно не составит труда и возможно они сделают все в несколько строк, а новичкам таким как я возможно пригодится
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.