Russian TYPO3 community

Russian TYPO3 community (http://forum.typo3.ru/index.php)
-   Мастер-класс (http://forum.typo3.ru/forumdisplay.php?f=41)
-   -   Замена PID (http://forum.typo3.ru/showthread.php?t=12019)

alexk 27.04.2016 10:48

Замена PID
 
Кто то спрашивал, как заменить PID для нового элемента. Тут как раз столкнулся с этим, у меня есть отдельные папки для хранения разных элементов разных экстов. И т.к. модели часто пересекаются, то при создании например Элемента Объекта с привязанными контактами, т.е. в папке Объекта появляются и элементы Контактов.. и так везде.. я решил немного почистить все. Т.е. все должно быть по своим местам, а для этого нужно менять PID при создании элемента.

Изменить или предопределить PID через TCA невозможно... но его можно предопределить во время сохранения, т.е. через HOOK

делается это элементарно (как оказалось):
в ext_conf_template.txt
задаем нашу storagePid

потом создаем HOOK (https://docs.typo3.org/typo3cms/Core...ept/Index.html)
/Classes/Hook/Core/DataHandling/ProcessDataMap.php (можно менять пути и папки, это не принципиально)

PHP код:

namespace Tx\Extension\Hook\Core\DataHandling;

use 
Tx\Extension\Utility\ExtConfiguration
//(Этот файл я описывал тут: http://forum.typo3.ru/showthread.php?t=12018"]http://forum.typo3.ru/showthread.php?t=12018)

class ProcessDataMap
{

    
/**
     * Post-process PID VALUE
     *
     * @param    object        $fobj TCEmain object reference
     * @return    void
     */
    
public function processDatamap_postProcessFieldArray ($status$table$id, &$incomingFieldArray, &$fObj) {
                
$settings ExtConfiguration::getConfiguratuion();
        switch (
$table) {
            case 
'OUR_TABLE':
            if(isset(
$settings['storagePid'])){
                
$incomingFieldArray['pid'] = $settings['storagePid'];
            }
            break;
        }

    }


Ну и не забываем зарегистрировать наш HOOK в ext_tables.php

PHP код:

$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['t3lib/class.t3lib_tcemain.php']['processDatamapClass'][] = 'Tx\\Extension\\Hook\\Core\\DataHandling\\ProcessDataMap'

Собственно это все, удачи!

P.S.
https://docs.typo3.org/typo3cms/TCAR...ine/Index.html тут вроде как описана возможно подстановки pid через TCAdefaults , у кого получилось, поделитесь.. у меня не вышло отсюда и решение с хуком.


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

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