2019-09-17

PowerCMS X でモデルのデータ一覧ページ、詳細ページを作成する

作ったモデルのデータを取り出してみる。

基本は MT タグのお作法と似てる感じではある。

ブロックタグ

mt:<$モデル複数形$>

値を取り出すファンクションタグ

mt:<$モデル$><$カラム$>

毎回 mt:Entries って言うわけではないからその辺は気をつけとく必要がありそう。

安倍さんが便利そうなの作られてた。

https://twitter.com/_hideki_a/...

bit part でも話してて設計するときにspreadsheetでドキュメントを作ってからそれを組み込むというのもありかもしれないけど、このパターンだととりあえず管理画面から作ってしまうという方が早いんじゃないかな、という気はしている。

となると設定したものをパッと参照できたり、なにか出力しておけたりしたほうがいいんだろうな、と。

これは Craft も同じかもだけど、ドキュメント用にエクスポートしたものを自動で整形するようなのがあってもいいのかもな。

製品一覧ページ

こんな感じの設定で、作成する。

ほぼMTのコードと同じ。

<mt:products>
      <mt:if name="__first__">
      <ul class="c-summary3">
      </mt:if>
        <li class="c-summary__item e-card">
          <a href="<mt:productpermalink>">
            <div class="e-card__img"><img src='<mt:assetthumbnailurl name="image" width="376" >' alt="" title=""></div>
            <div class="e-card__body">
              <p class="e-card__title"><mt:producttitle></p>
              <p class="e-card__text"><mt:productdesc nl2br></p>
            </div>
          </a>
        </li>
        <mt:If name="__last__">  
      </ul>
    <mt:ignore>
      <div class="e-button-group">
        <a href="" class="e-button e-button--accent e-button--large">もっと見る</a>
      </div>
    </mt:ignore>
    </div>
    </mt:If>
</mt:products>

URLマップの設定

「再構築トリガー」で「ビュー」にチェックいれると、このURLマップが紐付いているテンプレートを更新すると、勝手に再構築されるってことなのかな??

製品詳細ページ

こんな感じの設定で。

URLマップの設定

コード抜粋

コードとしてはこんな感じ。

<div class="l-cols">
<div class="l-col6"><img src="<mt:productimageurl>" alt=""></div>
<div class="l-col6"><h3 class="e-heading3">製品紹介</h3>
<p><mt:productdesc nl2br></p>
<hr>
  <table class="e-table">
    <tbody><tr>
      <th>カテゴリ</th>
      <td>
                      <a href="#">デザイン</a>
                    </td>
    </tr>
    <tr>
      <th>メーカー</th>
      <td>
        <span><mt:Ignore><a href="#"></mt:Ignore><mt:productmaker><mt:makertitle></mt:productmaker><mt:Ignore></a></mt:Ignore></span>
                    </td>
    </tr>
  </tbody></table>
</div>
</div>

アセットのフィールドのところの書き方が最初ちょっとわからなかった。

<mt:<$モデル$><$カラム$>url>

ってことなのね、なるほど。

とりあえずこんな感じで動いたので、MTのテンプレートとほぼほぼ同じなのかな。

リレーション部分の取り出し

product モデルで maker カラムを設定。
maker モデルでメーカーを管理。
maker カラムではリレーションで maker モデルのデータを選択できるようにしてある。

このときの取り出し方どうやるんだろう??といろいろ試してみたりして、 context がいるのかなー、とか思いつつ、これで取り出せた。

<mt:productmaker>
  <mt:makertitle>
</mt:productmaker>

これが正解ならだいぶ楽なきはする。

設定方法とかどこか間違ってるかもしれないし、なんとなくで設定してテンプレート書いてるので、どっかでハマることがありそうな気はする。