VIEWSでCOMMERCEのimageを表示

Events happening in the community are now at Drupal community events on www.drupal.org.
kyouhei's picture

ご指導よろしくお願いいたします。
モジュール COMMERCE で作成する productの画像を一覧トップページに表示さるよう VIEWS にて作成しました。

ページとブロックと両方を作成しましたが、ご指導いただきたいのはブロック表示の方です。
まず、商品を掲載した独自コンテンツタイプ(ここではitemsとします)ページで作成するとitemsで作成したコンテンツだけが一覧表示されます。
が、ブロックでフィールドにproductの画像を指定して画像のみの一覧を作成した場合、管理者だけは閲覧できますが訪問者は見ることができません。
Access において view published content としますと管理者も見ることができません。

権限の問題かと思いましたが、解決できずでした。
解決方法をよろしくお願いいたします。

Comments

Access において view published

blauerberg's picture

Access において view published content としますと管理者も見ることができません。

Access を None にすると見えますか?
見えるのであればViewsの権限の問題、見えなければそれ以外の問題です。

ちなみに、「管理者」というのがデフォルトユーザー (user id = 1)だとすると、これは起こりえません。
デフォルトユーザーは全ての権限チェックをバイパスするためです。

ありがとうございます

kyouhei's picture

1.Access を None にしても見えないです。

2.デフォルトユーザー (user id = 1)です。

ちょっと混乱してしまって申し訳ないですが、viewを作り直したまして、そうしたら、
コンテンツタイプをproductにしてviewでブロックを作った場合は、画像(フィールドのimage)が管理者だけは見えます。
が、商品を掲載した独自コンテンツタイプ(ここではitemsとします)で作成すると画像(フィールドのimage)は管理者も見えません。

上記二つで1.2.とも同じです。

独自コンテンツタイプitemsでは、COMMERCEのProductsで作ったproductの画像を表示させているので、画像(フィールドのimage)はviewsで表示させようと思ってもダメってことなのでしょうか?

blauerberg's picture

だいぶ間が空いてしまいましたが...

独自コンテンツタイプitemsでは、COMMERCEのProductsで作ったproductの画像を表示させているので、
画像(フィールドのimage)はviewsで表示させようと思ってもダメってことなのでしょうか?

items自体は画像フィールドを持っていないということですね。
それであれば、リレーションシップ (Viewsの設定UIの一番右側のペインの「高度」の中にあります)で、
itemsとProductsの関連を取得するように設定すれば、Products経由で画像フィールドが取得できると思います。

お返事遅くなり申し訳ないです。

kyouhei's picture

いつの間にかログアウトされていてコメントに気付かずでした。大変失礼を。。。

リレーションシップということで、なるほど出来そうで試してみましたが、どうも表示されません。

おっしゃる通り、items自体は画像フィールドを持っておらず、閲覧するときのコンテンツで表示される画像はProductsの画像です。そこで、

フォーマット:Unformatted list | 設定
Show:Fields | 設定

FIELDS
コンテンツ: タイトル
フィールド: Image

FILTER CRITERIA
コンテンツ: 掲載 (はい)
コンテンツ: タイプ (= items)

SORT CRITERIA

コンテンツ: Post date (desc)

となっておりますが、itemsとProductsの関連を取得のためにリレーションシップで、フィールド: Image:fid とすると表示されません。コンテンツタイプを関連付けるのかと思ったのですが、コンテンツタイプはrelationshipsに出てきません。

この辺り、ご指導いただけないでしょうか。

ps

kyouhei's picture

ひょっとして、
独自コンテンツタイプitemsに、productで使いたい商品の画像を表示させた方がいいのでしょうか?

何度も申しわけありませんが、よろしくお願いします。

blauerberg's picture

手元の環境で試してみたら動きましたので、Viewsの設定だけの問題っぽいですね。

itemsとProductsの関連を取得のためにリレーションシップで、フィールド: Image:fid とすると表示されません。

Relationshipで取得するのは、"Content: Referenced products" の方ですね。 (Referenced productsの部分はフィールド名に依存するので注意)

これを設定した後に、VIews UIの左のペインの FIelds で Imageフィールドを追加し、このフィールドの Relationshipに、先に設定した "Content: Referenced products" を指定すれば期待通り動くかと思います。

ひょっとして、独自コンテンツタイプitemsに、productで使いたい商品の画像を表示させた方がいいのでしょうか?

このように見た目の都合に合わせてコンテンツタイプ (モデル) を設計してしまうと、保守や変更の際に
コストがどんどんかかっていくことになります。
(見た目って頻繁に変わりますから..)

Drupalが他のCMSと比べて非常に優れているのは、UIとモデルを綺麗に分離して設計されている点なので、
なるべくDrupalの思想に従ってコンテンツタイプを設計することをオススメします。

その分このスレッドのように悩むことも多くなると思いますが、うまく使えるようになると業務システムレベルの
データを扱うシステムも比較的簡単に作ることができます (そこまでいくとトランザクションとか他に色々考えることはありますけど...)

権限

kyouhei's picture

ViewsのRelationshipをご指導通りにしたところ、画像は表示されるようになりました。

所が今度は ”Access なし” でも ”View published content”
でも、権限のない人にはブロック表示のためのviewsが表示されません。
ちなみに関係あるかどうかわかりませんが、ログインした状態で作製したviewsのブロックの所にカーソルが来ると歯車マークが出て、そこからviewsの編集へ行くことができますよね? それが、歯車マークが出てないんですよね。

Access を None にすると見えますか?
見えるのであればViewsの権限の問題、見えなければそれ以外の問題です。

とご指導いただいてるんですが、People 権限 とかに原因があるわけではなさそうですね。
何が原因か分からずです。

UIとモデルを綺麗に分離して設計されている点なので、
なるべくDrupalの思想に従ってコンテンツタイプを設計することをオススメします。

なるほど。とはいえ深く理解できたわけではないんですが、現在の悩みはDrupalの良さ故、と言う事ですし何とか解決し、うまく使いこなせるようにしたいと考えております。

Commerceのバグですね

blauerberg's picture

確かに productとのrelationshipを持たせるとブロックでは表示されないですね。

で、ちょっと調べてみたら実はCommerceのバグですね。
https://www.drupal.org/node/1276450

https://www.drupal.org/node/1276900#comment-4980066 の対処で表示はされますが、
これだとhook_query_alter で実装されているcoreやmoduleのアクセス制御をbypassするので、
問題ないか確認してから設定してください。

ありがとうございます

kyouhei's picture

blauerbergさん、大変助かりました。

自分自身でバグにはたどり着かなかったので、大変感謝しております。
hook_query_alterなど理解の不足にて、設定ができるかわかりませんが、どんな形にしろ解決しそうです。

ありがとうございました。
また何かありましたらよろしくお願いします。

日本 コミュニティ: Drupal Japan User Group

Group organizers

Group categories

Group notifications

This group offers an RSS feed. Or subscribe to these personalized, sitewide feeds: