2013-06-20 2 views
3

Я фактически пишу расширение для экспорта xml моего pagetree и элементов контента. на следующий примере я отобразил TYPO3 «страницы» таблицу на моей странице модели:TYPO3 Extbase: Доступ к внешним источникам данных (таблица «Таблицы Typo3»)

# typo3conf/ext/my_publisher/Configuration/TypoScript/setup.txt 
# Module configuration 
module.tx_mypublisher.persistence.classes { 
    Tx_MyPublisher_Domain_Model_Page { 
    mapping { 
     tableName = pages 
     recordType = Tx_MyPublisher_Domain_Model_Page 
     columns { 
     uid.mapOnProperty =   uid 
     pid.mapOnProperty =   pid 
     sorting.mapOnProperty =  sorting 
     deleted.mapOnProperty =  deleted 
     title.mapOnProperty =  title 
     is_siteroot.mapOnProperty = is_siteroot 
     } 
    } 
    } 
} 

Теперь я хочу, чтобы восстановить страницы в моем контроллере ...

$pages = $this->pageRepository->findAll(); 

Эта функция обеспечивает я результат моей модели, пустой до сих пор. Итак, мне нужен какой-то метод «initialize» в моем репозитории, который заполняет мою таблицу моделей , но до сих пор у меня нет подхода, как я могу это решить.

У кого-нибудь есть решение для решения этой проблемы?

Я работаю с Typo3 6.1.1.

Извините мой английский я знаю, что это не самый лучший

ответ

1

Первого: удалить recordType = Tx_MyPublisher_Domain_Model_Page из вашего отображения, это вызывает, что ваш репо содержит только те записи, которые были созданы в качестве страницы, и я полагаю, что вы хотите достают любую страницы (ы). Буквально, это включает в себя условие вашего заявления, как (в зависимости настроек TCA) AND record_type = 'Tx_MyPublisher_Domain_Model_Page' ...

Второй: убедитесь, что storagePid во всех ваших запросов IGNORED, если вы заставите некоторые storagePid по TypoScript вас добьетесь только подстраницами данной страницы ... Самый простой способ сделать это избегает storagePid в целом репо, добавить этот метод к вашему PageRepository

public function initializeObject() { 
    $this->defaultQuerySettings = $this->objectManager->create('Tx_Extbase_Persistence_Typo3QuerySettings'); 
    $this->defaultQuerySettings->setRespectStoragePage(FALSE); 
} 

Третьего: Использование this tip для проверки запросов для таблицы pages, это неудобно, однако это самый быстрый способ узнать, почему ваше репо не получает требуемые данные (просто скопируйте заявление и вставьте его в свой любимый графический интерфейс DB).

(предпочтительно, вставить его на свой вопрос, так что мы можем увидеть, что это неправильно)

Если есть некоторые вопросы метка как AND pages.pid = ? в отлаженном заявлении, конечно, нужно, чтобы заменить их с требуемым значением AND pages.pid = 123

0

Я думаю, вам нужно установить StoragePid, так как ваш FindAll-запросов полагается на это.

# TS 
plugin.tx_yourext { 
    persistence { 
     storagePid = {$plugin.tx_yourext.persistence.storagePid} 
    } 
} 

# Or in query 
$query->getQuerySettings()->setStoragePageIds(array($yourId); 

В вашем случае это может быть 0 или любая другая страница, с которой вы хотите начать экспорт. Но это даст вам только страницы, которые являются дочерними страницами страницы, с memoryPid как его uid. Если вы хотите экспортировать весь pagetree, вам нужна рекурсивная функция. Также вы должны установить связь между элементами контента и вашей страницей.

+0

ok У меня установлен storagePid 0, а затем 2 (это моя корневая страница) в TS Но в обоих случаях ничего не произошло. В TCA нет ничего другого для настройки?Или есть какая-либо функция, которая мне нужна в репозитории для получения данных из таблицы страниц? – rayphi

+0

Используете ли вы базовый модуль? TypoScript там не работает. В этом вы должны работать с диспетчером конфигурации или просто устанавливать свой pid хранилища в своем репозитории. – Shufla

+0

ah ok yes Я использую модуль backend ... но там работает таблицаMapping? – rayphi

Смежные вопросы