Как старый сионист фигурные скобки не признаю для одной строки if-else.
А как с ней красиво то работают сейчас? Каждый тут волен использовать свои классы или библиотеки. Такая работа с БД в большинстве примеров на php.net и прочей документации.
Сами подключали? ЯД в этом году интерфейс поменял.
Все подключается, вопрос только сколько времени нужно человеку, который это делает в первый раз.
Сейчас я подключу и за 30 минут это. Но без вот этой инструкции это заняло сильно больше времени.
1. Мне все равно дадут мне денег или нет, просто кошелек был в коде, вот я его и поставил, на то и смайлик в конце стоит. Во всяком случае так было принято писать в 90е, когда я активно работал программистом.
2. Если есть замечания по качеству кода, то их наверно имеет высказывать, а не агрессию. Уточните, пожалуйста, какой именно автолоад имеется в виду?
3. Моя компания в рекламе не нуждается. По всем профильным коммерческим запросам первые страницы в поисковиках. Заказов на месяцы вперед.
На то чтобы разобраться со всем, что описано выше, найти документацию, нагуглить ряд вопросов, интегрировать одно с другим, отладить у меня пара дней ушло. Возможно, я уже не очень хороший PHP-программист, я не претендую ни на что. Но за час 22 человека в избранное статью добавили, значит это все-таки кому-то надо. Если бы на Яндексе была подобная статься, то на прикрутку и отладку у меня ушло бы 1-2 часа времени.
Атрибут data-type= Один из базовых типов: number, integer, negative, ip, login, password, phone, date, datetime, time, ogrn, inn,kpp, bik, bankaccount.
Для базовых типов уже заданы data-regexp, data-regexp-err-msg, data-enable-chars. Но вы можете переопредлить эти значения.
По ходу дела буду пополнять список. Сейчас значения определены в реализации itform.class.js так: t['number'] = {regexp:"/^[0-9]*?\.?[0-9]+$/", errmsg:"Значение должно соответствовать формату числа с плавующей точкой.", enablechars: "/^[0-9+\-\.]$/"};
t['login'] = {regexp:"/^[a-z@\.-0-9]+$/i", errmsg:"Логин должен состоять из латинских букв, цифр, дефиса, точки, собачки. Другие символы использовать нельзя.", enablechars: "/^[a-zA-Z0-9\-_\.@]$/"};
t['password'] = {regexp:"/^\S+$/", errmsg:"Пароль не должен содержать пробелов и табуляций", enablechars: "/^\S$/"};
t['phone'] = {regexp:"/^[+()0-9 ,\-добext\.]+$/iu", errmsg:"Телефон нужно указывать в формате +7 (495) 988-3040.", enablechars: "/^[+()0-9 ,\-добext\.]$/iu"};
t['date'] = {regexp:"/^[12][7-90-3]\d\d-(?:0\d|1[0-2])-(?:[0-2]\d|3[01])$/", errmsg:"Дата должна быть в формате гггг-мм-дд", enablechars: "/^[0-9\-]$/"};
t['datetime'] = {regexp:"/^[12][7-90-3]\d\d-(?:0\d|1[0-2])-(?:[0-2]\d|3[01]) (?:[01]\d|2[0-3]):[0-5][0-9]:[0-5][0-9]$/", errmsg:"Дата должна быть в формате гггг-мм-дд чч:мм:сс", enablechars: "/^[ 0-9\-:]$/"};
t['time'] = {regexp:"/^(?:[01]\d|2[0-3]):[0-5][0-9]:[0-5][0-9]$/", errmsg:"Время должно быть в формате чч:мм:сс", enablechars: "/^[0-9:]$/"};
t['integer'] = {regexp:"/^-?\d+$/", errmsg:"Целое число может состоять из знака минус и цифр.", enablechars: "/^[0-9\-]$/"};
t['unsigned'] = {regexp:"/^\d+$/", errmsg:"Целое неотрицательное число может состоять только из цифр.", enablechars: "/^[0-9]$/"};
t['bankaccount'] = {regexp:"/^\d{20}$/", errmsg:"Двадцать цифр должно быть без каких-либо разделителей.", enablechars: "/^[0-9]$/"};
t['negative'] = {regexp:"/^-\d+$/", errmsg:"Целое отрицательное число должно состоять из знака минус и цифр.", enablechars: "/^[0-9\-]$/"};
t['ip'] = {regexp:"/^[0-9%\.]+$/", errmsg:"IP должен иметь формат 192.168.1.%", enablechars: "/^[0-9%\.]$/"};
t['inn'] = {regexp:"/^\d{10}(\d\d){0,1}$/", errmsg:"ИНН организации должно состоять из 10 цифр, индивидуального предпринимателя -- из 12 цифр.", enablechars: "/^\d$/"};
t['kpp'] = {regexp:"/^\d{9}$/", errmsg:"КПП должно быть из 9 цифр.", enablechars: "/^\d$/"};
t['ogrn'] = {regexp:"/^\d{13}(\d\d){0,1}$/", errmsg:"ОГРН - 13 цифр должен сожержать, ОГРН ИП -- 15.", enablechars: "/^\d$/"};
t['bik'] = {regexp:"/^\d{9}$/", errmsg:"БИК должен содержать 9 цифр.", enablechars: "/^\d$/"};
Тут еще и проблема в том, что нам нужно все эти процессы контролировать изнутри процесса. Когда у нас есть исходный код itforms.class.js, то мы легко может его дополнить в любом месте и сделать то, что нам нужно. А когда часть кода или алгоритма закрыты, то у нас сужаются возможности для маневра.
Желание хорошее, но сходу решения не вижу простого.
Дело в том, что есть общий алгоритм работы. И как его изменить в этом конкретном случае непонятно. И библиотеку ITForms на все частные случаи тоже не дело расширять, т.к. у ней уже 20Кб кода.
Единственный вариант прямой с точки зрения кода и всей архитектуры, это не задавать параметр data-regexp для поля ИНН.
А определить свою функцию data-user-func и вот в ней уже написать свою проверку по указанному выше алгоритму.
1. Всем еще раз большое спасибо за замечания, многие я уже реализовал. На очереди введение базовых типов.
2. Большая просьба посмотреть исходный код itforms.class.js Есть там некоторые косяки с именованием переменных и методов, где-то стиль общий нарушен, где-то я не подобрал хорошего имени. По стилю расстановок скобок, табуляций вместо пробелов и т.п. спорить не буду, о вкусах смысла спорить нет, а вот если будут замечания по делу, буду рад. Вполне могут обнаружиться ляпы, баги.
В планах есть добавление языков. Но сначала хочется алгоритм отладить, чтобы код не загромождать.
В русском пишутся, а вот в программах, базах данных используется точка.
Считаю это уже не имеющим никакого смысла. Скорее надо изменять правила русского языка для избежания путаницы.
Значения атрибутов могут читать и использовать не только методы ITForms, но и вполне сторонние разработчики.
И подавляющее большинство при написании кода на JS использует. а не, для чисел.
Желание законное, но сделать такую работу мне не под силу.
Браузеров вагон и маленькая тележка с учетом их версий, постоянно новые выходят. Постоянно в них что-то новое.
Автоматически понять что и как именно поддерживает браузер не очень понятно как. Один и тот же параметр два браузера могут реализовывать несколько по-разному.
Так что по-моему это очень трудоемкая работа. И если посмотреть на все инструменты валидации HTML-форм, то такого ни у кого нет.
Не zForms тормозит, а сама проверка AJAX'ом. Человек пишет со скорость 10 символов в секунду скажем, а проверка КАПТЧИ требует 0.5 секунды, например. Вот и получается, что нельзя КАПТЧУ проверять по onKeyup
Беглый анализ показывает, что синтаксис там zForms, т.е. по факту нам навязывают лишнии теги dt dl
Как я уже писал выше, построение в сетку таблицы элементов задача там не тривиальная. Если надо ширину задавать в процентах и форма должна масштабироваться вместе с окном браузера.
Отдельные элементы dl просто разлетаются, как показал опыт. А обертывание в таблицу получается громоздким.
— нечитабельно и непонятно
/> — это ужас. Нечитаемо.
Дальше круче, но смысла не вижу.
Хотя опять, есть люди наверно, которым такой синаксис больше по душе. В свое время в 90х были люди отрицающие ООП, были даже те, кто язык Си отрицал, мотивируя, что все на АСМе надо писать или в машинных кодах.
Зачем? Чтобы утонуть в версиях браузеров и их совместимостями со стандартами?
Проблемы не понимаю. Тут дело выбора уже и кому что больше нравится. Кто-то выберет HTML5, кто-то jQuery Validate или еще что-то, а кто-то выберет возможно ITForms, например, потому что проект живой, можно обсуждать и попросить что-то улучшить на русском языке, что немаловажно.
Все правильно. Проекты разные, границы применимости того или иного решения всегда существуют.
У меня нацеленность на клепание типовых сайтов и даже нетиповых, но одной организацией.
Мне как раз важно, чтобы все сайты производимые нашей компанией использовали одну библиотеку. Чтобы экономить время и трудоемкость, и не разбираться каждый раз в разных решениях или кодах самописных.
Как старый сионист фигурные скобки не признаю для одной строки if-else.
А как с ней красиво то работают сейчас? Каждый тут волен использовать свои классы или библиотеки. Такая работа с БД в большинстве примеров на php.net и прочей документации.
Тут кода то почти нет.
Все подключается, вопрос только сколько времени нужно человеку, который это делает в первый раз.
Сейчас я подключу и за 30 минут это. Но без вот этой инструкции это заняло сильно больше времени.
if(sha1($str)!=$_POST['sha1_hash'])
return mail('igor@itsoft.ru', 'Fake notification', $message);
И был запрос к Яндексу. Для того, чтобы эти проверки обойти нужно:
1. знать секретный код
2. каким-то образом вставить данные в БД Яндекса
Все эти значения числовые. Вряд ли Яндекс в них пришлет кавычку.
Но для полной уверенности можно их конечно и профильтровать. Хотя у нас на сервере стоит автоматическая фильтрация переменных.
1. Мне все равно дадут мне денег или нет, просто кошелек был в коде, вот я его и поставил, на то и смайлик в конце стоит. Во всяком случае так было принято писать в 90е, когда я активно работал программистом.
2. Если есть замечания по качеству кода, то их наверно имеет высказывать, а не агрессию. Уточните, пожалуйста, какой именно автолоад имеется в виду?
3. Моя компания в рекламе не нуждается. По всем профильным коммерческим запросам первые страницы в поисковиках. Заказов на месяцы вперед.
На то чтобы разобраться со всем, что описано выше, найти документацию, нагуглить ряд вопросов, интегрировать одно с другим, отладить у меня пара дней ушло. Возможно, я уже не очень хороший PHP-программист, я не претендую ни на что. Но за час 22 человека в избранное статью добавили, значит это все-таки кому-то надо. Если бы на Яндексе была подобная статься, то на прикрутку и отладку у меня ушло бы 1-2 часа времени.
На конференции isdef.org был доклад по данной теме. То с чем IT-шники сталкиваются просто ужас, проще свалить наверно, чем работать тут на экспорт.
Государство должно поощрять экспорт IT-услуг. Не вечно же нефть экспортировать.
Атрибут data-type= Один из базовых типов: number, integer, negative, ip, login, password, phone, date, datetime, time, ogrn, inn,kpp, bik, bankaccount.
Для базовых типов уже заданы data-regexp, data-regexp-err-msg, data-enable-chars. Но вы можете переопредлить эти значения.
По ходу дела буду пополнять список. Сейчас значения определены в реализации itform.class.js так:
t['number'] = {regexp:"/^[0-9]*?\.?[0-9]+$/", errmsg:"Значение должно соответствовать формату числа с плавующей точкой.", enablechars: "/^[0-9+\-\.]$/"};t['login'] = {regexp:"/^[a-z@\.-0-9]+$/i", errmsg:"Логин должен состоять из латинских букв, цифр, дефиса, точки, собачки. Другие символы использовать нельзя.", enablechars: "/^[a-zA-Z0-9\-_\.@]$/"};
t['password'] = {regexp:"/^\S+$/", errmsg:"Пароль не должен содержать пробелов и табуляций", enablechars: "/^\S$/"};
t['phone'] = {regexp:"/^[+()0-9 ,\-добext\.]+$/iu", errmsg:"Телефон нужно указывать в формате +7 (495) 988-3040.", enablechars: "/^[+()0-9 ,\-добext\.]$/iu"};
t['date'] = {regexp:"/^[12][7-90-3]\d\d-(?:0\d|1[0-2])-(?:[0-2]\d|3[01])$/", errmsg:"Дата должна быть в формате гггг-мм-дд", enablechars: "/^[0-9\-]$/"};
t['datetime'] = {regexp:"/^[12][7-90-3]\d\d-(?:0\d|1[0-2])-(?:[0-2]\d|3[01]) (?:[01]\d|2[0-3]):[0-5][0-9]:[0-5][0-9]$/", errmsg:"Дата должна быть в формате гггг-мм-дд чч:мм:сс", enablechars: "/^[ 0-9\-:]$/"};
t['time'] = {regexp:"/^(?:[01]\d|2[0-3]):[0-5][0-9]:[0-5][0-9]$/", errmsg:"Время должно быть в формате чч:мм:сс", enablechars: "/^[0-9:]$/"};
t['integer'] = {regexp:"/^-?\d+$/", errmsg:"Целое число может состоять из знака минус и цифр.", enablechars: "/^[0-9\-]$/"};
t['unsigned'] = {regexp:"/^\d+$/", errmsg:"Целое неотрицательное число может состоять только из цифр.", enablechars: "/^[0-9]$/"};
t['bankaccount'] = {regexp:"/^\d{20}$/", errmsg:"Двадцать цифр должно быть без каких-либо разделителей.", enablechars: "/^[0-9]$/"};
t['negative'] = {regexp:"/^-\d+$/", errmsg:"Целое отрицательное число должно состоять из знака минус и цифр.", enablechars: "/^[0-9\-]$/"};
t['ip'] = {regexp:"/^[0-9%\.]+$/", errmsg:"IP должен иметь формат 192.168.1.%", enablechars: "/^[0-9%\.]$/"};
t['inn'] = {regexp:"/^\d{10}(\d\d){0,1}$/", errmsg:"ИНН организации должно состоять из 10 цифр, индивидуального предпринимателя -- из 12 цифр.", enablechars: "/^\d$/"};
t['kpp'] = {regexp:"/^\d{9}$/", errmsg:"КПП должно быть из 9 цифр.", enablechars: "/^\d$/"};
t['ogrn'] = {regexp:"/^\d{13}(\d\d){0,1}$/", errmsg:"ОГРН - 13 цифр должен сожержать, ОГРН ИП -- 15.", enablechars: "/^\d$/"};
t['bik'] = {regexp:"/^\d{9}$/", errmsg:"БИК должен содержать 9 цифр.", enablechars: "/^\d$/"};
Тут еще и проблема в том, что нам нужно все эти процессы контролировать изнутри процесса. Когда у нас есть исходный код itforms.class.js, то мы легко может его дополнить в любом месте и сделать то, что нам нужно. А когда часть кода или алгоритма закрыты, то у нас сужаются возможности для маневра.
Дело в том, что есть общий алгоритм работы. И как его изменить в этом конкретном случае непонятно. И библиотеку ITForms на все частные случаи тоже не дело расширять, т.к. у ней уже 20Кб кода.
Единственный вариант прямой с точки зрения кода и всей архитектуры, это не задавать параметр data-regexp для поля ИНН.
А определить свою функцию data-user-func и вот в ней уже написать свою проверку по указанному выше алгоритму.
1. Всем еще раз большое спасибо за замечания, многие я уже реализовал. На очереди введение базовых типов.
2. Большая просьба посмотреть исходный код itforms.class.js Есть там некоторые косяки с именованием переменных и методов, где-то стиль общий нарушен, где-то я не подобрал хорошего имени. По стилю расстановок скобок, табуляций вместо пробелов и т.п. спорить не буду, о вкусах смысла спорить нет, а вот если будут замечания по делу, буду рад. Вполне могут обнаружиться ляпы, баги.
В планах есть добавление языков. Но сначала хочется алгоритм отладить, чтобы код не загромождать.
Считаю это уже не имеющим никакого смысла. Скорее надо изменять правила русского языка для избежания путаницы.
Значения атрибутов могут читать и использовать не только методы ITForms, но и вполне сторонние разработчики.
И подавляющее большинство при написании кода на JS использует. а не, для чисел.
Браузеров вагон и маленькая тележка с учетом их версий, постоянно новые выходят. Постоянно в них что-то новое.
Автоматически понять что и как именно поддерживает браузер не очень понятно как. Один и тот же параметр два браузера могут реализовывать несколько по-разному.
Так что по-моему это очень трудоемкая работа. И если посмотреть на все инструменты валидации HTML-форм, то такого ни у кого нет.
А по-другому zForms не умеет.
input value="" class=«jz jz-number» id=«input-number» name=«number» onclick=«return {jz:{placeholder:'number',focusOnInit:true,allowNegative:true,allowFloat:true,required:{fn:function(widget) { return widget.getValue() > 10 }}}}»
Код не вставился. Это то что не читаемо.
Как я уже писал выше, построение в сетку таблицы элементов задача там не тривиальная. Если надо ширину задавать в процентах и форма должна масштабироваться вместе с окном браузера.
Отдельные элементы dl просто разлетаются, как показал опыт. А обертывание в таблицу получается громоздким.
— нечитабельно и непонятно
/> — это ужас. Нечитаемо.
Дальше круче, но смысла не вижу.
Хотя опять, есть люди наверно, которым такой синаксис больше по душе. В свое время в 90х были люди отрицающие ООП, были даже те, кто язык Си отрицал, мотивируя, что все на АСМе надо писать или в машинных кодах.
Попробуйте там выстроить ровно в сетку произвольные элементы с произвольными данными. Там жесткая структура dd dt dl очень все портила.
Там с комбооксом баг даже когда он при раскрытии налетает на нижний элемент.
КАПТЧУ там нереально проверять, т.к. все проверки идут по onKeyup. AJAX тормозит, в результате буквы не вводятся.
Мы год пользовались zForms пока не пришли к мнению, что от него необходимо отказаться из-за ряда нерешаемых проблем.
Проблемы не понимаю. Тут дело выбора уже и кому что больше нравится. Кто-то выберет HTML5, кто-то jQuery Validate или еще что-то, а кто-то выберет возможно ITForms, например, потому что проект живой, можно обсуждать и попросить что-то улучшить на русском языке, что немаловажно.
У меня нацеленность на клепание типовых сайтов и даже нетиповых, но одной организацией.
Мне как раз важно, чтобы все сайты производимые нашей компанией использовали одну библиотеку. Чтобы экономить время и трудоемкость, и не разбираться каждый раз в разных решениях или кодах самописных.