Код о снятии с публикации ресурса?
        Здравствуйте!
Помогите реализовать код о снятии с публикации ресурса miniShop2 при нажатии на кнопку.
Можно переделать вот этот код?
    
    
                                                                                
            Помогите реализовать код о снятии с публикации ресурса 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();
    }
}Заранее благодарю за помощь!    Комментарии: 17
$resource->set('published',0);            
                Прошу прощения за тупизм я в php вообще ноль. Я только вникаю во всё это. Прошу не ругать сильно.
Прошу помочь в обучении в данной задаче.
Как подключить снипет к кнопке, что бы реагировал на клик?
                    Прошу помочь в обучении в данной задаче.
Как подключить снипет к кнопке, что бы реагировал на клик?
                зачем вы беретесь за сайт на php если в нем вообще ноль.
Где находится ваша кнопка, нажатие на которую снимает с публикации ресурс?
В админке? На фронтенде?
Примерно порядок действий такой.
У вас есть форма html у которой есть кнопка и скрытое поле в котором лежит идентификатор ресурса. Вам нужно обработать отправку этой формы (или просто указав в атрибуте формы action путь к файлу php или же на js отловить событие отправки формы, получить с нее данные и отправить ajax запрос на файл php)
Далее в этом файле php вы должны через основной объект $modx получить ресурс с тем идентификатором, что предан из формы, установить значение его свойства published в 0 и сохранить.
Примерно так
                    Где находится ваша кнопка, нажатие на которую снимает с публикации ресурс?
В админке? На фронтенде?
Примерно порядок действий такой.
У вас есть форма html у которой есть кнопка и скрытое поле в котором лежит идентификатор ресурса. Вам нужно обработать отправку этой формы (или просто указав в атрибуте формы action путь к файлу php или же на js отловить событие отправки формы, получить с нее данные и отправить ajax запрос на файл php)
Далее в этом файле php вы должны через основной объект $modx получить ресурс с тем идентификатором, что предан из формы, установить значение его свойства published в 0 и сохранить.
Примерно так
$res = $modx->getObject('modResource',$id);
$res->set('published',0);
$res->save();            
                На фронтенде кнопка.            
                    
                Файл 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>            
                Да            
                    
                Но в целом, идея позволять пользователям сайта снимать ресурсы с публикации, так себе идея.
Кто-то откроет код сайта в браузере, заменит идентификатор ресурса на число 1, отправит форму и отключит главную страницу сайта например.
                    Кто-то откроет код сайта в браузере, заменит идентификатор ресурса на число 1, отправит форму и отключит главную страницу сайта например.
                А как сделать что бы такого не случилось?
Хоть буду знать)
                    Хоть буду знать)
                Тут нужно исходить из логики вашего приложения, понимать зачем вообще вы это делаете.
Возможно право снимать ресурс с публикации нужно давать не всем? А только определенным пользователям. Тогда нужно ограничить показ этой формы на фронтедне только если пользователь авторизован на сайте и это пользователь определенной группы — к примеру менеджер
Или по крайней мере делать проверку в файле snippet.php что это за ресурс с таким id. например проверять его шаблон и разрешать отключать только ресурсы с определенным шаблоном.
                    Возможно право снимать ресурс с публикации нужно давать не всем? А только определенным пользователям. Тогда нужно ограничить показ этой формы на фронтедне только если пользователь авторизован на сайте и это пользователь определенной группы — к примеру менеджер
Или по крайней мере делать проверку в файле 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.            
                Да я ограничил показ формы доступен только группе users и есть личный кабинет.
Можно ли сделать так, что бы только определённая группа могла снять с публикации.
Хорошо что сказали мне про это)
                    Можно ли сделать так, что бы только определённая группа могла снять с публикации.
Хорошо что сказали мне про это)
                Я вижу тут два пути
— проверять к какой группе относиться user и показывать форму в шаблоне только при соблюдении условия, мол если пользователь в такой-то группе то покажем кнопку — снять с публикации
— или же в сниппете проверять какой пользователь сейчас авторизован в контексте web, какая у него группа и там уже решать.
Но раз вы пишите, что «Да я ограничил показ формы доступен только группе users» то значит вы пошли по первому пути и проблем быть не должно.
                    — проверять к какой группе относиться user и показывать форму в шаблоне только при соблюдении условия, мол если пользователь в такой-то группе то покажем кнопку — снять с публикации
— или же в сниппете проверять какой пользователь сейчас авторизован в контексте web, какая у него группа и там уже решать.
Но раз вы пишите, что «Да я ограничил показ формы доступен только группе users» то значит вы пошли по первому пути и проблем быть не должно.
                И ещё стыдно даже спросить не разу не дела такое только вот сталкнулся(
А как указывается путь к снипету?
                    А как указывается путь к снипету?
<form action="путь до snippet.php" method="POST">И последнее как подвязать кнопке всё это дело например ссылке <a href="">Удалить ресурс</a>            
                Сложно будет пояснить. С javascript вы тоже не знакомы?
Можно привязать это к ссылке, но зачем? в вашем случае это вызовет необходимость разбираться еще в куче технологий. Используйте вместо ссылки форму
Как прописывать путь тоже вопрос неоднозначный. Мой вам совет, чтобы сейчас не вникать в теорию относительных, абсолютных путей, разницы между url и uri просто расположите файл в корне сайта, а в форме вызывайте его
Тогда в форме в атрибуте action можете указать [[~6]] или {6|url} если используете синтаксис шаблонизатора fenom
                    Можно привязать это к ссылке, но зачем? в вашем случае это вызовет необходимость разбираться еще в куче технологий. Используйте вместо ссылки форму
<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
                А как указать url для этого пункта?
                    require 'путь к файлу в корне сайта/index.php';            
                здесь url не подойдет.
Здесь нужен абсолютный путь внутри операционной системы, которая установлена на вашем сервере.
Вы можете узнать этот путь разными путями, но проще всего создайте в корне сайта файл path.php c содержимым
То что увидите это и есть абсолютный путь к корню вашего сайта
                    Здесь нужен абсолютный путь внутри операционной системы, которая установлена на вашем сервере.
Вы можете узнать этот путь разными путями, но проще всего создайте в корне сайта файл path.php c содержимым
<?php
echo $_SERVER['DOCUMENT_ROOT'];и обратитесь к нему через браузер ваш сайт/path.phpТо что увидите это и есть абсолютный путь к корню вашего сайта
require 'то что увидели/index.php';            
                У вас есть скайп?
Я всё прописал всё сделал
при нажатии на кнопку пишет страница не найдена(
                    Я всё прописал всё сделал
при нажатии на кнопку пишет страница не найдена(
                А куда идёт этот путь просто главной странице?
                    require 'то что увидели/index.php';            
                            Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.