2016-07-29 4 views
1

に、私は(のMyStuffのモデルでは)別の内線にrefferenceと拡張子(のMyStuffそれを呼び出すことができます)を持っているdefaultLangのアクセスrefferenceのdatarecord:extbaseリポジトリ:他のlang

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

テンプレートでI単純にアクセスしてください{mystuff.shoeref.image}

ここで問題は、MyCollectionはすべての言語で存在し、Mystuffはすべての言語に存在します。例として、私たちは言語がL=1で、MyCollectionは存在しないと言うことができます。この場合、{mystuff.shoeref}はNULLです。

私がしたいのは、デフォルト言語のMyCollectionデータレコードにアクセスすることです(この言語にMyCollectionレコードがある場合でも、デフォルト言語のデータレコードは常に有効です)。しかし、私はそれをどうやって行うのかわからない。

代替手段は、all言語(L=-1)のデータレコードを作成することです。しかし、私はすべてのエディタがこのデータレコードを編集できるように、このソリューションを嫌います。それは常にデフォルトの言語データレコードのコピーに過ぎません。ここ

答えて

1

問題は、extbaseあなたは$querySettings->setRespectSysLanguage(FALSE);を設定しようとすることができますが、その後、あなたがすべてのレコードを取得します

(UID LANG 0で)実際に使用したuid LANG 1とすべての子レコードを取得し、デフォルトのレコードを無視するということです翻訳の設定に関して。

これはまだextbaseの落とし穴です。

親レコードを最初に取得し、必要なものに基づいて子レコードをフェッチし、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

第二親レコードの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:今、あなたのテンプレートを変更するビュー

を採用し、あなたが今

関連する問題