TYPO3 Extbase: Доступ к внешним источникам данных (таблица "страницы" Typo3)
На самом деле я пишу расширение для экспорта в XML моего дерева страниц и элементов содержимого. В следующем примере я сопоставил таблицу 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();
Эта функция предоставляет мне результат моей таблицы моделей, которая до сих пор пуста. Поэтому я думаю, что мне нужен какой-то метод "инициализации" в моем репозитории, который заполняет мою таблицу моделей, но до сих пор у меня нет подхода, как я могу решить этот.
Есть ли у кого-нибудь подход к решению этой проблемы?
Я работаю с опечаткой 3 6.1.1.
Извините за мой английский, я знаю, что он не самый лучший
2 answers
Первый: удалите recordType = Tx_MyPublisher_Domain_Model_Page
из вашего сопоставления, это приведет к тому, что ваше репозиторий содержит только записи, которые были созданы как ВАША страница, и я предполагаю, что вы хотите получить любую страницу(страницы). Буквально, это включает условие для вашего заявления, например ( в зависимости от настроек TCA) AND record_type = 'Tx_MyPublisher_Domain_Model_Page'
...
Во-вторых: убедитесь, что storagePid
IGNORED
во всех ваших запросах, если вы заставите некоторые storagePid
опечаткой, вы получите только подстраницы данной страницы... Самый простой способ сделайте это, избегая storagePid
во всем репо, добавьте этот метод в свой PageRepository
public function initializeObject() {
$this->defaultQuerySettings = $this->objectManager->create('Tx_Extbase_Persistence_Typo3QuerySettings');
$this->defaultQuerySettings->setRespectStoragePage(FALSE);
}
Третий: Используйте этот совет для проверки запросов к таблице pages
, это неудобно, однако это самый быстрый способ выяснить, почему ваше репозиторий не получает необходимые данные (просто скопируйте инструкцию и вставьте ее в свой любимый графический интерфейс БД).
( желательно вставить его в свой вопрос, чтобы мы могли понять, в чем дело)
Если есть какие-то вопросы, такие как AND pages.pid = ?
в отлаженный оператор, конечно, вам нужно заменить их требуемым значением AND pages.pid = 123
Я думаю, вам нужно установить идентификатор хранилища, так как ваш запрос на поиск зависит от этого.
# TS
plugin.tx_yourext {
persistence {
storagePid = {$plugin.tx_yourext.persistence.storagePid}
}
}
# Or in query
$query->getQuerySettings()->setStoragePageIds(array($yourId);
В вашем случае это может быть 0 или любая другая страница, с которой вы хотите начать экспорт. Но это даст вам только страницы, которые являются дочерними для страницы с идентификатором хранилища в качестве идентификатора uid. Если вы хотите экспортировать целое дерево страниц, вам нужна рекурсивная функция. Кроме того, вы должны установить связь между элементами вашего контента и вашей страницей.