バージョン選択

フォーラム

メニュー

オンライン状況

66 人のユーザが現在オンラインです。 (58 人のユーザが フォーラム を参照しています。)
登録ユーザ: 0
ゲスト: 66
もっと...

サイト内検索

質問 > フロント機能 > Twig で動的なキーでオブジェクトの値を取得したい

フロント機能

新規スレッドを追加する

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
h_tanaka
投稿日時: 2018/2/2 11:50
対応状況: 解決済
登録日: 2016/7/22
居住地: 愛媛県
投稿: 1610
Twig で動的なキーでオブジェクトの値を取得したい
次のように Entity を用意しているとき、Twig ファイルにて繰り返し処理の中でキーを動的に指定して値を取得したいと思っています。
このようなことは可能でしょうか?

class Feature extends \Eccube\Entity\AbstractEntity
{
    private $tab1;
    private $tab2;
    private $tab3;
    private $tab4;
    private $tab5;
    private $content1;
    private $content2;
    private $content3;
    private $content4;
    private $content5;
}


app/template/default/Feature/feature.twig
				{% for i in 1..5 %}
				{% if Feature.tab{ i } %} {# ★ ここの書き方がわからない #}
					<div class="tab_box">
						<div class="cmn_box02">
							{{ Feature.content{ i }|raw }} {# ★ ここの書き方がわからない #}
							<ul class="clearfix">
								{% for FeatureProduct in FeatureProducts[{ i }] %} {# ★ ここの書き方がわからない #}
									<li>
									</li>
								{% endfor %}
							</ul>
						</div>
					</div>
				{% endif %}
				{% endfor %}



----------------
EC-CUBE 《プラチナ》ランクパートナー
トエビス株式会社 田中 宏典
EC-CUBEの機能やデザインのカスタマイズ承ります。

468
投稿日時: 2018/2/2 13:17
対応状況: −−−
登録日: 2008/10/26
居住地:
投稿: 3217
Re: Twig で動的なキーでオブジェクトの値を取得したい
さっと調べた感じでは、evaluateというフィルターを使えば可能なようですが、
eccubeで使えるかどうかは分かりません。
http://logic.moo.jp/data/archives/959.html

個人的な感覚ですが、変数名やプロパティ名を動的に組み立てない方が後々のトラブルが少なくなるような気がします。


----------------
株式会社シロハチ
■ECCUBE2系、3系構築カスタマイズご相談ください。
EC-CUBE3マニュアル
blog

minori
投稿日時: 2018/2/2 15:12
対応状況: −−−
常連
登録日: 2017/10/12
居住地:
投稿: 40
Re: Twig で動的なキーでオブジェクトの値を取得したい
EntityではなくFormですが、似たような実装をしたことがあります。

Twigのattributeという関数を利用しました。
下記のようなイメージです。

{% attribute(Feature, 'tab' ~ i) %}

下記ページが参考になると思います。
https://qiita.com/fuchigami/items/d2ab8da055a76139242c

ただ、468様も懸念されている通り
処理が追いにくくなってしまうため
保守性は下がってしまうかもしれません。
h_tanaka
投稿日時: 2018/2/2 15:39
対応状況: −−−
登録日: 2016/7/22
居住地: 愛媛県
投稿: 1610
Re: Twig で動的なキーでオブジェクトの値を取得したい
468さん、
minoriさん、

ありがとうございます!
そのページは見つけていたのですが、チルダで文字列結合できるのは知らなかったです。。

保守性についてもご指摘ありがとうございます。
動的に取得できる方法を知りたかったのは、ここで提示しているコードよりもずっと項目数が多くステップ数も多くなるし似たようなコードも並ぶしメンテナンスが大変だという理由ですので、保守性は逆に上がると思われます!

app/template/default/Feature/feature.twig
				{% for i in 1..5 %}
				{% if attribute(Feature, 'tab' ~ i) %}
					<div class="tab_box">
						<div class="cmn_box02">
							{{ attribute(Feature, 'content' ~ i)|raw }}
							<ul class="clearfix">
								{% for FeatureProduct in attribute(FeatureProducts, i) %}
									<li>
									</li>
								{% endfor %}
							</ul>
						</div>
					</div>
				{% endif %}
				{% endfor %}



----------------
EC-CUBE 《プラチナ》ランクパートナー
トエビス株式会社 田中 宏典
EC-CUBEの機能やデザインのカスタマイズ承ります。

スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ


 



ログイン


EC-CUBE公式 Amazon Payプラグイン

統計情報

総メンバー数は88,308名です
総投稿数は109,693件です

投稿数ランキング

1
seasoft
7365
2
468
3217
3
AMUAMU
2712
4
nanasess
2303
5
umebius
2085
6
yuh
1818
7
h_tanaka
1610
8
red
1568
9
mcontact
1240
10
tsuji
958
11
fukap
907
12
shutta
835
13
tao_s
796
14 ramrun 789
15 karin 689
16 sumida 641
17
homan
633
18 DELIGHT 572
19
patapata
502
20
flealog
485


ネットショップの壺

EC-CUBEインテグレートパートナー

Copyright© EC-CUBE CO.,LTD. All Rights Reserved.