Николай

Николай

С нами с 09 ноября 2013; Место в рейтинге пользователей: #57
Николай
11 февраля 2019, 16:04
4
+1
Выложу свой способ управления множеством форм для сниппета ajaxForm, может пригодится.

Создаём чанк ajaxForms:

{if !$form} {set $form = ''}{/if}
{if !$hooks} {set $hooks = 'email,FormItSaveForm'}{/if}
{if !$emailSubject} {set $emailSubject = 'Тема письма'}{/if}
{if !$emailTo} {set $emailTo = $_modx->config['callback_email']}{/if}
{if !$validationErrorMessage} {set $validationErrorMessage = 'В форме содержатся ошибки!'}{/if}
{if !$successMessage} {set $successMessage = '<div class="name">Спасибо</div><p>Ваше сообщение успешно отправлено</p>'}{/if}
{if !$vTextMaxLength} {set $vTextMaxLength = '<div>Проверьте правильность заполнения</div>'}{/if}
{if !$vTextMinLength} {set $vTextMinLength = '<div>Проверьте правильность заполнения</div>'}{/if}
{if !$vTextRequired} {set $vTextRequired = 'Это поле обязательно для заполнения'}{/if}
{if !$validate} {set $validate = 'name:required'}{/if}
{if !$formFields} {set $formFields = 'name,pageId,pagetitle,email,message,file'}{/if}
{if !$formName} {set $formName = 'Имя формы'}{/if}
{if !$validationErrorMessage} {set $validationErrorMessage = 'В форме содержатся ошибки!'}{/if}

[[!ajaxForm?
	&form=`{$form}`
	&hooks=`{$hooks}`
	&emailSubject=`{$emailSubject}`
	&emailTo=`{$emailTo}`
	&validationErrorMessage=`{$validationErrorMessage}`
	&successMessage=`{$successMessage}`
	&vTextMaxLength=`{$vTextMaxLength}`
	&vTextMinLength=`{$vTextMinLength}`
	&vTextRequired=`{$vTextRequired}`
	&validate=`{$validate}`
	&validationErrorMessage=`{$validationErrorMessage}`
	&formName=`{$formName}`
	&formFields=`{$formFields}`
	&fieldNames=`{$fieldNames}
    `
]]

Это единый чанк, в котором вызывается сниппет ajaxForm с необходимыми параметрами.

В моём случае каждая отдельная форма — это отдельный чанк. Если эти чанки мало чем различаются, то можно использовать extends из fenom, переписывая лишь изменяющиеся значения, а остальное не трогать.

И далее в шаблоне страницы вызов нужной формы:

{include 'ajaxForms' 
    form='callback'
    emailSubject='Обратный звонок'
    validate='name:required,phone:required'
    formFields='name,phone,pagetitle'
    formName='Обратный звонок'
}

В нём мы подменили значения, передающиеся в чанк ajaxForm.

Пример чанка callback с формой:

<div style="display: none;" id="{block 'id'}callback{/block}" class="popup">
    <div class="title">{block 'title'}Заказать обратный звонок{/block}</div>
    <div class="desc">{block 'desc'}Оставьте заявку, и мы свяжемся с вами в самое ближайшее время{/block}</div>
    <form role="form" method="POST" action="[[~[[*id]]]]" enctype="multipart/form-data">
        <input type="hidden" name="pagetitle" value="[[*pagetitle]] ([[*id]])">
            
        <input type="text" name="name" value="[[!+fi.name]]" placeholder="Ваше имя" required="required" />
        <span class="error error_name">[[+fi.error.name]]</span>
        
        <input type="tel" name="phone" value="[[!+fi.phone]]" placeholder="Ваш телефон" required="required" />
        <span class="error error_phone">[[+fi.error.phone]]</span>
        
        <div class="privacy">Отправляя заявку, Вы соглашаетесь на обработку персональных данных
согласно <a href="{29|url}">Пользовательскому соглашению</a></div>
        
        <button class="button-yellow" type="submit" value="{md5(rand())}" name="submit">Отправить</button>
    </form>
</div>

Если нужно вызвать похожую форму но с другим заголовком и другими параметрами, то создадим чанк question, который наследует чанк callback:

{extends 'callback'}

{block 'id'}question{/block}
{block 'title'}Задать вопрос{/block}
{block 'desc'}Задайте свой вопрос, и мы с вами свяжемся{/block}

И вызов этой формы в шаблоне страницы:

{include 'ajaxForms' 
    form='question'
    emailSubject='Задать вопрос'
    validate='name:required,phone:required'
    formFields='name,phone,pagetitle'
    formName='Задать вопрос'
}

Таким образом, для всех форм мы можем задать единые параметры вызова сниппета ajaxForm, и при необходимости перезаписать их. А также под каждую форму либо создать отдельные чанки, либо унаследовать от одного чанка кучу других с индивидуальными параметрами.

Дополнительно я скрываю уведомления jgrowl js-скриптом:

$(document).on('af_complete', function(event, response) {
    if (response.success) {
        $.fancybox.close();

        $.fancybox.open({
        	src  : '#popup-success',
        	type : 'inline',
        	opts : {
        		afterShow : function( instance, current ) {
        			// console.info( 'done!' );
        		}
        	}
        });
    } else {
        for (var prop in response.data) {}
    }
    response.message='';
});

Все уведомления об ошибках показываются под полями форм, в коде span c классом error. А если форма успешно отправлена, то с помощью скрипта выше мы скрываем popup-форму, если она была открыта, и показываем другое popup-окно:

<div style="display: none;" id="popup-success" class="popup">
    <div class="title">Данные успешно отправлены</div>
    <div class="success">
        <img src="/assets/img/success.png" alt="">
    </div>
</div>

Оно же всплывает и при отправке обычных не popup-форм. Да, насчёт popup-окон, актуально при использовании flexbox3.
Николай
03 февраля 2019, 12:56
0
Но написать кабинет пользователя, корзину, знаю как и мне проще это сделать с нуля в Django, чем тоже самое сделать в модкс, только если не покупать готовое решение.
Вот в этом я и вижу проблему, потому как платить за велосипеды мало желающих найдётся. Их ещё поддерживать и развивать нужно, тестировать, исправлять баги. В мире PHP с этим вообще никаких проблем, есть всё. А Python такое ощущение, что намеренно пиарят, чтобы куча народа впряглось в развитие языка и его инфраструктуры, хотя по факту он уступает PHP практически во всём. Я имею ввиду веб-разработку. От вас преимуществ я тоже не услышал. Как вы и сказали, скорее

дело привычки.
Николай
03 февраля 2019, 02:45
0
А вот, к примеру, запилить интернет-магазин, блог и всё такое прочее, что можно без труда сделать на MODX, на Django можно сделать также легко и быстро? А то при поиске «django интернет-магазин» ничего толкового не выскочило. Такое ощущение, что там надо всё с нуля разрабатывать. И выходит гонка за новым превращается скорее в перфекционизм, желание развиваться ради развития, нежели в этом есть какой-то ощутимый практический толк здесь и сейчас. Много я по python и django мнений перечитал и пересмотрел. Для вебразработки особых преимуществ не выделил. Big data, нейросети это такие области, где надо не с MODX начинать было, а с олимпиад по математике в школе, чтобы там преуспеть и зарабатывать) А вот в плане заработка в вебе python и django не вижу чем лучше. На php 90% сайтов работает и нужны какие-то веские аргументы, чтобы ситуация существенно изменилась. Пока же ажиотаж вокруг python больше похоже на пиар, когда реального спроса нет, но ощущение складывается что python на вершине популярности и везде нужен.
Николай
03 февраля 2019, 02:21
+1
Я ниже высказывал мнение, что MODX полон всяких нюансов, а точнее, непроработанных исключительных ситуаций. Но, они практически всегда разрешимы, и можно довольно успешно делать несложные сайты если ходить проверенными тропами. А «если глюк оказался вдруг, и не глюк и не баг, а — так», — то надо просто запомнить, что делать так нельзя, и делать так как можно. Со временем разработка становится более предсказуема и достаточно проста. А если забывать вводить имя БД при установке, то тут в MODX походу вообще никакой защиты от дурака и шишек много придётся набить с такой аккуратностью…

Ладно, для меня тема модх закрыта, спасибо ему за 10 лет вместе и ну его в болото,
Пора изучать laravel, пока поезд не ушел. Всем привет.
Ну так оно и понятно, время идёт всё меняется. Было бы интересно почитать ваш отзыв о laravel спустя ещё 10 лет) Ведь когда-то и MODX казался очень перспективной системой и не напрягали баги и неудобства, которых, мне кажется, тогда было намного больше чем сейчас. Я так понял, что негатив в сторону MODX обусловлен скорее не неразрешимыми проблемами движка, а это некая попытка порвать с прошлым перед резким стартом в будущее)
Николай
03 февраля 2019, 01:16
0
студия под ключ нашпиговала бы сайт костылями, знаем, проходили.
Разработчиков, как и студии, нужно уметь выбирать и работать с ними. Ну это примерно тоже самое, что выбрать юриста, врача, строительную компанию. Если нарвался на некачественные услуги, то это не значит, что на рынке их нет.
Николай
03 февраля 2019, 01:00
+1
В контекстах как раз не разбираются разработчики компонентов, точнее они вообще никак их не учитывали в 2014 и каждому надо было напоминать, что есть еще и такое.
В 2014 только modstore появился, судя по дате регистрации домена в декабре 2014-го. Я про MODX Revo узнал только в конце 2012. Тогда это была довольно сырая система (по сравнению с тем, что сейчас) и Василий Наумкин выпускал свои первые заметки по движку, попутно его изучая. О каком качестве компонентов можно было говорить в 2014-ом непонятно. В то время они вообще практически все бесплатные были до появления modstore. А сообщество состояло в основном из любителей, которые php то толком не знали.
Николай
03 февраля 2019, 00:48
0
Задавал вопрос с целью прояснить ситуацию, вот и все
А что можно сделать в вашей ситуации, кроме как не лезть в админку и не ковыряться в ней? Если с 2015 года компоненты не обновлялись, то скорее всего там тихий ужас) А если вы не знаете как правильно обновиться, какие варианты есть, где хранятся данные в базе, то выходит, что этим нужно заняться разработчику за свой счёт. Представьте если компонент скачает, скажем, человек 200, и они при любых проблемах будут бежать к разработчику. Очень весело ему будет)

нет, связавшись с питон и джанго 4 года назад я и не предполагал, что все окажется настолько сложно
Можно тогда совет от вас, посоветовали бы вы начать изучение пайтона и джанги для вебразработки? Есть какой-то профит, может в перспективе?
Николай
03 февраля 2019, 00:01
0
Из вашего сообщения и приведённой темы понятно, что с MODX вы поверхностно знакомы, и хотели устранить пробелы в знаниях за счёт техподдержки.

Только не пойму почему Django? Это же python, вообще другая степь, неужели освоили данный язык и фреймворк? Или там всё хорошо понятно?
Николай
02 февраля 2019, 23:45
+2
В результате после покупки компонента, он почти всегда обращался в тех поддержку, потому-что компонент не работал как надо! Причем всегда это надо автору доказать, разжевать все, положить в рот и только потом он исправит.
А что вы хотели, это вам не битрикс, тут коммерческий интерес слабый. Каждым из компонентов занимается не толпа разработчиков на зарплате, а в большинстве случаев один человек. Предполагаю, что одни только продажи едва окупают время затраченное на разработку компонента. А техподдержка это уже скорее благородный жест, и там с каждым потраченным часом уходишь в минус. В сообществе в основном не потребители готовых продуктов, которым всё под ключ подавай в лучшем виде, а «очумелые ручки», которым решать проблемы самостоятельно привычное дело.

Меня в принципе поражает не то, что ошибки столько времени висят, а то, как разработчики магазинов сдают сайты клиентам, видимо без проверки всего и вся, или что разработчиков или магазинов настолько мало, что с контекстами работают 2-3 человека.
Отсюда вывод: MODX хорош для ниши недорогих сайтов, когда нужно быстро интегрировать готовую вёрстку и запустить относительно небольшой проект руками одного недорогого разработчика. Чтобы оттестировать всё что можно и нельзя на сайте, над ним должна работать целая команда профессионалов, включая тестировщиков. Это всё упирается в хороший бюджет. Предположу, что у вас и вашего клиента запросы не соответствуют возможностям. Иначе бы сайт не пуляли от одного начинающего разработчика, который не разбирается в контекстах, к другому, а заказали бы в какой-нибудь студии под ключ. За сумму с 5-6 нулями)
Николай
28 января 2019, 16:01
+1
Я могу отчасти согласиться с тем, что в MODX куча нюансов, которые чтобы все узнать, нужно набить много шишек. Тоже касается и компонентов. Но это наверное последствия гибкости. С одной стороны система для разработчиков, CMF. А с другой, это не фреймворк, который предъявляет высокие требования к программистам. Если человек не особо профессионал, то по началу столкнётся со множеством трудностей. Море компонентов, у каждого свои особенности, всё это накладывается на особенности самого движка.
Николай
06 января 2019, 15:18
+1
Хороший способ, спасибо. Сам замучился клиентам объяснять по нескольку раз, каждому, чтобы они кеш обновили.
Николай
05 января 2019, 22:22
0
Вот тут по этой теме, если не видели — E-commerce проекты 15000+ товаров в полной интеграции с 1С.
Может какие идеи найдёте для себя.
Николай
29 декабря 2018, 10:41
0
А бы ведь какой-то сайт англоязычный, во весь монитор открывался, там как раз что-то типа новостей про MODX. Не помню только адрес… Как раз что-то похожее, и новости можно оттуда брать.
Николай
13 декабря 2018, 19:43
0
Выкладывают, но это же конечном счёте 100%-ый коммерческий интерес) Они просто повышают свою популярность, цитируемость, узнаваемость, и в конечном счёте растёт траст в поисковиках. Как там, персональных бренд это вроде называется. А уже потом заработав пузомерки, монетизируют их. Так сказать игра в долгую. А те кто пытаются денюжку сразу заработать, у тех просто более мелкий бизнес.

stackoverflow.com/, github.com/
Пожалуйста, копируйте.
Ну так они уже бренд) Мой копипаст не подвинет их первоисточник в поиске. И к тому же зарабатывают они не на информации, а на сервисе. Я то пытаюсь доказать, что мелким «лавочникам» в массе своей это невыгодно. Тем более, чтобы кто-то копировал их статьи по-тихому, без обратных ссылок. Если со ссылками, то совсем другой расклад. Наоборот писательство может стать возможностью прославиться.

Это вряд ли. Рамблер тоже о таком местал, но у него не получилось. Хотя мордокнига тоже пытается к этому прийти.
Вы наверное не в курсе, что есть такие дорвейщики с которыми яндекс со времён своего существования борется) Это такие люди, которые ничего нового не несут в интернет, а тупо генерируют террабайты инфо-мусора, в том числе копипаста. За счёт которого нагоняют трафик, а потом монетизируют его разными способами. Если бы яндекс с ними не боролся, то количество информации в сети было бы существенно больше чем сейчас. Один дорвейщик это как вирус, который может производить сотни сайтов если это выгодно. А яндекс сделал так что это не выгодно, сделав кучу фильтров, в том числе и на копипаст.
Николай
13 декабря 2018, 18:58
0
Как пример. Если мою крутую статью расхватают все кому не лень, включая известные сайты, то это равносильно как если бы мою какую-то крутую разработку украли, присвоили авторство себе, а меня бы даже никто и не вспомнил.

А вообще эпопея с уникальным контентом длится со времен появления яндекса. У любого сеошника спросить, и я думаю они подтвердят, что уник по любому нужен и лучше неуника. Сколько фильтров всяких уже было, когда тысячи сайтов яндекс выкашивал за копипаст и бесполезность для юзеров. Обычно жалобные истории начинаются со слов, дескать, у меня был хороший сайт с полностью уникальными статьями, и… его забанили. Я не спорю, что копипасты полно в интернете, но если сайт успел завоевать популярность, его не забанят. В остальных случаях «молодняк» проходит кучу проверок, в том числе и на уникальность. Если робот сайта при обходе выясняет, что сайт на 100% состоит из копипасты, то зачем он вообще?
Николай
13 декабря 2018, 18:27
0
У википедии и ей подобных сайтов «траст» перекрывает другие сайты, которые её копируют) Бороться то с другими сайтами никто не борется в плане копипаста, просто в выдаче они будут за пределами топа. Ну то есть алгоритм поиска один для всех. И допустим по какому-то запросу нашлось множество ресурсов, которые с точки зрения релевантности практически одинаковы. Предпочтение получит наиболее авторитетный источник. И даже если википедия «сворует» мою статью с моего же сайта, то она будет по-любому выше. А вообще я согласен, информация обесценивается с каждым разом. Держать какие-то статейные сайты со своими умными мыслями не особо выгодно. Но давать возможность легко копировать эти мысли всем кому непопадя, без обратных ссылок, это вообще чистый альтруизм выходит) Если статья уникальная, она хоть как-то всплывёт по ключам. А если в сети множество копий этой статьи, то шансы мизерные. Ну при условии, что ресурс не особо популярный. Если хабрахабр, то с него не убудет) Просто представьте, что будет какой-либо портал, который как спрут будет качать инфу с кучи сайтов и собирать её в одном месте. Он станет монополистом. А для поисковиков, кстати, уникальность всё-такие играет роль. Если сайт постоянно радует их новыми текстами, да ещё показывает хорошие поведенческие показатели, то его авторитет будет расти. Сайт основанный на копипасте тоже может вырасти, но больше за счёт поведенческих.
Николай
13 декабря 2018, 09:09
0
Тогда надо признать, что это довольно перспективное направление развития) Правда для блогов не думаю, что это сильно актуально. Мало кто захочет иметь дубли своего контента на других сайтах. Всё-таки информация это можно сказать «актив» для информационного сайта, благодаря которому он зарабатывает и как-то развивается. Авторитет ресурса привязан к одному домену. Да и поисковики не любят дубли. Разве что всякие мобильные приложения могут использовать API… Ну или в случае когда информация продаётся, как, например, база TecDoc для автозапчастей. Но бОльшая актуальность мне кажется для чисто коммерческих ресурсов. Допустим, какой-то поставщик даёт возможность торговать своими товарами с подключением к своему API. Или речь идёт о сетевых структурах, чтобы единая база была. В более частных случаях, наверное, ещё долго люди не поймут необходимости зачем им переходить с любимых CMS к каким-то сервисам. Если только сами сервисы не придут к ним, и не объяснят все выгоды)
Николай
12 декабря 2018, 11:00
+1
Да и собственно «проблема» большинства CMS заключается в том, что БД жёстко привязана к интерфейсу, или каким-то другим ограничением системы, там множество зависимостей. Т.е. я не могу без костылей наладить связь между сайтом на MODX, и, например, Wordpress, т.к. в каждой системе свои нюансы. Придётся изобретать универсальный костыль подходящий как для MODX, так и для Wordpress. Причём каждой системе по костылю как минимум. Грубо говоря, получится что MODX связывается через костыль с костылём от Wordpress. А уже для Битрикса эти костыли не прокатят. Нужно городить 3-ий костыль как минимум. А если делаем облачную CMS, то тупо все данные получаем через одно API. А как получить неважно, может php-страничка запрос сделать, а может js-скрипт через ajax. Т.е. я могу тупо сделать простенькую страничку у себя на сайте, скажем, для вывода только лишь статей из определённого раздела, допустим, modx.pro. Подключился по API, несколько запросов, и готово. Безо всякой CMS. Верно?