Код о снятии с публикации ресурса?

Здравствуйте!
Помогите реализовать код о снятии с публикации ресурса miniShop2 при нажатии на кнопку.
Можно переделать вот этот код?
<?php
$res = $modx->getObject('modResource',$id);
$createdby = $res->get('createdby');

$user = $modx->user->getOne('Profile');
$profile = $user->get('id');

if($createdby == $profile){
    if($_GET['user'] == $profile ) {
        $unid = $_GET['id'];
        $resource = $modx->getObject('modResource', $unid );
        $resource->set('published',1);
        $resource->save();
    }
}
Заранее благодарю за помощь!
Рушан
10 сентября 2020, 17:25
modx.pro
757
0

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

Костромин Игорь
10 сентября 2020, 18:37
0
$resource->set('published',0);
    Рушан
    10 сентября 2020, 18:55
    0
    Прошу прощения за тупизм я в php вообще ноль. Я только вникаю во всё это. Прошу не ругать сильно.
    Прошу помочь в обучении в данной задаче.
    Как подключить снипет к кнопке, что бы реагировал на клик?
      Александр Мельник
      10 сентября 2020, 21:14
      0
      зачем вы беретесь за сайт на php если в нем вообще ноль.
      Где находится ваша кнопка, нажатие на которую снимает с публикации ресурс?
      В админке? На фронтенде?
      Примерно порядок действий такой.
      У вас есть форма html у которой есть кнопка и скрытое поле в котором лежит идентификатор ресурса. Вам нужно обработать отправку этой формы (или просто указав в атрибуте формы action путь к файлу php или же на js отловить событие отправки формы, получить с нее данные и отправить ajax запрос на файл php)
      Далее в этом файле php вы должны через основной объект $modx получить ресурс с тем идентификатором, что предан из формы, установить значение его свойства published в 0 и сохранить.
      Примерно так
      $res = $modx->getObject('modResource',$id);
      $res->set('published',0);
      $res->save();
        Рушан
        10 сентября 2020, 21:24
        0
        На фронтенде кнопка.
          Александр Мельник
          10 сентября 2020, 21:34
          0
          Файл snippet.php
          <?php
          
              /**
               * Подключение объекта modx
               */
              define('MODX_API_MODE', true);
              require 'абсолютный путь к файлу в корне сайта/index.php';
              
              $id = $_POST['id'];
              $res = $modx->getObject('modResource',$id);
              $res->set('published',0);
              $res->save();
          ?>
          Форма где то в шаблоне
          <form action="путь до snippet.php" method="POST">
                  <input type="text" hidden value="идентификатор ресурса" name="id">
                  <input type="submit" value="снять с публикации">
              </form>
Александр Мельник
10 сентября 2020, 21:37
0
Но в целом, идея позволять пользователям сайта снимать ресурсы с публикации, так себе идея.
Кто-то откроет код сайта в браузере, заменит идентификатор ресурса на число 1, отправит форму и отключит главную страницу сайта например.
    Рушан
    10 сентября 2020, 21:40
    0
    А как сделать что бы такого не случилось?
    Хоть буду знать)
      Александр Мельник
      10 сентября 2020, 21:46
      0
      Тут нужно исходить из логики вашего приложения, понимать зачем вообще вы это делаете.
      Возможно право снимать ресурс с публикации нужно давать не всем? А только определенным пользователям. Тогда нужно ограничить показ этой формы на фронтедне только если пользователь авторизован на сайте и это пользователь определенной группы — к примеру менеджер
      Или по крайней мере делать проверку в файле snippet.php что это за ресурс с таким id. например проверять его шаблон и разрешать отключать только ресурсы с определенным шаблоном.
      <?php
      
          /**
           * Подключение объекта modx
           */
          define('MODX_API_MODE', true);
          require 'путь к файлу в корне сайта/index.php';
          
          $id = $_POST['id'];
          $res = $modx->getObject('modResource',$id);
          $template = $res->get('template');
      
          if($template==5){
              $res->set('published',0);
          $res->save();
          }
      ?>
      Так у пользователей будет возможность отключить ресурсы только если их шаблон имеет идентификатор 5.
        Рушан
        10 сентября 2020, 22:01
        0
        Да я ограничил показ формы доступен только группе users и есть личный кабинет.
        Можно ли сделать так, что бы только определённая группа могла снять с публикации.
        Хорошо что сказали мне про это)
          Александр Мельник
          10 сентября 2020, 22:05
          0
          Я вижу тут два пути
          — проверять к какой группе относиться user и показывать форму в шаблоне только при соблюдении условия, мол если пользователь в такой-то группе то покажем кнопку — снять с публикации
          — или же в сниппете проверять какой пользователь сейчас авторизован в контексте web, какая у него группа и там уже решать.
          Но раз вы пишите, что «Да я ограничил показ формы доступен только группе users» то значит вы пошли по первому пути и проблем быть не должно.
            Рушан
            10 сентября 2020, 22:20
            0
            И ещё стыдно даже спросить не разу не дела такое только вот сталкнулся(
            А как указывается путь к снипету?
            <form action="путь до snippet.php" method="POST">
            И последнее как подвязать кнопке всё это дело например ссылке
            <a href="">Удалить ресурс</a>
              Александр Мельник
              10 сентября 2020, 22:32
              0
              Сложно будет пояснить. С javascript вы тоже не знакомы?
              Можно привязать это к ссылке, но зачем? в вашем случае это вызовет необходимость разбираться еще в куче технологий. Используйте вместо ссылки форму
              <form action="путь до snippet.php" method="POST">
                      <input type="text" hidden value="идентификатор ресурса" name="id">
                      <input type="submit" value="Удалить ресурс">
                  </form>
              и с помощью css стилизуйте так как посчитаете нужным.
              Как прописывать путь тоже вопрос неоднозначный. Мой вам совет, чтобы сейчас не вникать в теорию относительных, абсолютных путей, разницы между url и uri просто расположите файл в корне сайта, а в форме вызывайте его
              <form action="snippet.php" method="POST">
              Вам необязательно делать этот код отдельным файлом, вы можете в админке сайта создать новый сниппет, в него вписать такой же код, только даже проще
              <?php
                  $id = $_POST['id'];
                  $res = $modx->getObject('modResource',$id);
                  $template = $res->get('template');
              
                  if($template==5){
                      $res->set('published',0);
                  $res->save();
                  }
              , расположить вызов этого сниипета на какой-то странице, к примеру с идентификатором 6
              Тогда в форме в атрибуте action можете указать [[~6]] или {6|url} если используете синтаксис шаблонизатора fenom
                Рушан
                10 сентября 2020, 22:49
                0
                А как указать url для этого пункта?
                require 'путь к файлу в корне сайта/index.php';
                  Александр Мельник
                  10 сентября 2020, 22:54
                  0
                  здесь url не подойдет.
                  Здесь нужен абсолютный путь внутри операционной системы, которая установлена на вашем сервере.
                  Вы можете узнать этот путь разными путями, но проще всего создайте в корне сайта файл path.php c содержимым
                  <?php
                  echo $_SERVER['DOCUMENT_ROOT'];
                  и обратитесь к нему через браузер ваш сайт/path.php
                  То что увидите это и есть абсолютный путь к корню вашего сайта
                  require 'то что увидели/index.php';
                    Рушан
                    10 сентября 2020, 23:18
                    0
                    У вас есть скайп?
                    Я всё прописал всё сделал
                    при нажатии на кнопку пишет страница не найдена(
                      Рушан
                      10 сентября 2020, 23:35
                      0
                      А куда идёт этот путь просто главной странице?
                      require 'то что увидели/index.php';
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
17