PDA

Просмотр полной версии : Проверка введенных данных в TCA


Ивано
23.05.2012, 19:54
Добрый день.
Стандартную проверку могу осуществить через:

//Проверка на цифры [формат только a-z,0-9,_]
'eval' => 'required,alphanum_x,nospace',

Но мне необходимо проверить существование записи в БД и если ее нет, то разрешить вставку (либо что-то другое, в зависимости от задачи)... Т.е. свого рода User Func Validation.

dmartynenko
24.05.2012, 15:37
Есть проверки unique (глобально) / unique in pid (на странице, на ветке страниц).

Но эти проверки проверяют значение отдельного поля. "Что-либо другое" тут не сделаешь. Смотрите в сторону хуков на сохранение записи, например такой:
$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['t3lib/class.t3lib_tcemain.php']['processCmdmapClass']

Ивано
25.05.2012, 10:55
Как их подключить нашел...

И как использовать тоже нашел:

function processDatamap_preProcessFieldArray(&$incomingFieldArray, $table, $id, &$tce)
{
global $BE_USER, $TYPO3_CONF_VARS;

if($table == 'tx_text_element')
echo "rewfew<script>alert('Привет, я нашел твое сохранение интересным')</script>";
}

function processDatamap_afterDatabaseOperations($status, $table, $id, &$fieldArray, &$tce)
{
global $BE_USER, $TYPO3_CONF_VARS;

if($table == 'tx_text_element')
echo "rewfew<script>alert(2)</script>";
}


function processCmdmap_preProcess($command, $table, $id, $fields, &$tce)
{
global $BE_USER, $TYPO3_CONF_VARS;

if($table == 'tx_text_element')
echo "rewfew<script>alert(2)</script>";
}

Но вот как подключить валидацию и какой класс нужно использовать?

dmartynenko
25.05.2012, 11:54
Вас интересует это http://www.google.ru/search?hl=ru&q=typo3+using+hooks ?

Я обычно использую опыт других разработчиков. Поискал по слову "processCmdmap" среди установленных у меня экстов, среди них нашлись такие: comments, tt_news, dam, irfaq, templavoila. Думаю так вы сможете найти что-то похожее на то, что вам нужно сделать.

Ивано
25.05.2012, 19:51
Да это то что нужно...




class tx_text{

function processDatamap_postProcessFieldArray ($status, $table, $id, &$fieldArray, &$reference)
{
}



function processDatamap_preProcessFieldArray(&$incomingFieldArray, $table, $id, &$tce)
{

}

function processDatamap_afterDatabaseOperations($status, $table, $id, &$fieldArray, &$tce)
{
global $BE_USER, $TYPO3_CONF_VARS;

}


function processCmdmap_preProcess($command, $table, $id, $fields, &$tce)
{
global $BE_USER, $TYPO3_CONF_VARS;

}
}


Вот только никак не пойму, какая функция за какой момент отвечает...


Мне нужно:
1 момент открытия формы (после того как человек щелкнул на иконку править элемент и перешел в режим редактирования данных
2 момент сохранения формы (что бы проверить и вывести сообщение если есть ошибка)

dmartynenko
28.05.2012, 14:58
Смотрите исходники t3lib\class.t3lib_tcemain.php - там видно когда хуки вызываются и что в них передается. Вещи конечно не тривиальные, поразбираться придеться.

В наличии хука на событие открытия формы я вот сомневаюсь. Если вам нужно что-то очень специфическое, то может проще написать свой BE модуль со своей логикой?