【问题标题】:get TYPO3 Extbase Repository items in other languages获取其他语言的 TYPO3 Extbase Repository 项目
【发布时间】:2015-06-06 09:30:34
【问题描述】:

如何从 extbase 存储库中获取不同语言的项目?

我测试了什么:

  • findByUid($childUid)
  • $query->getQuerySettings()->setRespectSysLanguage(FALSE);
  • $query->getQuerySettings()->setSysLanguageUid(3);

但结果始终是父(lang)对象。

我尝试使用“匹配”和“语句”,但结果查询使用活动语言或在 (0,-1) = (default/all) 中搜索 sys_language_id。

【问题讨论】:

    标签: typo3 extbase typo3-6.2.x


    【解决方案1】:

    这似乎是 extbase 中的一个错误,直到 TYPO3 7.1 才会删除: https://forge.typo3.org/issues/45873

    对我来说,这解决了问题:https://forge.typo3.org/issues/45873#note-27

    在此修改之后,可以从存储库中获取已翻译的对象(例如 byUid 或在自己的查询中)

    (从链接页面复制,07.04.2015)


    1.HACK extbase 在你的扩展(在你的 ext_localconf.php 中)注册一个“CustomQueryResult”类:

    // The code below is NO PUBLIC API!
    /** @var $extbaseObjectContainer \TYPO3\CMS\Extbase\Object\Container\Container */
    $extbaseObjectContainer = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('TYPO3\\CMS\\Extbase\\Object\\Container\\Container');
    
    $extbaseObjectContainer->registerImplementation('TYPO3\CMS\Extbase\Persistence\QueryResultInterface', 'YOURVENDOR\YOUREXT\Persistence\Storage\CustomQueryResult');
    unset($extbaseObjectContainer);
    

    2.实现一个简单的CustomQueryResult类:

    class CustomQueryResult extends \TYPO3\CMS\Extbase\Persistence\Generic\QueryResult {
    
        /**
         * @var \YOURVENDOR\YOUREXT\Persistence\Storage\CustomDataMapper
         * @inject
         */
        protected $dataMapper;
    }
    

    3.实现CustomDataMapper类并覆盖方法“mapSingleRow”:

    class CustomDataMapper extends \TYPO3\CMS\Extbase\Persistence\Generic\Mapper\DataMapper {
    
        /**
         * Maps a single row on an object of the given class
         *
         * @param string $className The name of the target class
         * @param array $row A single array with field_name => value pairs
         * @return object An object of the given class
         */
        protected function mapSingleRow($className, array $row) {
            $uid = isset($row['_LOCALIZED_UID']) ? $row['_LOCALIZED_UID'] : $row['uid'];
            if ($this->identityMap->hasIdentifier($uid, $className)) {
                $object = $this->identityMap->getObjectByIdentifier($uid, $className);
            } else {
                $object = $this->createEmptyObject($className);
                $this->identityMap->registerObject($object, $uid);
                $this->thawProperties($object, $row);
                $object->_memorizeCleanState();
                $this->persistenceSession->registerReconstitutedEntity($object);
            }
            return $object;
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多