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.

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

Author: Andrew, 2013-06-20

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

 1
Author: biesior, 2017-05-23 11:44:54

Я думаю, вам нужно установить идентификатор хранилища, так как ваш запрос на поиск зависит от этого.

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

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

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

 0
Author: Shufla, 2013-06-20 11:29:34