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

Вернуться   Russian TYPO3 community > Обсуждение общих технических вопросов > Мастер-класс

Ответ
 
Опции темы Опции просмотра
Старый 27.04.2016, 10:48   #1
alexk
Senior Member
 
Регистрация: 26.10.2007
Сообщений: 108
По умолчанию Замена 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 , у кого получилось, поделитесь.. у меня не вышло отсюда и решение с хуком.
__________________
Фанат TYPO!

Последний раз редактировалось alexk; 02.05.2016 в 06:23
alexk вне форума   Ответить с цитированием
Ответ


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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как системе администрирования определить pid по uid? Дылгеров Ц.В. Общие вопросы 3 17.11.2007 16:38
Поиск и замена "на лету" в HTML-шаблоне c0d3r TypoScript практикум 0 08.06.2007 18:26
Как получить pid страницы в TS? z0r1k TypoScript практикум 3 21.07.2006 20:23
При upload файлов с русскими названиями происходит замена русских букв на _ Дылгеров Ц.В. Общие вопросы 3 09.06.2006 04:42
глобальная замена amida Общие вопросы 1 29.11.2005 16:44


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


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

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