Russian TYPO3 community Форум больше не используется. Присоединяйтесь к каналу #community-ru в Slack for TYPO3 community  

Вернуться   Russian TYPO3 community > Тематические форумы > Разработка расширений / TYPO3 extension development

Ответ
 
Опции темы Опции просмотра
Старый 25.01.2008, 14:50   #1
reva2
Senior Member
 
Аватар для reva2
 
Регистрация: 31.08.2007
Адрес: Ростов-на-Дону
Сообщений: 206
По умолчанию Проверка правильности значений в TCEforms для TCA полей типа "user"

Встала вот такая задача. В разрабатываемом расширении в определенной таблице есть поле описанное в TCA как "type" => "user". Т.е. отрисовывается это поле полностью моей функцией и имеет достаточно сложную логику. Задача состоит в том чтобы в случае неправильно заполнения этого поля, пользователю при отправке формы на сохранение выдавалось стандартное сообщение ("Некоторы поля формы заполнены неправильно..."), поле помечалось стандартной меткой (желтый восклицательный знак), а форма не передавалась на обработку.

Просмотрев класс TCEforms я сначало обрадовался увидев что там есть массив TCEforms::additionalJS_submit[] в который можно помещать javascript код который будет вызываться при нажатии на одну из кнопок, предназначенных для сохранения формы.
Окинув быстрым взглядом как вызывается код вставленный в этот массив моим расширением я зашел в некоторый тупик. Ниже приводиться отрывок кода как вызывается код добавленный таким образом:
Код:
//код взят из файла jsfunc.tbe_editor.js
var TBE_EDITOR = {
 .....
checkSubmit: function(sendAlert) {
   var funcIndex, funcMax, funcRes;
   if (TBE_EDITOR.checkLoginTimeout() && confirm(TBE_EDITOR.labels.refresh_login)) {
    vHWin=window.open(TBE_EDITOR.backPath+'login_frameset.php?','relogin','height=300,width=400,status=0,menubar=0');
    vHWin.focus();
    return false;
   }
   var OK=1;

   // $this->additionalJS_submit:
   if (TBE_EDITOR.actionChecks && TBE_EDITOR.actionChecks.submit) {
    for (funcIndex=0, funcMax=TBE_EDITOR.actionChecks.submit.length; funcIndex<funcMax; funcIndex++) {
       eval(TBE_EDITOR.actionChecks.submit[funcIndex]); //Вот здесь происходит вывоз всех строк добавленных в TCEforms::additionalJS_submit[]
    }
   }

   if(!OK)    {
    if (!confirm(unescape("SYSTEM ERROR: One or more Rich Text Editors on the page could not be contacted. This IS an error, although it should not be regular.\nYou can save the form now by pressing OK, but you will loose the Rich Text Editor content if you do.\n\nPlease report the error to your administrator if it persists.")))    {
        return false;
    } else {
        OK = 1;
    }
   }
   // $reqLinesCheck
   if (!TBE_EDITOR.checkElements('required', false)) { OK = 0; }
   // $reqRangeCheck
   if (!TBE_EDITOR.checkElements('range', false)) { OK = 0; }

   if (OK || sendAlert==-1) {
    return true;
   } else {
    if(sendAlert) alert(TBE_EDITOR.labels.fieldsMissing);
    return false;
   }
}, .....
}
Т.е. если я буду выставлять значение переменной "OK" в 0 все равно пользователь сможет сохранить форму если в выпругнувшем окошке выберет ответ, что мол можно наплевать на то что неправильно обрабатывается контент RTE. Таким образом, выставление переменной "ОК" в значение 0 мне никаким образом не помогает, да и плюс к этому выдает сообщение никак не относящееся к моему полю.

Стал смотреть дальше на код этой функции. Как видно там идет проверка для полей которые обязательны для заполнения и значение которых должно попадать в определенный диапазон. Все это проверяется через одну функцию и первоначально я подумал что там можно каким либо образом добавить свой тип проверки. Просмотрев код этой функции, а также функции checkElementByType которая непосредственно проверяет правильность заполнения полей, я не обнаружил никакого намека на то что там можно добавить что-то свое.

Подытоживая, все выше сказанное пришел только к одному пути решения задачи (если не "хакать" код TBE_EDITOR): регистрировать мое поля как поле обязательно для заполнения (кстати еще не разобрался как), в TCEforms::additionalJS_submit[] вставлять код который проверяет правильность заполнения моего поля и в случае если поле заполнено неверно убирать значение из него, так чтобы поле не проходило проверку по критерию ("обязательно для заполнения"). Но все это как-то выглядит слишком замудренно.

Поэтому уважаемые коллеги обращаюсь к Вам за помощью. Возможно уже кто-то из Вас делал что-то подобное или просто разбирался как устроена проверка правильности заполнения полей в форме редактирования записи, и если есть такие люди то пожалуйста пните в правильном направлении.
reva2 вне форума   Ответить с цитированием
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB code is Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поле типа "user" в TCA reva2 Общие вопросы 2 05.12.2007 17:08


Часовой пояс GMT +4, время: 22:00.


Работает на vBulletin® версия 3.8.1.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot

Хостинг и техническая поддержка: TYPO3 Лаборатория