Павел Бигель

Павел Бигель

Был в сети 20 апреля 2026, 18:00
Заказы не принимаю
Мне как раз все понятно.
{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)
Ни единой проверки на то что модель не сохранилась. Неверное сохранение аггеративных моделей.

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

Итого ты не учишь, а даешь людям копировать плохие практики.
Абсолютно заслуженный минус
Вот вроде и минус ставить не хочется (человек старался + олд + по содержательности явно лучше многих статей тут), но и лайк ставить не за что.
Практического смысла и применения в этом околонулевая
За любые уязвимости на своем сайте несешь ответственность только ты.
Так или иначе — как ты можешь на 100% быть уверенным в том, что какой-то компонент на сайте образовал дыру?