2015-04-01 53 views
3

如何從不同語言的extbase存儲庫中獲取項目?獲取TYPO3其他語言的Extbase存儲庫項目

什麼我測試:

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

但結果始終是父(郎)對象。

我用「匹配」和「語句」對它進行了嘗試,但結果查詢使用活動語言或搜索(0,-1)=(default/all)中的sys_language_id。

回答

1

看來,這是extbase將直到TYPO3 7.1取出了一個錯誤: https://forge.typo3.org/issues/45873

對我來說這解決了這個問題:https://forge.typo3.org/issues/45873#note-27

此修改後,可以得到翻譯對象庫(如byUid或在自己的查詢)

(從鏈接頁複印,2015年4月7日)


在擴展(在你的ext_localconf.php)

1.HACK extbase註冊一個 「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.Implement簡單CustomQueryResult類:

class CustomQueryResult extends \TYPO3\CMS\Extbase\Persistence\Generic\QueryResult { 

    /** 
    * @var \YOURVENDOR\YOUREXT\Persistence\Storage\CustomDataMapper 
    * @inject 
    */ 
    protected $dataMapper; 
} 

3.Implement的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; 
    } 
} 
相關問題