2017-08-24 4 views
0

ezプラットフォーム用のカスタム・ビュー・タイプを作成することは誰も知っていますか?デフォルトの3が使い尽くされました。新しいものが必要です。 render(controller(をカスタムテンプレートと一緒に使用する方法を知っている人は、今すぐブロックを解決することができます。ezplatformコンテンツ・タイプのマルチ・リレーショナル・コンテンツ項目のURLおよびオブジェクト名を持つリンクをレンダリング

基本的には、使用するコンテンツオブジェクトに複数のリレーショナルフィールドがあり、関連するすべてのcontentIdsへのリンクを印刷する必要がありますが、pathはうまく動作しますが、リンクのコンテンツオブジェクトの名前を抽出する方法が見つかりませんparamsを渡すかなりのファンキーなtpl論理を使わずに。

EG:ここではハックとしてrender(controller("ez_content:viewAction"のカスタムパラメータとして「embed_type」を渡して、特定のコンテンツタイプとビュータイプのコンテンツオブジェクトの代替ビューを取得することができます。

{% if embed_type is defined %} 
    {% include "embed/#{embed_type}.html.twig" %} 
{% else %} 
     <h1>{{ ez_field_value(content, 'name') }}</h1> 
{% endif %} 

しかし、これは非常に醜いであり、我々が本当にやりたいすべては私たちが行う必要があるすべては唯一のものとして、リレーショナルフィールドをループし、印刷のリンク(利用可能で、すべてのコンテンツタイプに対して1つのテンプレートを使用していますコンテンツフィールドには:「宛先ID」)。私は、ドキュメントでこのオプションになるはずが使用していますが、私はもうそれを見つけることができません。例:

{% set links = ez_field_value(footer, "first_links_row").destinationContentIds%} 
{% for id in links %} 
    {{ render(controller("ez_content:viewAction", {"contentId": id, "template": "link.html.twig"})) }} 
{% endfor %} 

link.html.twigは簡易印刷リンクになります。

<a href="{{ path("ez_urlalias", {"contentId": id}) }}"> 
    {{ ez_field_value(content, "name") }} 
</a> 

使用している場合カスタムtplはrender (controller (ヘルパーではできませんし、新しいカスタムビュータイプでもこの問題は修正されますが、どちらのドキュメントも見つかりません。

答えて

3

これを行うtwig functionを作成できます。

定義:

new Twig_SimpleFunction(
    'content_name', 
    array($this, 'getContentName') 
), 

実装:私たちはこのような何か持っているあなたは、コンテンツID、コンテンツ情報やコンテンツ自体のいずれかを提供することができます

public function getContentName($content, $forcedLanguage = null) 
{ 
    if (!$content instanceof Content && !$content instanceof ContentInfo) { 
     $contentInfo = $this->repository->getContentService()->loadContentInfo($content); 
    } elseif ($content instanceof Content) { 
     $contentInfo = $content->contentInfo; 
    } else { 
     $contentInfo = $content; 
    } 

    return $this->translationHelper->getTranslatedContentNameByContentInfo($contentInfo, $forcedLanguage); 
} 

を、それが翻訳されたコンテンツ名を返します

+0

素晴らしいありがとうございます。 – John

+1

'eZ \ Publish \ API \ Repository \ Repositoryを使用します。 eZ \ Publish \ API \ Repository \ Values \ Content \ Contentを使用します。 eZ \ Publish \ API \ Repository \ Values \ Content \ ContentInfoを使用します。 eZ \ Publish \ API \ Repository \ TranslationService; 'を使用します。 – John

+0

はい、申し訳ありませんが、これらのuse文は最低でも必要です:) – iherak

関連する問題