Пункт меню delete в списке записей без редиректа в категорию записи

InstantCMS 2.X
#1 7 ноября 2024 в 19:16

Здравствуйте!

Мне нужно вывести пункт меню из меню действий у каждой записи в списке.

Сам пункт такой 

    <a href="<?php echo href_to($ctype['name'], 'delete', $item['id']).'?csrf_token='.cmsForm::getCSRFToken(); ?>"><?php echo sprintf(LANG_CONTENT_DELETE_ITEM, $ctype['labels']['create'])?></a>
   

Вывелся без проблем. Но после удаления записи (корневая категория) с помощью данного пункта, меня перекидывает в ту категорию где была удаленная запись (категория 3 уровня).

Что можно сделать чтобы при удалении записи в списке,  не было редиректа на категорию записи?

#2 7 ноября 2024 в 19:34

 Dina, добавьте в параметры к ссылке параметр back_url. При его наличии при удалении записи редирект идет на эту ссылку github.com/instantsoft/icms2/blob/4d81fa510fe171e4317d46ba5cebb85ec57514b1/system/controllers/content/actions/item_delete.php#L82

Если его нет — то в категорию тремя строчками ниже.

#3 7 ноября 2024 в 20:56

Интересно, что будет, если ссылке дать css-класс «ajax-modal»?

  1. <a class="ajax-modal" href="<?php echo href_to($ctype['name'], 'delete', $item['id']).'?csrf_token='.cmsForm::getCSRFToken(); ?>"><?php echo sprintf(LANG_CONTENT_DELETE_ITEM, $ctype['labels']['create'])?></a>
#4 7 ноября 2024 в 21:26

Интересно, что будет, если ссылке дать css-класс «ajax-modal»?

Loadырь

Здравствуйте!

Выходит модальное окно с уведомлением, но потом все равно перекидывает на категорию😕

добавьте в параметры к ссылке параметр back_url. При его наличии при удалении записи редирект идет на эту ссылку github.com/instantsoft/icms2/blob/4d81fa510fe171e4317d46ba5cebb85ec57514b1/system/controllers/content/actions/item_delete.php#L82

Zau4man

Спасибо за помощь, что то у меня не получается… - 

  1. <a href="<?php echo href_to($ctype['name'], 'delete', $item['id']) . '?csrf_token=' . cmsForm::getCSRFToken() . '&back_url=' . $back_url; ?>">
  2. <?php echo sprintf(LANG_CONTENT_DELETE_ITEM, $ctype['labels']['create']); ?>
  3. </a>
#5 8 ноября 2024 в 07:09

Надо в начале файла шаблона объявить переменную

  1. $carrent_url = href_to($this->controller->request->get('ctype_name'), $this->controller->request->get('slug')) . ($this->controller->request->has('page') ? '?page=' . $this->controller->request->get('page', 1) : '');

И потом передать ее в параметре back

  1. <a href="<?= href_to($ctype['name'], 'delete', $item['id']) . '?csrf_token=' . cmsForm::getCSRFToken() . '&back=' . $current_url; ?>">
  2. <?= sprintf(LANG_CONTENT_DELETE_ITEM, $ctype['labels']['create']); ?>
  3. </a>

Не проверял, но возможно $current_url придется urlencode сделать, чтобы нормально ссылка передалась, но это не точно.

#6 8 ноября 2024 в 18:21

объявить переменную

Loadырь

Здравствуйте, спасибо за подсказку!

В самый верх поместила

  1. $carrent_url = href_to($this->controller->request->get('ctype_name'), $this->controller->request->get('slug')) . ($this->controller->request->has('page') ? '?page=' . $this->controller->request->get('page', 1) : '');

Но не сработало, посмотрела что есть в этой переменной -  var_dump($current_url);  а там Null

Пытаюсь получить в файлик hab_list.tpl по пути templates/modern/content/hab_list.tpl.php

В чем может быть проблема?

#7 8 ноября 2024 в 18:28

В чем может быть проблема?

Dina

Насколько древняя версия движка cms?

#8 8 ноября 2024 в 18:51

В чем может быть проблема?

Dina

Насколько древняя версия движка cms?

Loadырь

Версия 2.16.1

Так же, для теста попробовала вывести в default_list.tpl.php и default_item.tpl.php тоже самое.

#9 8 ноября 2024 в 19:37

А куда ещё вас должно перекидывать, если в обработчике указанно, куда надо)

Измените ссылку. Вместо /delete/ напишите что то другое. Скажем /mydel/. Создайте экшен с таким именем в \system\controllers\content\actions\. Скопируйте туда код \system\controllers\content\actions\item_delete.php и в коде вместо

 $back_url = $this->getRequestBackUrl(); пропишите своё перенаправление.

Или же оставьте как есть, передайте ещё какой то параметр, получите его в \system\controllers\content\actions\item_delete.php и проверяйте. Если не пустой, свой путь, если пустой, системный.

Вы не можете отвечать в этой теме.
Войдите или зарегистрируйтесь, чтобы писать на форуме.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.