Подскажите пожалуйста как можно ограничить ввод в текстовое поле только цифр и знаков двоеточия, при том только в таком вот формате: 00:00:00:000 что означает часы:минуты:секунды:микросекунды. Смог только ограничить длину до 12 символов, как сделать так чтобы ограничить ввод не правильных данных еще сразу при заполнении или хотя бы на стороне сервера.
Пока я пользователям только написал о том как желательно заполнять это поле. Думаю может как то регулярку какю то написать
Там есть возможность указать допустимые значения, но их как становится понятно из контекста очень и очень много. Есть вариант использовать php НО! там написано вот это: Только для специалистов: PHP-код, возвращающий массив допустимых значений. Не должен содержать разделители <?php ?>. Если в это поле введён код, то возвращаемый им массив заменит вышеуказанный список допустимых значений.
Массив допустимых значений которым заменится список выше как тут сказано тоже будет огромным и думаю работа по проверке вводимых данных и по загрузке страницы пользователю будут долгими.
Прошу помочь решить эту проблему оптимально. Не хочется для часов минут и секунд и микросекунд создавать отдельные поля для заполнения.
Что посоветуете?
С уважением.
Комментарии
Я так подозреваю, почитав внимательно документацию (насколько меня хватает чтобы осознать) мне нужно написать свой модуль который создаст новый фильтр который как рас будет проверять чтобы вводимые данные соответствовали моим требованиям (строка которая будет заносится в БД должна быть исключительно такого формата: 00:00:00:000 и ни как иначе. Где нолики могут быть заменены на цифры от 0 до 9.)
Далее этот фильтр должен стать доступен в форматах ввода для включения/отключения. Там уже собственно можно будет создать специальный формат (точное время дистанции) и после применять этот формат ввода только для нужных полей ССК.
Я так понял что за это отвечает соответствующий хук: http://api.drupal.ru/api/function/hook_filter/6 И какие то вспомогательные.
Но я к сожалению пока ни как не пойму что надо чтобы сделать модуль, не со стороны создания модуля ни со стороны регулярного выражения которое оставило бы для внесения в БД только такую строку которая соответствует требованиям чуть выше.
Прошу вашей помощи в реализации или может подсказки как лучше реализовать без написания своего модуля предоставляющего особый фильтр.
Вы с жумлы чтоли пришли в друпал?
Нет. Этой системой практически не пользовался. С Друпалом работаю давно, но не все понимаю наверное из за малого времени на это. В основном я занимаюсь спортом.
Вы задали вопрос так, будто я спрашиваю или пишу какую то ересь... может и так, прошу помочь, направить, ткнуть в какое то руководство которое поможет. Может что то на drupal.org есть. Я особо не могу найти. Нашел пока немного другой вариант: http://drupal.org/project/cck_hhmmss Но там нет возможности указывать микросекунды.
Как вариант может можно взять этот модуль как то его расширив до запоминания микросекунд.
Ваши мысли не были бы ересью, если бы вы смотрели настройки создаваемого/созданного поля.
Пожалуйста, укажите мне на те настройки которые я почему то упустил...
что я нашел в настройкаъ текстового поля: дину (поставил 12 символов) список допустимых значений и php поле для того чтобы на php задать какой то вариант (код) который создавал бы этот самый список допустимых значений.
Более я там не нашел чего то еще подходящего, ткните конкретно если я настолько слеп.
А создавать массив допустимых значений... наверное это слишком много значений получится, и в дальнейшем сравнивать вводимое значение с этим огромным списком значений будет сложно.
Вот допустимые значения: начинаем: 00:00:00:001 00:00:00:002 00:00:00:003 .......00:00:00:999 ... 00:00:60:999 ... 00:60:59:999 ... 24:60:59:999
Сколько строк в результате получится для сравнения? помоему слишком.
hook_nodeapi ещё есть, form_alter(), почему именно решено фильтр писать, если фильтр совсем с другой стороны?
Писать фильтр не решено. Это мысли так сказать на обсуждение, просто это то что мне казалось ближе. Я не очень разбираюсь в тонкостях и может даже в основах, поэтому мой путь скорее всего будет закавырестее и сложнее, чем возможно тот, который вы можите предложить как более опытный и грамотный разработчик.
За наводку спасибо. Внимательно постараюсь изучить это.
UPD1: Вот на этой страничке описывающей как рас упомянутый вами хук http://api.drupal.ru/api/function/hook_nodeapi Пишется: Не используйте данный хук для выполнения операций только с типом ноды, созданного вашим модулем.
Что это означает? что не использовать этот хук если я сам создал какой то модуль который создает свой тип контента? Т.е. в моем случае так как тип контента (например: "гонка") создает модуль CCK можно использовать этот хук (hook_nodeapi) так чтобы вписать проверку одного из полей и для этого использовать Тип выполняемого действия 'validate' ...
Не все я там понимаю...