CMSのポテンシャルを引き出す─MODxで作る商用サイト

第24回実践!Articles[その2]

前回に引き続き、ブログ、ニュース記事に特化したカスタムリソースタイプであるArticlesを紹介していきます。バリバリ使いこなして、効果的な記事を発信していきましょう!

Articlesと日本語化

前回紹介したように、Articlesパッケージは現時点で日本語訳には対応していないのですが、FaceBook経由でTsukuru Hondaさんから、⁠日本語ローカライズを行っている」という連絡をいただきました。アドレスはこちらですので、興味のある方はgitから直接翻訳ファイルをインストールしてみてはいかがでしょうか?

また、他力本願で恐縮ではありますが、将来的に本家パッケージにマージされるよう陰ながら応援しております。

早速のバージョンアップ

2週間前に紹介したArticlesのバージョンは1.4.3だったのですが、本記事執筆時点での最新バージョンは1.4.7となっており、活発な開発が行われていることが伺えます。言い換えると、⁠すぐに仕様が変わったりしてメンテが大変なのでは?」と思えなくもないですが、そのあたりはChangelogなどを見ながら都度対応していくようにしましょう。参考までに、前回の記事からの変更点は次のとおりです。

最近のChangelog
Articles 1.4.7 
- [#7069] Add articles.article_show_longtitle setting for toggling on/off the longtitle field when editing Articles 
- [#7057] Fix issue with RTEs and updating an Article 

Articles 1.4.6 
- Fix issue with Articles snippet and $this reference 

Articles 1.4.5 
- [#6832],[#6697],[#6596] Remove 255 char limit from Article summary field, remove 100 char tags field limit 

Articles 1.4.4 
- [#6641] Add option to turn off richtext editing for Articles in a Container 
- [#6897] Add offset as option to latest posts display 
- [#6639] Add option to change default sorting for Articles in mgr container grid 
- [#7001] Fix issue where disabling comments prevented other placeholders from displaying 
- [#6980] Fix issue with fallback Twitter feed tpl 
- [#6850] Enable multiple Articles snippet calls per page 
- [#6625] Add in longtitle for Container in General Settings 
- Fix issue where changing template settings did not activate save btn 
- Add German, Russian, Czech translations 
- [#6626] Improve pub-date checking on WordPress import 
- [#6601] Fix template variables tab showing when creating a new article 
- [#6966] Fix issue with non-web contexts - Update Quip to 2.2.0-pl

Articlesにおけるリソースの構成

前回は、簡単なブログの作成方法について紹介しましたが、Articlesを深く知る上でも、バックエンドデータベースの構造に関して多少なりとも理解しておくことをおすすめします。

以前、第9回「MODxとMySQLの関係 + おまけスニペット」で触れたように、MODxの通常のリソースコンテンツはMySQL上のmodx_site_contentテーブルに格納されていました。Articles上での記事がいったいどこに格納されるのか気になるところですよね。

結論から言ってしまえば、Articles上の記事もmodx_site_contentテーブルに格納されていきます。しかしいくつかのパラメータが通常の記事と異なるため、管理画面左側のメニューツリーから記事が直接表示されることはありません。

MySQLコマンドからmodx_site_contentテーブルの一部を表示
mysql=> select id,published,hidemenu,pagetitle from modx_site_content; 
+----+-----------+----------+-----------------------+ 
| id | published | hidemenu | pagetitle             | 
+----+-----------+----------+-----------------------+ 
|  1 |         1 |        0 | トップ                | 
|  2 |         1 |        0 | 会社情報              | 
|  3 |         1 |        0 | 商品紹介              | 
|  4 |         1 |        0 | お茶                  | 
|  5 |         1 |        0 | ギフト                | 
|  6 |         1 |        0 | 生姜紅茶              | 
|  7 |         1 |        1 | 検索結果              | 
|  8 |         1 |        0 | 秘密のフォルダ        | 
|  9 |         0 |        0 | ログイン              | 
| 11 |         1 |        0 | 秘密2                 | 
| 10 |         1 |        0 | 秘密1                 | 
| 12 |         0 |        0 | 秘密のページ          | 
| 14 |         1 |        0 | お問い合わせ          | 
| 18 |         1 |        1 | スレッドに返信        | 
| 22 |         1 |        0 | 松の露                | 
| 27 |         1 |        1 | 同窓会                | 
| 28 |         1 |        1 | テレビ欲しい          | 
| 26 |         1 |        0 | ブログ                | 
+----+-----------+----------+-----------------------+ 

Articles上の記事だけを検索するためには、class_keyという項目で条件を絞り込めば良いでしょう。

Articles上の記事のみを検索
mysql=> select id,published,hidemenu,pagetitle from modx_site_content where class_key = 'Article'; 
+----+-----------+----------+--------------------+ 
| id | published | hidemenu | pagetitle          | 
+----+-----------+----------+--------------------+ 
| 27 |         1 |        1 | 同窓会             | 
| 28 |         1 |        1 | テレビ欲しい       | 
+----+-----------+----------+--------------------+ 

Articlesを導入したことで、 class_key=Articleだけではなく、テーブルにはいくつかの変更が加わっていますので、興味がある方はいろいろと見比べてみてください。一点注意しておきたいのは、Articles内の記事はhidemenuが1と設定されています。これを踏まえて、ブログに検索機能を追加してみましょう。

SimpleSearchの設置

MODxに検索機能を設けるためのスニペット、SimpleSearchについては以前紹介していますがArticles上にも同様に検索フォームを設置することができます。

以前の記事をもう一度読み返してみてください。SimpleSearchを使用するためには以下の手順を行う必要がありました。

  1. 検索フォームを設置するページで[[!SimpleSearchForm? オプション...]]という記述を行い
  2. 検索結果を表示させるページでは[[!SimpleSearch? オプション...]]という記述を行う

ということで、まずは検索フォーム部分を作成します。デフォルトのsample.ArticlesContainerTemplateテンプレートでは、検索フォーム部分が次のような形で設定されていますので、この辺りをSimpleSearchスニペットを使ったものに置き換えてみましょう。

<form id="quick-search" action="search-results.html" method="get">
<p>
  <label for="qsearch">Search:</label>
  <input class="tbox" id="qsearch" type="text" name="search" value="" title="Start typing and hit ENTER" />
  <input class="btn" alt="Search" type="image" title="Search" src="[[++articles.assets_url:default=`assets/components/articles/`]]themes/default/images/search.gif" />
</p>
</form>

ページの都合上(=筆者のセンスの都合上⁠⁠、デザインは一切気にせず検索フォームを設置しますので、実際には画像やJavaScriptを使うなど、凝ったものを作ってみてくださいね。landingで指定するのは検索結果を表示するページのリソースIDです。

上記のフォーム部分を次のように置き換えます。

<br /><br /><br />
[[!SimpleSearchForm? &landing=`32` &tpl=`my_search`]]

my_searchチャンクの内容は以前紹介したものをそのまま使用します。

my_searchチャンクの内容
<script type="text/javascript">
<!--
function erase_words(obj){
  if(obj.value==obj.defaultValue){
    obj.value="";
    obj.style.color="#000";
  }
}
function put_words(obj){
  if(obj.value==""){
    obj.value=obj.defaultValue;
    obj.style.color="#999";
  }
}
//-->
</script>

<form action="[[~[[+landing]]]]" method="[[+method]]">
  <input type="text" id="keywords4" name="[[+searchIndex]]" value="検索キーワードを入力" size="20" onFocus="erase_words(this)" onBlur="put_words(this)" style="color: #999;"/>
  <input type="hidden" name="id" value="[[+landing]]" />
</form>

次に、検索結果表示用の簡単なリソースを作成します。メニューから非表示であるArticles内リソースを検索するため、hideMenuの値を1に設定しているのがミソです。また、検索キーワードをハイライトするためのhighlightResultsパラメータを敢えて0に設定しているのは、日本語を検索した場合に結果が文字化けしてしまうためです。

ざっと調べてみたところ、simplesearch.class.php中の360行目付近で、$this->searchStringに値が入ってこないのが問題のようですが、時間の都合上、根本解決には至りませんでした。原因がわかり次第、この場でお伝えしようと思いますので、気長にお待ちください(バージョンアップによるバグフィクスが先だったりするかもしれません⁠⁠。

検索結果用リソースの作成
リソースID32
タイトルブログ検索結果
使用テンプレートsample.ArticlesContainerTemplate
エイリアスblog-search-result
メニューに表示しないチェック
公開するチェック
コンテンツ<p>[[!SimpleSearch? &highlightResults=`0` &hideMenu=`1`?]]</p>

終わりに

前回からの繰り返しになりますが、⁠直感的に操作できる」のがArticlesの魅力のひとつですので、読者の皆さんもぜひ践してみてください。

おすすめ記事

記事・ニュース一覧