MODxにはNews Managerとか便利なスニペットもあるが、今回はDittoとPHxとManagerManagerを使って実現してみる。
テストサイトでのこの部分ですね。
modx_news_cap

ここでいうところの新着情報は、単に更新情報ではなく、トピックス的なものも表示するための新着情報です。なので、表示日付や文言などは、管理画面でコントロールできることを要件とします。ざっくり要件としてまとめると、

  • 管理画面で編集できる
  • 公開開始日時、公開取消日時を設定可
  • 見出しを編集可
  • アップロードファイル(PDFとか)や、外部サイトにリンク可
  • 新規ページを作成可
  • その新規ページはWYSIWYGで編集可
  • 表示順は表示日付で降順(もちろんメニューインデックスによる順番にすることも可)
  • なるべく管理画面の編集画面をシンプルに
といったところ。今までの経験から、クライアントさんから「新着情報を自分たちで更新したい!」と言われたときのベーシックなご要望はこんなところではないかと。

ちなみに管理画面のイメージはこんな感じ。
modx_news_manager_cap MannagerManagerで不必要な項目は設定タブにまわしています。あとはテンプレート変数を使って必要な項目を追加。

トップページのテンプレートに埋め込むDittoの記述はこれ。

<table>[!Ditto? &parents=`29` &tpl=`news_row_tpl` &sortBy=`news_disp_date`!]</table>

テーブルの1行ごとのテンプレートチャンクはこんな感じ。PHxを利用して、場合分けをしています。

<tr>
<th>[+news_disp_date+]</th>
<td>[*phx:if=`[+news_link_url+]`:ne=``:and:if=`[+news_page_create+]`:is=``:then=`<a href="[+news_link_url+]" target="[+news_link_target+]">[+longtitle+]</a>`*]
[*phx:if=`[+news_page_create+]`:ne=``:then=`<a href="[~[+id+]~]">[+longtitle+]</a>`*]
[*phx:if=`[+news_link_url+]`:is=``:and:if=`[+news_page_create+]`:is=``:then=`[+longtitle+]`*]</td>
</tr>