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

Амина
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
Простыня кода, три строчки текста, никаких объяснений, нулевая информативность.
Alexey
17 мая 2021, 09:25
0
В плагине после строки

case 'OnWebPagePrerender':
добавить строку

if($modx->resource->id == 8) return;

где 8 — id нужного ресурса, меняем на нужный.
Georg
17 мая 2021, 09:09
0
Я так понимаю можно и на ID ресурса проверку сделать? AMP без шаблона делаю. Может есть где-то образец как реализовать? Порылся в интернете не нашел, а плагины и сниппеты, это прям не про меня если честно.