Помогите разобраться с AjaxSnippet

Задача удалять ресурсы из фронтенда
Есть страница с листом ресурсов
В каждом ресурсе создается ссылка на его удаление так:
[[!AjaxSnippet?
	&snippet=`deleteAdv`
        &as_mode=`onclick`
        &as_trigger=`<a href="[[~[[*id]]]]" class="link_del">Удалить объявление</a>`
]]
при нажатии нужно активировать снипет deleteAdv, который проверит все что надо, а основное пометить ресурс на удаление, и убрать удаленный ресурс из листа, снипет такой:
<?php
	$res=$modx->getObject('modResource',array('id'=>$id));
	$res->set('deleted', true);
	$res->save();
В итоге так ничего не работает, не выполняется снипет
Не смог разобраться как выполнить задачу правильно по инструкции на сайте
Помогите разобраться, пожалуйста!
Greza
01 декабря 2016, 14:25
modx.pro
1 762
0

Комментарии: 14

Greza
01 декабря 2016, 22:33
0
Не уж то никто не знает, или я не корректный вопрос задал?
Подскажите, пожалуйста, хоть куда копать.
    Александр
    01 декабря 2016, 23:42
    0
    [[!AjaxSnippet?
    	&snippet=`deleteAdv`
    	&id=`[[+id]]`
            &as_mode=`onclick`
            &as_trigger=`Удалить объявление`
    ]]
    deleteAdv:
    <?php
    $res = $modx->getObject('modResource',$id);
    if ($res) {
        $res->remove();
    } else {
       $modx->log(modX::LOG_LEVEL_ERRROR, 'Resource ' . $id. ' not found.');
    }
      Greza
      01 декабря 2016, 23:49
      0
      Спасибо, но так удаляются все ресурсы выведенные на страницу при нажатии на одну ссылку в одном ресурсе
Greza
02 декабря 2016, 00:10
0
Есть страница с листом ресурсов выведена через pdoResources
в каждом ресурсе есть ссылка Удалить
[[!AjaxSnippet?
	&snippet=`deleteAdv`
	&id=`[[+id]]`
        &as_mode=`onclick`
        &as_trigger=`Удалить объявление`
]]
    Александр
    02 декабря 2016, 00:12
    0
    Поставлю вопрос по-другому: куда вы записываете код, что написали выше?

      Александр
      03 декабря 2016, 00:39
      0
      Попробуйте изменить сниппет deleteAdv:
      <?php
      $res = $modx->getObject('modResource',$id);
      if ($res) {
          $modx->log(modX::LOG_LEVEL_INFO, $id);
          //$res->remove();
      } else {
         $modx->log(modX::LOG_LEVEL_ERRROR, 'Resource ' . $id. ' not found.');
      }
      И посмотреть, что выведется в логе. Быть может не подхватывает правильный id, будем думать тогда, что с этим делать, или в чём ошибка.
      Ещё было бы неплохо создать тестовый сервер, чтобы можно было это всё вживую «пощупать».
    Greza
    02 декабря 2016, 00:14
    0
    в шаблон вывода каждого элемента- ресурса на страницу через pdoResources
      Greza
      02 декабря 2016, 00:14
      -1
      Я надеялся что при нажатии на ссылку Удалить объявление, будет вызываться сниппет deleteAdv и ресурс будет удален, но на деле все ресурсы на странице удаляются
      хотя id у всех разные
        Александр
        03 декабря 2016, 01:18
        0
        Хм, раз так, значит срабатывают вызовы всех сниппетов сразу. Посмотрите по id или class срабатывает кнопка и не одно ли значение у всех этих кнопок установлено.
        Greza
        02 декабря 2016, 09:57
        0
        вопрос не решен
        может есть у кого-то дельные мысли по поводу вопроса?
          Николай Загумённов
          02 декабря 2016, 11:14
          0
          Написать свой запрос и обработчик, не используя ajaxSnippet. Более подробно о том как это сделать описано в этой статье.
            Greza
            02 декабря 2016, 11:16
            0
            Да спасибо за помощь, я конечно решил уже проблему не используя ajaxSnippet.
            Однако разобраться с вопросом хотелось бы.
          Константин Ильин
          02 декабря 2016, 12:23
          0
          Наверно проще было бы использовать AjaxForm.
          Но для каждой записи(ресурса) будет тег form и запускаться сниппет это не есть хорошо.

          Проще как писали выше написать свое.
          Допустим при клике берется айди ресурса, посылается аяксом на страницу, а там уже ждет сниппет удаления ресурса.

          $('.delRes').on('click', function() {
          
              var id = $(this).data('id');
          
              $.ajax({
                  url: '/delRes.html',
                  dataType: 'json',
                  data: {
                      id: id
                  },
                  success: function(res) {
                      if (res['success']) {
                          console.log('Ресурс удален');
                      } else {
                          console.log('Ресурс Не удален');
                      }
                  }
              });
          
          });
          Естественно в Сниппете должны быть проверки типа разрешено удалять или нет, аякс запрос и т.д.

          И как я понял из документации AjaxSnippet — это подгрузчик инфы через аякс.
            Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
            14