2016-07-29 4 views
1

기타의 defaultLang의 액세스 refference의 datarecord은 (mystuff에의 모델에서) 다른 내선에 refference로 (mystuff에 호출 수 있습니다) :extbase 저장소 : 내가 확장자를 가진 랭

/** 
* shoeref 
* 
* @var \My\MyCollection\Domain\Model\MyCollection 
*/ 
protected $shoeref; 

템플릿에서 I 간단히 액세스하십시오 {mystuff.shoeref.image}

이제는 MyCollection이 모든 언어로 존재하지 않지만 Mystuff는 모든 언어에 존재합니다. Example은 우리가 언어가 L=1이고 MyCollection이 존재하지 않는다고 말하게한다. 이 경우 {mystuff.shoeref}은 NULL입니다.

내가 원하는 것은 기본 언어의 MyCollection 데이터 레코드에 액세스하는 것입니다 (이 언어에 MyCollection 레코드가있는 경우에도 항상 기본 언어의 데이터 레코드 만 얻을 수 있습니다). 그러나 나는 그것을 할 수있는 방법이 없습니다. 작동

대안은 all langauge (L=-1)에 대한 데이터 레코드를 생성하는 것입니다. 그러나 모든 편집기가이 데이터 레코드를 편집 할 수 있으며 항상 기본 언어 데이터 레코드의 사본 일 뿐이므로이 솔루션을 싫어합니다. 여기

답변

1

문제는 extbase 당신이 $querySettings->setRespectSysLanguage(FALSE);을 설정하려고 할 수 있습니다하지만 모든 기록을 얻을 것이다

(UID LANG 0) 실제로 사용하는 UID 랭 한 모든 자식 레코드를 가져오고 기본 기록을 무시하는 것입니다 번역 설정 관련.

이것은 여전히 ​​extbase에서 pittfall입니다.

부모 레코드를 먼저 가져온 다음 내게 필요한 쿼리를 기반으로 하위 레코드를 가져오고 extbase 마법 검색 메커니즘에 의존하지 않는 쿼리 문을 작성합니다.

약간의 정보 : 그것을 할

https://wiki.typo3.org/Default_Orderings_and_Query_Settings_in_Repository

https://docs.typo3.org/typo3cms/ExtbaseFluidBook/6-Persistence/3-implement-individual-database-queries.html

+0

이 정보 주셔서 감사합니다 부모 기록을 얻을 것이다 새로운 ViewHelper

<f:if condition="{model.parentRecord} > 0"> <c:object id="{model.parentRecord}"> <f:debug>{obj}</f:debug> </c:object> </f:if> 

를 사용합니다. 많이 도와 줬어. 다른 곳에서 나는 비슷한 문제가 있습니다. 리포지토리에서 첫 번째 링크에서 함수를 시도합니다 :'$ query-> getQuerySettings() -> setSysLanguageUid (0);'이것은 치명적인 오류 : 정의되지 않은 메서드 호출 ... \ Typo3QuerySettings :: setSysLanguageUid()'로 연결됩니다. . 귀하의 링크에서 나는 문서가'extbase 6.0 - 6.2'에 대한 것임을 보았습니다. 그러나 extbase 7.6이 있습니다. 이 설명서의 최신 버전이 있습니까? – nbar

+0

좋아요. QuerySettingsInterface.php를 직접 확인했는데이 함수가 이제는'setLanguageUid()'라고 알려졌습니다. 최신 문서를 찾을 수 없습니다 .. – nbar

0

한 가지 방법은 가지 간단하다

1) 모델 모델에 추가 게터를 추가 확장

public function getParentRecord() { 
    return $this->_localizedUid; 
} 

이 파일 typo3conf/ext/<your-ext>/Classes/ViewHelpers/ObjectViewHelper을 만들기) 추가 viewhelper

2 부모 레코드의 UID를 반환합니다

<?php 

namespace <YourVendor>\YourExtKey>\ViewHelpers; 

class ObjectViewHelper extends \TYPO3\CMS\Fluid\Core\ViewHelper\AbstractViewHelper { 

    /** 
    * @param int $id 
    * @return mixed 
    */ 
    public function render($id) { 
     $rawRecord = $GLOBALS['TYPO3_DB']->exec_SELECTgetSingleRow('*', '<tx_extkey_domain_model_fo>', 'uid=' . (int)$id); 

     $objectManager = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('TYPO3\\CMS\\Extbase\\Object\\ObjectManager'); 
     /* @var $dataMapper \TYPO3\CMS\Extbase\Persistence\Generic\Mapper\DataMapper */ 
     $dataMapper = $objectManager->get('TYPO3\\CMS\\Extbase\\Persistence\\Generic\\Mapper\\DataMapper'); 

     $records = $dataMapper->map('YourVendor\YourExtKey\Domain\Model\YourModel', array($rawRecord)); 
     $record = array_shift($records); 

     $this->templateVariableContainer->add('obj', $record); 
     $output = $this->renderChildren(); 
     $this->templateVariableContainer->remove('obj'); 
     return $output; 
    } 
} 

의 모든 장소를 채택하는 것을 잊지 마세요 공급 업체, 테이블 이름 및 모델!

3 : 이제 템플릿을 변경하려면보기

을 채택하고 이제

관련 문제