К содержанию

Помогите разобраться с 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
Greza
01 декабря 2016, 14:25
modx.pro
2 249
Реклама

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

Greza
Greza Старожил
01 декабря 2016, 22:33
Не уж то никто не знает, или я не корректный вопрос задал?
Подскажите, пожалуйста, хоть куда копать.
    Александр
    Александр Старожил
    01 декабря 2016, 23:42
    [[!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
      Greza Старожил
      01 декабря 2016, 23:49
      Спасибо, но так удаляются все ресурсы выведенные на страницу при нажатии на одну ссылку в одном ресурсе
        Александр
        Александр Старожил
        02 декабря 2016, 00:08
        Где вызываете сниппет?
    Greza
    Greza Старожил
    02 декабря 2016, 00:10
    Есть страница с листом ресурсов выведена через pdoResources
    в каждом ресурсе есть ссылка Удалить
    [[!AjaxSnippet?
    	&snippet=`deleteAdv`
    	&id=`[[+id]]`
            &as_mode=`onclick`
            &as_trigger=`Удалить объявление`
    ]]
      Александр
      Александр Старожил
      02 декабря 2016, 00:12
      Поставлю вопрос по-другому: куда вы записываете код, что написали выше?

        Александр
        Александр Старожил
        03 декабря 2016, 00:39
        Попробуйте изменить сниппет 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
      Greza Старожил
      02 декабря 2016, 00:14
      в шаблон вывода каждого элемента- ресурса на страницу через pdoResources
        Greza
        Greza Старожил
        02 декабря 2016, 00:14
        Я надеялся что при нажатии на ссылку Удалить объявление, будет вызываться сниппет deleteAdv и ресурс будет удален, но на деле все ресурсы на странице удаляются
        хотя id у всех разные
          Александр
          Александр Старожил
          03 декабря 2016, 01:18
          Хм, раз так, значит срабатывают вызовы всех сниппетов сразу. Посмотрите по id или class срабатывает кнопка и не одно ли значение у всех этих кнопок установлено.
          Greza
          Greza Старожил
          02 декабря 2016, 09:57
          вопрос не решен
          может есть у кого-то дельные мысли по поводу вопроса?
            Николай Загумённов
            02 декабря 2016, 11:14
            Написать свой запрос и обработчик, не используя ajaxSnippet. Более подробно о том как это сделать описано в этой статье.
              Greza
              Greza Старожил
              02 декабря 2016, 11:16
              Да спасибо за помощь, я конечно решил уже проблему не используя ajaxSnippet.
              Однако разобраться с вопросом хотелось бы.
            Константин Ильин
            02 декабря 2016, 12:23
            Наверно проще было бы использовать 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