Александр Мельник

Александр Мельник

С нами с 02 сентября 2016; Место в рейтинге пользователей: #52
13 сентября 2020, 10:31
+2
Тоже использовал этот официальный SDK от яндекс кассы на одном проекте. Удобно с ним работать.
Жаль только что ссылка на оплату живет только один час и если покупатель засомневался, не оплатил сразу, а через 2 часа все же решился — то переходя по ссылке на страницу оплаты он уже увидит ошибку.
Мой заказчик почти сразу же попросил дописать функционал с возможностью через админку генерировать новые ссылки для оплаты и отсылать их покупателю.
10 сентября 2020, 22:57
0
Вы правы, но я добавляю сам руками. Мне так спокойнее что ли.
10 сентября 2020, 22:54
0
здесь url не подойдет.
Здесь нужен абсолютный путь внутри операционной системы, которая установлена на вашем сервере.
Вы можете узнать этот путь разными путями, но проще всего создайте в корне сайта файл path.php c содержимым
<?php
echo $_SERVER['DOCUMENT_ROOT'];
и обратитесь к нему через браузер ваш сайт/path.php
То что увидите это и есть абсолютный путь к корню вашего сайта
require 'то что увидели/index.php';
10 сентября 2020, 22:48
0
логи сервера не имеют отношения к сайту и не могут (ну по крайней мере не должны) лежать в его директориях.
Все зависит исключительно от того какой у вас сервер (apache, nginx) от того настраивали его вы сами или специалисты хостинга.
Вы можете либо сами имея доступ ssh к серверу посмотреть файлы конфигурации вебсервера или же написать в службу поддержки хостинга.
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:09
0
Ну и кстати, мне не раз здесь говорили на форуме знающие люди, что не нужно добавлять форме класс ajax_form? но я всегда добавляю и это часто решает много проблем. попробуйте и вы
<form action="" id="commentForm" method="post" class="cmxform ajax_form">
10 сентября 2020, 22:05
0
Я вижу тут два пути
— проверять к какой группе относиться user и показывать форму в шаблоне только при соблюдении условия, мол если пользователь в такой-то группе то покажем кнопку — снять с публикации
— или же в сниппете проверять какой пользователь сейчас авторизован в контексте web, какая у него группа и там уже решать.
Но раз вы пишите, что «Да я ограничил показ формы доступен только группе users» то значит вы пошли по первому пути и проблем быть не должно.
10 сентября 2020, 22:00
0
Как так — страница обновляется и не проходит валидацию.
Раз вы вызываете ajaxform значит отправка формы должна проходить без перезагрузки страницы.
Попробуйте открыть консоль браузера и смотреть ошибки js, у вас явно что с jquery, может у вас крутой проект на vuejs а ajaxform требует jquery насколько я помню.
Лично мне не нравится что у вас в вызове ajaxform не переданы параметры — отправитель письма и имя отправителя. очень много раз встречался что если эти параметры не переданы, письма просто не доходят, но раз вы говорите что письмо приходит, то ройте только в ошибки со стороны js.
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, 21:37
0
Но в целом, идея позволять пользователям сайта снимать ресурсы с публикации, так себе идея.
Кто-то откроет код сайта в браузере, заменит идентификатор ресурса на число 1, отправит форму и отключит главную страницу сайта например.
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:14
0
зачем вы беретесь за сайт на php если в нем вообще ноль.
Где находится ваша кнопка, нажатие на которую снимает с публикации ресурс?
В админке? На фронтенде?
Примерно порядок действий такой.
У вас есть форма html у которой есть кнопка и скрытое поле в котором лежит идентификатор ресурса. Вам нужно обработать отправку этой формы (или просто указав в атрибуте формы action путь к файлу php или же на js отловить событие отправки формы, получить с нее данные и отправить ajax запрос на файл php)
Далее в этом файле php вы должны через основной объект $modx получить ресурс с тем идентификатором, что предан из формы, установить значение его свойства published в 0 и сохранить.
Примерно так
$res = $modx->getObject('modResource',$id);
$res->set('published',0);
$res->save();
03 сентября 2020, 11:33
0
Возможно у вас не установлен pdoTools
Если установлен, то возможно в системных настройках указан не тот парсер. Проверьте что в системной настройка parser_class, там должно быть указано pdoParser
Если так и есть, то возможно у вас не указано в системных настройках — использовать феном на страницах, ключ pdotools_fenom_parser
02 сентября 2020, 09:22
0
вы же выше написали
если я регистрируюсь то всё отображается нормально, стоит мне выйти из личного кабинета то не работает вообще.
а теперь говорите
если даже авторизуюсь то не выводится
мне кажется это совершенно противоположные предложения.
02 сентября 2020, 06:20
0
и что вас смущает? Вы выводите значение поля пользователя, авторизованного в данный момент. Когда вышли из личного кабинета, то что должно отображаться? Ведь никто не авторизован.
02 сентября 2020, 06:09
0
Ну копировать строку не нужно было, это был лишь пример того, что на феноме проще. У вас судя по коду используется не просто ТВ для хранения изображения а migx. Так что там нужно будет еще использовать модификатор |fromJSON и брать первый элемент.
01 сентября 2020, 21:47
0
Вам принципиален этот синтаксис шаблонизатора? [[]]
У стандартного шаблонизатора modx довольно часто наблюдаются проблемы с написанием условий.
При этом на fenom ваша проблема решилась бы в одну строку.
{set $image = $_modx->resource.image? $_modx->resource.image: «images/defaultPic.jpg» }
01 сентября 2020, 21:38
0
что вообще вы делаете.
Зачем используете сниппет pdoPage который для постраничного разбиения для вывода единичного результата.
Почитайте что такое параметр element docs.modx.pro/komponentyi/pdotools/snippetyi/pdopage Туда должен передаваться сниппет, а вы указываете имя класса — pdoUsers
И как правильно вам сказали ранее, «createdby» это идентификатор пользователя, а вы туда передаете имя.
Вы же спрашивали, почему этот код не работает?

У каждого ресурса есть поле createdby и в нем лежит идентификатор пользователя создателя. Предположим это 5. Андрей вам дал ссылку в которой написано [[!+modx.user.id:userinfo=`fullname`]] Заменяете modx.user.id на 5 — получаете имя пользователя, который создал ресурс.
28 августа 2020, 18:12
0
спасибо Роман, но видите во втором примере tpl в виде чанка, а все равно глюк — выводится кусок
Array ( [limit] => 3 )
Пока грешу на то что на сервере в настройках php.ini указано mbstring.function.overload = 2 вместо 0.
Заказчик жмотиться купить отдельно хостинг и в одном месте размещены и сайты на битриксе (которые требует mbstring.function.overload = 2) и на других движках.
28 августа 2020, 18:06
0
просто мимо проходил, но мое вам уважение, что так вникли и постарались помочь человеку.