Всего 125 687 комментариев

Артур Шевченко
17 мая 2021, 20:46
0
["\u041d\u0435\u0440\u0436\u0430\u0432\u0435\u044e\u0449\u0430\u044f \u0441\u0442\u0430\u043b\u044c"]
По-моему это больше похоже на массив, json вроде в фигурных скобках обычно. И где он у вас в mFilter2 выводится?
Роман
17 мая 2021, 17:19
0
Заливайте сразу с menuindex и не будет проблем.
Амина
17 мая 2021, 16:04
0
Спасибо, что помогаете! Это мой первый и возможно последний опыт работы в modx и вообще в вебе (раньше только небольшие учебные задачки).

AjaxSnippet использовала, потому что хотела вызывать сниппет по нажатию на кнопку и увидела такое решение на форуме modx.ru/vopros-otvet/info/1883/ Видимо не так поняла)

Верстка тоже корявая, потому что глаз уже замылен.

Для вашего спокойствия могу сказать, что сайтом никто пользоваться не будет, лишь бы работало)

Еще раз спасибо!
Артур Шевченко
17 мая 2021, 14:58
0
Это твоё личное мнение, мне нравится моё решение, оно простое, понятное и работает. Да оно далеко от идеала, но это не отменяет всего вышесказанного.
Павел Бигель
17 мая 2021, 14:04
+1
1. Ну так назови цикл статьей «Скопируй сам». Почему «Сделай»?
2. Это не лучший, а прям наихудший способ. Кстати если так хотелось прикрутить авторизацию, то можно было доработать Login.
Scorp Satex
17 мая 2021, 14:01
0
Права и группы прописали? docs.modx.pro/komponentyi/office/byistryij-start
Тестируете в режиме инкогнито, чтобы авторизация под админом не ломала логику работу снипета?
Артур Шевченко
17 мая 2021, 13:12
0
Согласен. Надо добавить к коду isNumber.
Павел Бигель
17 мая 2021, 13:09
+1
Без проблем!
100$ и я готов написать решение многократно элегантнее этого с пояснением каждого шага для новичков. Готовы проспонсировать статью?
Дорого?
Можете использовать компонент Office который стоит половину стоимости и реализует задачу гораздо лучше
modstore.pro/packages/users/office
Артур Шевченко
17 мая 2021, 13:08
0
Итого ты не учишь, а даешь людям копировать плохие практики.
1. Не тот у меня уровень, чтобы кого-то учить.
2. Я во вступлении написал, что это не лучший из возможных вариантов.
3. Есть ты и твои комментарии, кто-то проникнется и не станет это копировать, кто-то допилит, а кому-то и так сойдет.
Денис Мижеревич
17 мая 2021, 13:05
+1
Раскритиковали…
Напишите и выложите свой подобный кейс, а то желающих поделиться разработкой не много
Павел Бигель
17 мая 2021, 13:04
0
Валидирует.
У тебя валидация уровня required, я туда могу тебе прислать все что угодно.
Артур Шевченко
17 мая 2021, 13:02
0
Из поста данные не валидируются.
Хочешь сказать FormIt их не проверяет?
Артур Шевченко
17 мая 2021, 13:00
0
Люди предупреждены. А за ревью спасибо.
Павел Бигель
17 мая 2021, 12:29
+6
Мне как раз все понятно.
{if $_modx->user.id > 0}           
    <a href="[[~13]]">  <!-- 13 это id ресурса с формой оформления заказа -->
         <button type="submit" class="knopka2">
             Оформить заказ
       </button>
    </a>          
{else}
    <button type="button" data-toggle="modal" data-target="#modalSMSAuth" class="knopka2">
        Оформить заказ
    </button>
{/if}
Помесь стандартного и fenom синтаксиса это дурной тон.

{'!AjaxForm' | snippet:[
                'snippet' =>'custConfirm',
                'form' =>'@FILE chunks/forms/confirmForm.html',
                'validate'=>'phone:required'
            ]} 
            {'!AjaxForm' | snippet:[
                'snippet' =>'custCheckCode',
                'customValidators' => 'validateCode'
                'form' =>'@FILE chunks/forms/checkcodeForm.html',
                'validate'=>'phone:required,code:validateCode',
                'redirectTo' => 13 
            ]}
Два некешированных вызова AjaxForm. А че ж не 5? Эту задачу можно решить одним вызовом сниппета.

<?php
$file = MODX_CORE_PATH . 'components/codesender/smsc_api.php';
if(!file_exists($file)){
    $modx->log(1, 'FILE NOT FOUND');
}
include_once $file;

if(!isset($translit)){
    $translit = 1; // по умолчанию отправляем транслит, там можно впихнуть больше текста
}
$send = send_sms($number, $message, $translit);

return $send;
Такого рода задачи решаются не сниппетами. Сниппеты это вообще про другое.
Более того, ты же ниже создаешь пакет, какая проблема примутить к нему класс-контроллер?

Тут вы вероятно заметили, что есть сниппет genPassword, изнутри он выглядит так
Опять же а) Не решаются такие задачи сниппетами б) mt_rand не является безопасным для задач уровня генерации паролей. Ты бы это знал, если бы писал это сам.

Итак, выходим на финишную прямую. Сниппет custCheckCode отвечает за проверку кода, авторизацию и регистрацию пользователей
Снова, такие задачи не решаются сниппетами.

// если ошибок нет
    if($_POST['phone']){
        $username = preg_replace('/[^0-9]/', '', trim($_POST['phone']));
        $params = array('username' => $username, 'password' => $_POST['code'], 'group' => 2, 'active' => true, 'blocked' => false);
        $params = array_merge($_POST, $params);
        $user = $modx->getObject('modUser', array('username' => $username));
        if(!$user){
            $modx->log(1, 'Регистрация');
            $user = $modx->runSnippet('Registration', array('params' => $params));
        }
        $user->set('password', $_POST['code']);
        $user->save();
        $response = $modx->runSnippet('Authorization', array('params' => $params));
        if(!$response['success']){
            return  $AjaxForm->error($response['message'],  array());
        }
        $redirectId= $scriptProperties['redirectTo'] ?: 1; // при вызове сниппета мы передаём id ресурса, на который нужно сделать редирект, если не передаем, то редирект будет на главную.
        $redirectUrl = $modx->makeUrl($redirectId , 'web', '', 'full'); 
        return $AjaxForm->success($response['message'], array('redirectTo' => $redirectUrl)); 
    }
}
Из поста данные не валидируются. Пахнет безопасностью! Либо впадлу, либо не знаешь что это такое.
Тут кстати гораздо логичнее была бы проверка на false.

Кастомный валидатор validateCode содержит такой код:
Опять никакой валидации. Еще и сырой запрос (вызов которого не оправдан ничем)

Регистрацию я сделал так (Registration)
Ни единой проверки на то что модель не сохранилась. Неверное сохранение аггеративных моделей.

Итого: куски сомнительного кода не несущие абсолютно никакой ценности.
Я бы ни слова ни сказал, даже плюсик бы залепил если бы тут было хоть какое-то объяснение происходящего.
Почему так, а не иначе, почему это лучше, а это хуже.

Итого ты не учишь, а даешь людям копировать плохие практики.
Абсолютно заслуженный минус
Павел Бигель
17 мая 2021, 10:48
+1
Простыня кода, три строчки текста, никаких объяснений, нулевая информативность.