Andrey
Ну под Эво мало кейсов публичных для крупных сайтов. Да и вообще разделение юзеров оно...ну такое.
Andrey
Про нас и говоришь, по сути. 20 новостей в день минимум.
Andrey
Мы там всякого нахерачили ещё для них типа проверки текста на очередной "экстремизм" Ну а поскольку админка — она для себя, иногда шутим.
Андрей [aharito]
буду безмерно благодарен!
Так. Вот чанк form_feedback, это 1-й вызов ФЛ для формы обратной связи: <div class="feedback-form margin-bottom-40" id="feedback-form"> <div id="feedback_frmwrapper"> [!FormLister? &formid=`form_feedback` &rules=`{ "name":{ "required":"Введите имя" }, "email":{ "required":"Введите email", "email":"Введите email правильно" }, "phone":{ "phone":"Введите номер правильно" }, "comment":{ "required":"Вы не написали сообщение", "lengthBetween" : { "params" : [10,1000], "message" : "Длина сообщения должна быть от 10 до 1000 символов" } } }` &formTpl=`form_feedback_tpl` &messagesOuterTpl=`form_callme_outer` &errorTpl=`form_callme_error_tpl` &errorClass=` has-error` &requiredClass=` has-warning` &from=`[(client_email_from)]` &to=`[(client_email_to)]` &bcc=`[(client_email_bcc)]` &subject=`Обратная связь с сайта [(client_site_name)]` &reportTpl=`form_feedback_report` &successTpl=`form_feedback_success` &parseDocumentSource=`1` !] </div> </div>
EVO bot Лёшка
Так. Вот чанк form_feedback, это 1-й вызов ФЛ для формы обратной связи: <div class="feedback-form margin-bottom-40" id="feedback-form"> <div id="feedback_frmwrapper"> [!FormLister? &formid=`form_feedback` &rules=`{ "name":{ "required":"Введите имя" }, "email":{ "required":"Введите email", "email":"Введите email правильно" }, "phone":{ "phone":"Введите номер правильно" }, "comment":{ "required":"Вы не написали сообщение", "lengthBetween" : { "params" : [10,1000], "message" : "Длина сообщения должна быть от 10 до 1000 символов" } } }` &formTpl=`form_feedback_tpl` &messagesOuterTpl=`form_callme_outer` &errorTpl=`form_callme_error_tpl` &errorClass=` has-error` &requiredClass=` has-warning` &from=`[(client_email_from)]` &to=`[(client_email_to)]` &bcc=`[(client_email_bcc)]` &subject=`Обратная связь с сайта [(client_site_name)]` &reportTpl=`form_feedback_report` &successTpl=`form_feedback_success` &parseDocumentSource=`1` !] </div> </div>
Читай документацию ©(Pathologic) https://docs.evo.im/04_extras/formlister.html
Serguei
я человека, который в ворде стили умеет, только в зеркале видел 😸
Ну на самом деле, кто реально большие документы в ворде делал страниц по 200, типа диссертаций, книг, дипломов, научных работ, документации к проектам и т.д., где требовалось постоянное оформление перекрестных ссылочек/оглавлений и операции вида "быстро уменьшить отступы перед каждым заголовком", или "поменяй местами две главы так, чтобы ссылки перекрестные и оглавнения не сломались", то они и с сайтами прекрасно работают и не лепят туда кучу мусора. Но их почему-то все меньше и меньше, такое чувство, что дипломов сейчас больше либо никто не пишет, либо вообще не парится с их оформлением.
Andrey
Вот я щас думаю, в новой версии сайта может и правда зафигачить некое подобие pagebuilder. Иногда хотят нечто лендинговое делать, с предопределенными стилями и видом блоков. Но пока в процессе обсуждения.
Pathologic
вот этот редактор мне казался прикольным
Pathologic
но там писать и писать
Serguei
Мы там всякого нахерачили ещё для них типа проверки текста на очередной "экстремизм" Ну а поскольку админка — она для себя, иногда шутим.
Угу-угу. А потом кто-нибудь из коллег скопипастит кусочек конфигурации на другой проектик. Было у меня уже такое дважды :) Один раз на конференции, когда собрались всякие шишки из РосАтома, правительства и т.д., презентовали наш новый прибор для использования на АЭС. Демонстрация программы на проекторе, красивое изображение во всю стену. Мой коллега запускает прибор, коннектит его с прогаммой, кторую я начинал делать еще когда-то давно, а потом кто только не продолжал. И во всю стену показывается окошечко с вопросом: "А хочешь получить по жопе?". Правда, к слову сказать, презентация потом прошла бурно и весело, нас запомнили, потом несколько лет вспоминали:) А другой случай был, когда тоже спустя несколько лет прислали рекламацию с завода, что там мол и так, ваш прибор перестал работать, на экране показывает сообщение "говеный фрейм", очень просим вас убрать это сообщение.
Андрей [aharito]
буду безмерно благодарен!
Всей этой хрени (чанки и прочее для Аякса) я присваиваю категорию, скажем, FormsAJAX, чтобы потом искать легче было. Вот плагин, пусть form_AJAX_plugin, на событие 404, в нем почти такой же вызов. Ну. понятно, что там же в этом CASE может быть и для форм с другими ИДшниками код. /** * form_AJAX_plugin * Плагин для вызова FormLister с формой через Аякс * * @category plugin * @internal @modx_category Forms AJAX * @internal @events OnPageNotFound */ if (empty($_SERVER['HTTP_X_REQUESTED_WITH']) || strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) != 'xmlhttprequest') { return; } if( isset($_GET['q']) && $_GET['q'] == 'ajax_form' && isset($_POST['formid']) ) { switch($_POST['formid']){ case 'form_feedback': $result = $modx->runSnippet('FormLister', array( 'formid' => 'form_feedback', 'rules' => '{ "name":{ "required":"Введите имя" }, "email":{ "required":"Введите email", "email":"Введите email правильно" }, "phone":{ "phone":"Введите номер правильно" }, "comment":{ "required":"Вы не написали сообщение", "lengthBetween" : { "params" : [10,1000], "message" : "Длина сообщения должна быть от 10 до 1000 символов" } } }', 'formTpl' => 'form_feedback_tpl', 'messagesOuterTpl' => 'form_callme_outer', 'errorTpl' => 'form_callme_error_tpl', 'errorClass' => ' has-error', 'requiredClass' => ' has-warning', 'from' => $modx->config['client_email_from'], 'to' => $modx->config['client_email_to'], 'bcc' => $modx->config['client_email_bcc'], 'subject' => 'Обратная связь с сайта '.$modx->config['client_site_name'], 'reportTpl' => 'form_feedback_report', 'successTpl' => 'form_feedback_success', 'removeEmptyPlaceholders' =>'1', 'parseDocumentSource' => '1' )); echo $modx->parseDocumentSource($result); die(); break; default: die(); break; } }
Serguei
Вот я щас думаю, в новой версии сайта может и правда зафигачить некое подобие pagebuilder. Иногда хотят нечто лендинговое делать, с предопределенными стилями и видом блоков. Но пока в процессе обсуждения.
Так это если заказчик не захочет в richtext править что-то. Некторым же хоть 10 pagebuilder-ов поставь, им все равно надо, чтобы можно было кусочек текста "красненьким выделить".
Andrey
Угу-угу. А потом кто-нибудь из коллег скопипастит кусочек конфигурации на другой проектик. Было у меня уже такое дважды :) Один раз на конференции, когда собрались всякие шишки из РосАтома, правительства и т.д., презентовали наш новый прибор для использования на АЭС. Демонстрация программы на проекторе, красивое изображение во всю стену. Мой коллега запускает прибор, коннектит его с прогаммой, кторую я начинал делать еще когда-то давно, а потом кто только не продолжал. И во всю стену показывается окошечко с вопросом: "А хочешь получить по жопе?". Правда, к слову сказать, презентация потом прошла бурно и весело, нас запомнили, потом несколько лет вспоминали:) А другой случай был, когда тоже спустя несколько лет прислали рекламацию с завода, что там мол и так, ваш прибор перестал работать, на экране показывает сообщение "говеный фрейм", очень просим вас убрать это сообщение.
ПУсть копипастит. Когда ввели эту оккупацию сраную и списки иноагентов, мы вообще хотели публичное апи делать для изданий, и словарь вести, чтобы помочь. Но мы не "Медуза", людям и жить когда-то надо.
Andrey
вот этот редактор мне казался прикольным
"Гутенберг" по-моему, только в профиль.
Pathologic
"Гутенберг" по-моему, только в профиль.
там фишка, что на выходе json, а выводишь уже сам как хочешь
Alexey
Всей этой хрени (чанки и прочее для Аякса) я присваиваю категорию, скажем, FormsAJAX, чтобы потом искать легче было. Вот плагин, пусть form_AJAX_plugin, на событие 404, в нем почти такой же вызов. Ну. понятно, что там же в этом CASE может быть и для форм с другими ИДшниками код. /** * form_AJAX_plugin * Плагин для вызова FormLister с формой через Аякс * * @category plugin * @internal @modx_category Forms AJAX * @internal @events OnPageNotFound */ if (empty($_SERVER['HTTP_X_REQUESTED_WITH']) || strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) != 'xmlhttprequest') { return; } if( isset($_GET['q']) && $_GET['q'] == 'ajax_form' && isset($_POST['formid']) ) { switch($_POST['formid']){ case 'form_feedback': $result = $modx->runSnippet('FormLister', array( 'formid' => 'form_feedback', 'rules' => '{ "name":{ "required":"Введите имя" }, "email":{ "required":"Введите email", "email":"Введите email правильно" }, "phone":{ "phone":"Введите номер правильно" }, "comment":{ "required":"Вы не написали сообщение", "lengthBetween" : { "params" : [10,1000], "message" : "Длина сообщения должна быть от 10 до 1000 символов" } } }', 'formTpl' => 'form_feedback_tpl', 'messagesOuterTpl' => 'form_callme_outer', 'errorTpl' => 'form_callme_error_tpl', 'errorClass' => ' has-error', 'requiredClass' => ' has-warning', 'from' => $modx->config['client_email_from'], 'to' => $modx->config['client_email_to'], 'bcc' => $modx->config['client_email_bcc'], 'subject' => 'Обратная связь с сайта '.$modx->config['client_site_name'], 'reportTpl' => 'form_feedback_report', 'successTpl' => 'form_feedback_success', 'removeEmptyPlaceholders' =>'1', 'parseDocumentSource' => '1' )); echo $modx->parseDocumentSource($result); die(); break; default: die(); break; } }
Благодарю! Это мне очень поможет!!!
Am
Ценник, конечно, веселый. ((%
Am
Сам делаю конструктор, складываю в json в БД и вывожу как хочу. ((%
Serguei
ПУсть копипастит. Когда ввели эту оккупацию сраную и списки иноагентов, мы вообще хотели публичное апи делать для изданий, и словарь вести, чтобы помочь. Но мы не "Медуза", людям и жить когда-то надо.
Так в случае с "говеным вреймом" вообще прикольно было. Я это ругательство ввел в одну из безумных ночей, когда отлаживали связь между приборами. Я писал на комп терминалку, коллега на сам прибор прошивку. Он в приборе показывал что-то вроде "Серега, ты обложался", если от мен яданные криво приходили, я на его косяк поставил проверку с этим "говеным фреймом". Потом к ним в отдел наняли работать какого-то китайца, помогать дописыватьпрограмму. Он по-русски говорил, но еще далеко не в совершенстве. Как выяснилось, он где-то нагуглил и перевод, что такое "говеный фрейм" - в принципе понял, что это относится к испорченным данным, и просо скопипастил этот кусок кода в совершенно другую программу уже к другому устройству. Ну и потом это всплыло уже года два спустя после того, как я с завода уволился :)
Andrey
Классные истории )
Pathologic
Ценник, конечно, веселый. ((%
я перепутал, https://quilljs.com/
Андрей [aharito]
буду безмерно благодарен!
Ну и наконец JS, чанк, скажем form_feedback_js который на УРЛ отправляет данные, он идет после вызова Жиквери. А можно и не чанк, а в файле, но здесь было сделано чанком, так и отправляю вам. <script> $(document).on('submit','#feedback_frmwrapper form',function(ev){ var frm = $('#feedback_frmwrapper form'); yaCounter48205061.reachGoal('formFeedbackSubmit'); $.ajax({ type: 'post', url: 'ajax_form', data: frm.serialize(), success: function (data) { $('#feedback_frmwrapper form').remove(); $('#feedback_frmwrapper').html( data ); } }); ev.preventDefault(); }); </script>
Serguei
там фишка, что на выходе json, а выводишь уже сам как хочешь
А поиск по такому контенту как делать потом - закешировать уже собранный вывод куда-нибудь?
Pathologic
да
Andrey
Интересно, сколько ещё лет этот вот js будет копипаститься =)
Pathologic
самый плохой вариант
Andrey
Нормальный вариант. Разве что я в файл уносил всё, типа ajax.php
Андрей [aharito]
буду безмерно благодарен!
Так, что еще.... я уже засыпаю, не соображаю, что-то пропустить могу. А, ну чанк самой формы form_feedback_tpl там использован <form method="post" action="form_feedback"> <div class="feedback-form-bg"></div> <div class="feedback-form-inner"> <h4 class="feedback-form-header">Напишите нам</h4> <input type="hidden" name="formid" value="form_feedback"> <input type="hidden" name="url" value="[!if? &is=`[+url.value+]:empty` &then=`[~[*id*]~]` &else=`[+url.value+]`!]"> <input type="hidden" name="pagetitle" value="[!if? &is=`[+pagetitle.value+]:empty` &then=`[*pagetitle*]` &else=`[+pagetitle.value+]`!]"> <div class="form-group [+name.errorClass+] [+name.requiredClass+]"> <label class="sr-only" for="name">Имя</label> <input name="name" value="[+name.value+]" type="text" class="form-control" id="name" placeholder="Представьтесь *"> [+name.error+] </div> <div class="form-group [+email.errorClass+] [+email.requiredClass+]"> <label class="sr-only" for="email">E-mail</label> <input name="email" value="[+email.value+]" type="text" class="form-control" id="email" placeholder="E-mail *"> [+email.error+] </div> <div class="form-group [+phone.errorClass+]"> <label class="sr-only" for="phone">Телефон</label> <input name="phone" value="[+phone.value+]" type="text" class="form-control" id="phone" placeholder="Телефон"> [+phone.error+] </div> <div class="form-group [+comment.errorClass+] [+comment.requiredClass+]"> <label class="sr-only" for="comment">Сообщение</label> <textarea name="comment" class="form-control" id="comment" placeholder="Ваше сообщение *">[+comment.value+]</textarea> [+comment.error+] </div> [+form.messages+] <button type="submit" class="btn btn-success">Отправить</button> </div> </form>
Andrey
А js наподобие этого, чтобы не множить одинаковые вызовы. Опять же можно влёгкую добавить ajax.get для каких-то других нужд. И на success вызывать что-тосторонее. https://gist.github.com/0test/d01a621386ca0a581453df702f9c9bb2
Андрей [aharito]
Интересно, сколько ещё лет этот вот js будет копипаститься =)
Думаю, много лет - есть же пословица - "не чини то, что работает!.
Axenia
VitaliyLabenskiy (198.05) увеличил карму remote_adm (3220.66)
Andrey
Я чет в последнее время решил возвернуться к обычному js и с удивлением увидел, что jquery по сути уже и не нужен.
Алексей
Я чет в последнее время решил возвернуться к обычному js и с удивлением увидел, что jquery по сути уже и не нужен.
а как ты сделал отправку формы через ajax на чистом js ? я пробовал чето не очень получилось
Andrey
ajax = function(params, callback) { const request = new XMLHttpRequest(); const url = "ajax.php"; request.responseType = "json"; request.open("POST", url, true); request.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); request.send(params); request.addEventListener("readystatechange", () => { if (request.readyState === 4 && request.status === 200) { callback.apply(this, [request.response]); } }); }
Serguei
А я с форлистером и аяксом чуть проще поступил. Сделал отдельную страницу с формлистером. Обычным. оттестировал. А на других страницах, где нужна форма, просто аяксом затягиваю данные с этой страницы, отправляю на нее и снова затягиваю. И всё. Примерно так: function formLoad() { $(".aj_form").each(function(){ var form = $(this); var url = form.attr('action'); var dt = form.data(); var params = ''; for (var key in dt) { params += params.length ? "&" : "?"; params += key + "=" + dt[key]; } url += params; console.log('url = ' + url); $.ajax({ type: "GET", url: url, success: function(data) { var formdata = $(data).find('.aj_form_content').eq(0).html(); form.html(formdata); } }); }); } function formProcess() { $(".aj_form").on('submit',function(e) { e.preventDefault(); var form = $(this); var url = form.attr('action'); $.ajax({ type: "POST", url: url, data: form.serialize(), success: function(data) { var formdata = $(data).find('.aj_form_content').eq(0).html(); form.html(formdata); } }); }); } Соответственно, на странице, где надо такую форму, просто пустую форму вставляю с нужным action, и все, в document.ready соответственно вызываю formLoad(); formProcess(); И всё работает безупречно.
EVO bot Лёшка
А я с форлистером и аяксом чуть проще поступил. Сделал отдельную страницу с формлистером. Обычным. оттестировал. А на других страницах, где нужна форма, просто аяксом затягиваю данные с этой страницы, отправляю на нее и снова затягиваю. И всё. Примерно так: function formLoad() { $(".aj_form").each(function(){ var form = $(this); var url = form.attr('action'); var dt = form.data(); var params = ''; for (var key in dt) { params += params.length ? "&" : "?"; params += key + "=" + dt[key]; } url += params; console.log('url = ' + url); $.ajax({ type: "GET", url: url, success: function(data) { var formdata = $(data).find('.aj_form_content').eq(0).html(); form.html(formdata); } }); }); } function formProcess() { $(".aj_form").on('submit',function(e) { e.preventDefault(); var form = $(this); var url = form.attr('action'); $.ajax({ type: "POST", url: url, data: form.serialize(), success: function(data) { var formdata = $(data).find('.aj_form_content').eq(0).html(); form.html(formdata); } }); }); } Соответственно, на странице, где надо такую форму, просто пустую форму вставляю с нужным action, и все, в document.ready соответственно вызываю formLoad(); formProcess(); И всё работает безупречно.
Читай документацию ©(Pathologic) https://docs.evo.im/04_extras/formlister.html
Alexey
Так, что еще.... я уже засыпаю, не соображаю, что-то пропустить могу. А, ну чанк самой формы form_feedback_tpl там использован <form method="post" action="form_feedback"> <div class="feedback-form-bg"></div> <div class="feedback-form-inner"> <h4 class="feedback-form-header">Напишите нам</h4> <input type="hidden" name="formid" value="form_feedback"> <input type="hidden" name="url" value="[!if? &is=`[+url.value+]:empty` &then=`[~[*id*]~]` &else=`[+url.value+]`!]"> <input type="hidden" name="pagetitle" value="[!if? &is=`[+pagetitle.value+]:empty` &then=`[*pagetitle*]` &else=`[+pagetitle.value+]`!]"> <div class="form-group [+name.errorClass+] [+name.requiredClass+]"> <label class="sr-only" for="name">Имя</label> <input name="name" value="[+name.value+]" type="text" class="form-control" id="name" placeholder="Представьтесь *"> [+name.error+] </div> <div class="form-group [+email.errorClass+] [+email.requiredClass+]"> <label class="sr-only" for="email">E-mail</label> <input name="email" value="[+email.value+]" type="text" class="form-control" id="email" placeholder="E-mail *"> [+email.error+] </div> <div class="form-group [+phone.errorClass+]"> <label class="sr-only" for="phone">Телефон</label> <input name="phone" value="[+phone.value+]" type="text" class="form-control" id="phone" placeholder="Телефон"> [+phone.error+] </div> <div class="form-group [+comment.errorClass+] [+comment.requiredClass+]"> <label class="sr-only" for="comment">Сообщение</label> <textarea name="comment" class="form-control" id="comment" placeholder="Ваше сообщение *">[+comment.value+]</textarea> [+comment.error+] </div> [+form.messages+] <button type="submit" class="btn btn-success">Отправить</button> </div> </form>
🤝🤝🤝
Andrey
По уму в params можно и урл и прочее передавать, но там я не парился. Охулиард вариаций, собственно.
Андрей [aharito]
А js наподобие этого, чтобы не множить одинаковые вызовы. Опять же можно влёгкую добавить ajax.get для каких-то других нужд. И на success вызывать что-тосторонее. https://gist.github.com/0test/d01a621386ca0a581453df702f9c9bb2
@irokez_bm Тут вот вам подсказывают более универсальный вариант, не понадобится несколько кусков кода, если хотите - разберитесь.
Андрей [aharito]
Я чет в последнее время решил возвернуться к обычному js и с удивлением увидел, что jquery по сути уже и не нужен.
Ну да, давно уж движение идет, например FancyBox классный появился без Жиквери.
Andrey
Я в последнее время начал всё "заворачивать" в функцию, совать в неё всякие методы и прочее. Типа как приложение, в таком псеводо-ооп стиле, что ли. Чтобы потом app.start() и всё. Типа http://test.1px.su/math/custom.js
Andrey
Дитёнышу на каникулы задали математику в пределах 20 тренировать. А мне лень. Ну и...)
Андрей [aharito]
буду безмерно благодарен!
Ну и, понятное дело, будут нужны чанки всяких писем там и т.д., они указаны выше Но это уже сами.
Alexey
А я с форлистером и аяксом чуть проще поступил. Сделал отдельную страницу с формлистером. Обычным. оттестировал. А на других страницах, где нужна форма, просто аяксом затягиваю данные с этой страницы, отправляю на нее и снова затягиваю. И всё. Примерно так: function formLoad() { $(".aj_form").each(function(){ var form = $(this); var url = form.attr('action'); var dt = form.data(); var params = ''; for (var key in dt) { params += params.length ? "&" : "?"; params += key + "=" + dt[key]; } url += params; console.log('url = ' + url); $.ajax({ type: "GET", url: url, success: function(data) { var formdata = $(data).find('.aj_form_content').eq(0).html(); form.html(formdata); } }); }); } function formProcess() { $(".aj_form").on('submit',function(e) { e.preventDefault(); var form = $(this); var url = form.attr('action'); $.ajax({ type: "POST", url: url, data: form.serialize(), success: function(data) { var formdata = $(data).find('.aj_form_content').eq(0).html(); form.html(formdata); } }); }); } Соответственно, на странице, где надо такую форму, просто пустую форму вставляю с нужным action, и все, в document.ready соответственно вызываю formLoad(); formProcess(); И всё работает безупречно.
принял к сведению! буду разбираться! благодарю!
Serguei
Да по-любому надо сначала эту форму без аякса отладить, чтобы там все валидации проходили, сообщения на почту прилетали, предупреждения показывались и т.д. А аяксом потом эту форму подхватить и в нужное место сайта впихнуть, уже проще.
Serguei
принял к сведению! буду разбираться! благодарю!
В моем примере - на саму страницу, где форму показывать надо, она встраивается так: <form class="aj_form simple" action="[~1173~]" data-f_product_id="[*id*]" id="feedback_form" > </form> (В данном примере в get-параметры будет передан еще параметр f_product_id, который я разбираю в prepare-сниппете, можно и кучу других параметров инициализирующих накидать). Ну и сама форма выводится в одельном шаблоне, на странице, на которую ссылается action, примерно так: <form class="simple aj_form_content" method="post"> .... </form>
Andrey
Я теперь на страницу форму вообще вывожу только как чанк из &tplForm. Чтобы всякий говноспам не падал, т.к. обработка по сути только аякс. Но иногда валится.
Алексей
а подскажите как в формлистере сделать динамические поля? чето подзабыл) Есть форма, и есть поле, при нажатии "+" добавляется еще такое же поле и так их может быть много! если не ошибаюсь нужно вроде name="field[]" делать, но не совсем уверен
Aliaksandr
Хреначу formLister с api=1 и вообще нет чанка formTpl 😁
Axenia
Pathologic93 (6568.57) увеличил карму webber_12 (5691.23)
Andrey
Хреначу formLister с api=1 и вообще нет чанка formTpl 😁
А данные чё как и визуальное оформление?
Aliaksandr
А данные чё как и визуальное оформление?
Получаешь json с ошибками да раскидываешь в цикле в нужные поля. Нет смысла рендерить и перегружать саму форму, особенно если там меняются состояния в зависимости от значений полей или файлы отправляются - это же все послетает при перегрузке.
Andrey
Ну а выигрыш в чём? Лишние js писать.
Andrey
Ой, туплю. Последнее не прочитал про файлы. Аргумент.
Pathologic
Ну а выигрыш в чём? Лишние js писать.
выигрыш в сложных формах и калькуляторах всяких
Pathologic
а писать там немного
Pathologic
один раз напишешь и все
Aliaksandr
хз, весь мой лишний js выглядит примерно так
Aliaksandr
причем на все формы один обработчик - ловишь а аяксе formid и подтягиваешь нужный конфиг FL с таким же именем, получаешь json с ответом и расставляешь в этой форме ошибки в поля - ну или какой-нибудь попап success вызываешь (селектор нужного попапа вешаешь тоже куда-нибудь в data-ok-popup конкретной формы)
Aliaksandr
так проще жить )))
Pathologic
плейсхолдеры всякие расставлять не нужно
Pathologic
всякие маски не отваливаются
Aliaksandr
да даже стилизованные селекты и чекбоксы после перезагрузки у многих вызывают панику - отвалились, хз че делать))
Pathologic
даже если и понятно, что делать, то будет видно, как они перерисовываются
Pathologic
а так можно даже сообщения об ошибках выводить всплывающими
Pathologic
проще уже быть не может
Aliaksandr
в общем, сидишь пивко пьешь, а формы сами делаются и отправляются )) мечта :-D
Am
Жаль, что не каждый пользователь сознателен и понимает что ошибка есть ошибка и ее нужно хотя бы прочитать. Не все их даже видят хоть каким цветом раскрась. Даже на некоторых проектах есть звуковые сигналы и всплывашки под каждую ошибку и всё равно находятся такие люди, которые не понимают.
Андрей
Кто-нибудь встречал что-то подобное под Эво? https://modx.pro/components/19703
Yevhen
Раньше разграничение прав для менеджеров в админке позволяло отображать в дереве ресурсов только те документы, которые были доступны для конкретного пользователя… теперь после обновления до версии 3.0 оно так не работает и более того, там где ресурсу были назначены права доступа как для менеджера, теперь ресурс не доступен и из фронта… как правильно в версии 3.0 можно организовать подобный функционал?
Андрей [aharito]
Там надо ролями пользоваться, насколько я понимаю. Но ни разу еще не делал этого в 3-шке, конкретный пример не дам.
Yevhen
да.. это так… но очень нужно чтобы разные менеджеры в дереве видели только свои документы, а другие вообще не могли видеть