Russian TYPO3 community

Russian TYPO3 community (http://forum.typo3.ru/index.php)
-   Разработка расширений / TYPO3 extension development (http://forum.typo3.ru/forumdisplay.php?f=38)
-   -   Проверка введенных данных в TCA (http://forum.typo3.ru/showthread.php?t=10142)

Ивано 23.05.2012 19:54

Проверка введенных данных в TCA
 
Добрый день.
Стандартную проверку могу осуществить через:

//Проверка на цифры [формат только 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

Как их подключить нашел...

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

PHP код:

 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

Да это то что нужно...


PHP код:


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 модуль со своей логикой?


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

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