<?xml version="1.0" encoding="UTF-8"?>

<feed xml:lang="ja" xmlns="http://www.w3.org/2005/Atom">
    <title>Web　酒　肴</title>
    <subtitle>Flex, ActionScript, CMS, Ruby on Rails, Java, NetBeansなどの技術情報その他</subtitle>
    <id>http://blog.garden-place.jp/oborobeer/:2</id>

    <link rel="alternate" type="text/html" href="http://blog.garden-place.jp/oborobeer/" />
    <link rel="self" type="application/atom+xml" href="http://blog.garden-place.jp/oborobeer/" />
    <generator uri="http://nucleuscms.org/">Nucleus CMS v3.31SP1</generator>
    <updated>2008-08-17T10:42:05Z</updated>

    <entry>
 <title type="html"><![CDATA[[MODx]Dittoでn件ごとにページング処理を実装する方法]]></title>
 <link rel="alternate" type="text/html" href="http://blog.garden-place.jp/oborobeer/item_185.html" />
 <author>
  <name>obanetty</name>
 </author>
 <updated>2008-08-17T10:42:05Z</updated>
 <published>2008-08-17T19:42:05+09:00</published>
 <content type="html"><![CDATA[<p>MODx(0.9.6)において、Dittoは記事をソートして一覧表示などする場合に必須のスニペットだ。
今回、一覧表示した記事を10件ごとにページングして表示する機会があったので、その方法をここに残しておく。</p>

<ol>
<li><p>必要最小限の書式は以下</p>

<blockquote>
  <p>[!Ditto? &amp;id=&#96;id&#96; &amp;display=&#96;10&#96; &amp;paginate=&#96;1&#96; &amp;language=&#96;japanese-utf8&#96; !]</p>
</blockquote>

<table>
<thead>
<tr>
  <th>パラメータ名</th>
  <th>役割</th>
</tr>
</thead>
<tbody>
<tr>
  <td>id</td>
  <td>Dittoごとに一意なID</td>
</tr>
<tr>
  <td>display</td>
  <td>１ページに表示する件数</td>
</tr>
<tr>
  <td>paginate</td>
  <td><code>1</code>でページング処理を有効にする</td>
</tr>
<tr>
  <td>language</td>
  <td>デフォルトでは英語になっていたので日本語を指定（「前へ」「次へ」などの文言）</td>
</tr>
</tbody>
</table>

<p><strong>注意点</strong></p>

<ul>
<li>ページのキャッシュを無効にするために <em>[[Ditto ～ ]]</em> ではなく <em>[!Ditto ～ !]</em> の書式にする</li>
<li>必ずidパラメータに適当な値を設定する（Dittoを同ページで複数使用するときにはそれぞれ別の値を設定する）</li>
</ul></li>
<li><p>ページのナビゲーションを表示したい場所に以下のタグを追加する</p>

<blockquote>
  <p><code>&lt;p id="ditto_pages"&gt;[+</code><strong>id</strong><code>_previous+] [+</code><strong>id</strong><code>_pages+] [+</code><strong>id</strong><code>_next+]&lt;/p&gt;</code></p>
</blockquote>

<p>強調している「id」のところには自分がDittoのタグに使用したidの値と置きかえる。
HTMLは別にPタグでなくとも良いが、スタイルの指定のためタグのID指定はditto_pagesにする。（まぎらわしいがDittoのidのことではなくHTMLタグのこと）</p></li>
<li><p>スタイルシートに以下を追加する</p>

<pre><code>.ditto_paging {
    border-top: 1px solid #ccc;
    padding: 10px;
    font-size: 86%;
    color: black;
}
#ditto_pages .ditto_currentpage {
    border: 1px solid black;
    padding: 1px 5px 2px;
    margin-right: 1px;
    background-color: #008CBA;
    color: #fff;
}
#ditto_pages .ditto_off {
    border: 1px solid #ccc;
    padding: 1px 5px 2px;
    margin-right: 1px;
    color: #ccc;
}
#ditto_pages a, #ditto_pages a:link, #ditto_pages a:visited {
    border: 1px solid #008CBA;
    padding: 1px 5px 2px;
    margin-right: 1px;
    text-decoration: none !important;
    color: black;
}
#ditto_pages a:hover {
    background-color: #fff;
    color: #000;
}
</code></pre>

<p>このスタイルシートは以下のページでDittoの作者が提供しているものだ。
好きに改変して使用すればいいだろう。</p>

<p><a href="http://ditto.modxcms.com/tutorials/pagination.html">Pagination - Ditto Support Site</a></p></li>
<li><p>以上</p>

<p>これでid="ditto_pages"のタグ内が自動で変換されてページングのナビゲーションが表示される。
うまくいかないときはid指定、ページのキャッシュなどに気をつけて確認してみよう。</p></li>
</ol>

<p>ちなみに使ってみるとこんな感じにできました。</p>

<p><a href="http://ukkyo.sakura.ne.jp/go_on/prodo/" title="破れGo on !! - 未経験２７歳プログラマーへの道（イバラ）">破れGo on !! - 未経験２７歳プログラマーへの道（イバラ）</a></p>
]]></content>
 <id>http://blog.garden-place.jp/oborobeer/:2:185</id>
</entry><entry>
 <title type="html"><![CDATA[[MODx]スニペットがなぜか表示されないときに確認するたった一つのこと]]></title>
 <link rel="alternate" type="text/html" href="http://blog.garden-place.jp/oborobeer/item_135.html" />
 <author>
  <name>obanetty</name>
 </author>
 <updated>2008-04-27T04:10:59Z</updated>
 <published>2008-04-27T13:10:59+09:00</published>
 <content type="html"><![CDATA[<pre><code>[[スニペット名? &amp;パラメータ=`値`]]
</code></pre>

<p>上記の「?」を忘れていませんか？
（これでハマったのすでに3回目・・・）</p>
]]></content>
 <id>http://blog.garden-place.jp/oborobeer/:2:135</id>
</entry><entry>
 <title type="html"><![CDATA[[MODx]リンク属性のドキュメント変数]]></title>
 <link rel="alternate" type="text/html" href="http://blog.garden-place.jp/oborobeer/item_130.html" />
 <author>
  <name>obanetty</name>
 </author>
 <updated>2008-04-06T06:24:23Z</updated>
 <published>2008-04-06T15:24:23+09:00</published>
 <content type="html"><![CDATA[<p>知らぬ間に一か月も更新をほったらかしていた。</p>

<p>MODxにはリンク属性というパラメータがあり、そのドキュメントに対するリンクを生成するときにその属性を付加することができる。
よく使うのは<em>target="_blank"</em>だろうか。
で、このリンク属性をドキュメント変数として取得する方法がなかなか見つからなかった。
ドキュメント漁るのもめんどくさいし、Wayfinderのソースの中探したら簡単に見つけた。</p>

<pre><code>[*link_attributes*]
</code></pre>

<p>です。
一か月ぶりというのになんという小ネタ・・・。</p>
]]></content>
 <id>http://blog.garden-place.jp/oborobeer/:2:130</id>
</entry><entry>
 <title type="html"><![CDATA[[MODx]CSS Star Ratingで記事評価機能]]></title>
 <link rel="alternate" type="text/html" href="http://blog.garden-place.jp/oborobeer/item_126.html" />
 <author>
  <name>obanetty</name>
 </author>
 <updated>2008-03-06T05:18:15Z</updated>
 <published>2008-03-06T14:18:15+09:00</published>
 <content type="html"><![CDATA[<p>よく技術情報のページなんかに</p>

<blockquote>
  <p>この記事は役に立ちましたか？</p>
</blockquote>

<p>なんていって5段階評価の投票ができるようなページがあります。
Amazonの書評みたいなものですね。
あれを実現するスニペット。</p>

<p>参考サイトはこちら</p>

<ul>
<li><a href="http://modxcms.com/CSS-Star-Rating-547.html">CSS Star Rating（本家サイト　英語）</a></li>
<li><a href="http://www.1km.info/modx_site/plugins_snippets/css_star_rating.html">CSS Star Rating - 1km.info</a></li>
</ul>

<p>導入手順は上記サイトを参考にしてもらえばわかるので、簡単に。</p>

<ol>
<li>環境： MODx 0.9.6  / CSS Star Rating 1.0</li>
<li>本家サイトから必要なファイルをダウンロード＆解凍＆適切な場所に設置</li>
<li><code>star_rating.snippet.tpl</code> の内容で新しいスニペットを作成（スニペット名：<code>star_rating</code>）</li>
<li><code>star_rating</code>という名前のテンプレート変数を作成し、投票機能をつけたいテンプレートへのアクセスを追加</li>
<li>先ほどのテンプレートにCSS Star Ratingのスタイルシートへのリンク追加</li>
<li>テンプレートや記事の好きな場所に<code>[!star_rating!]</code>と追加</li>
</ol>

<p>以上。（ホンマにテキトーやな）</p>

<p>でもここで問題。僕のサイトでは「フレンドリーURL：ON」、「エイリアスパス：使用」の環境で使用しているのですが、投票時にアクセスするURLにエイリアスパスが反映されないという不具合が。
要するに親フォルダ（エイリアス名：parent）の下に子ドキュメント（エイリアス名：child）があり、接尾詞が.htmlの場合は以下のURLになる。</p>

<pre><code>http://(site_url)/parent/child.html
</code></pre>

<p>そのドキュメントを評価するときに接続するURLは、以下のようになるべきである。</p>

<pre><code>http://(site_url)/parent/child.html?starvote=5&amp;pid=xx
（starvoteは5段階評価の数値、pidはドキュメントID）
</code></pre>

<p>だが、そこがうまく動作せず、以下のように親のパスがなくなったURLになってしまっている。</p>

<pre><code>http://(site_url)/child.html?starvote=5&amp;pid=xx
</code></pre>

<p>そしてページが見つからないというエラーになる。
こちらのフォーラムを参照したところ、どうやらこれはバグだ。</p>

<p><a href="http://modxcms.com/forums/index.php/topic,5489.0.html">Support/Comments for CSS Star Rating </a></p>

<p>次のバージョンで修正されると思われるが、次バージョンがリリースされるまでは以下の修正で対応できる。</p>

<h3>star_ratingスニペットを修正する</h3>

<p>star_rating.snippet.tplファイルの内容でstar_ratingスニペットを作成したが、その内容を修正する。
star_rating.snippet.tplでいうところの157行目から161行目までの5行でURLを作成している。
（最低評価から最高評価まで5段階分のURL)
そこを修正する。</p>

<h4>修正前</h4>

<pre><code> $modx-&gt;makeUrl($modx-&gt;documentObject['id'], $modx-&gt;documentObject['alias'], 'starvote=1&amp;amp;pid=' . $docID)
                               ･･･
 $modx-&gt;makeUrl($modx-&gt;documentObject['id'], $modx-&gt;documentObject['alias'], 'starvote=5&amp;amp;pid=' . $docID)
</code></pre>

<h4>修正後</h4>

<pre><code>$modx-&gt;makeUrl($modx-&gt;documentObject['id'], '', 'starvote=1&amp;amp;pid=' . $docID)
                               ･･･
$modx-&gt;makeUrl($modx-&gt;documentObject['id'], '', 'starvote=5&amp;amp;pid=' . $docID)
</code></pre>

<p>つまり以下の部分を空文字列に置き換える。</p>

<pre><code>$modx-&gt;documentObject['alias']　→　''
</code></pre>

<p>これで正常に動作しました。
同じユーザが何度も投票しないようにするためのセッション管理などで、ややこしい部分はまだありそうだけど、それはおいおい調査します。</p>

<h4>追記</h4>

<p>検索エンジンのクローラーのせいで、勝手に投票されて少し困っています。
対処法はまだわかりません。</p>
]]></content>
 <id>http://blog.garden-place.jp/oborobeer/:2:126</id>
</entry><entry>
 <title type="html"><![CDATA[[MODx]Dittoでドキュメントとウェブリンクを同様に扱うには？]]></title>
 <link rel="alternate" type="text/html" href="http://blog.garden-place.jp/oborobeer/item_108.html" />
 <author>
  <name>obanetty</name>
 </author>
 <updated>2008-02-14T20:46:00Z</updated>
 <published>2008-02-15T05:46:00+09:00</published>
 <content type="html"><![CDATA[<p>MODxを使用して以下のようなことをしたいと思っていました。</p>

<h5>前提条件</h5>

<ul>
<li>MODx0.9.6</li>
<li>サイトには随時、記事が追加される</li>
<li>サイトは外部のブログへのリンク集も持ち、そのリンクも随時追加される</li>
<li>MODx上で記事はドキュメント、リンクはウェブリンクで保持している</li>
</ul>

<h5>やりたいこと</h5>

<ul>
<li>新着記事、リンクをDittoを使って表示する</li>
<li>記事もリンクも時系列でソートされ、どちらもごちゃまぜで表示する</li>
<li>記事の場合は内容（[+content+]）の一部、リンクの場合はリンクの説明文（[+description+]）を表示する</li>
</ul>

<p>例えば以下のようなファイル構成です（カッコ内はそのオブジェクトが持つID）。</p>

<pre><code>記事用フォルダ(1)
　└記事A
　└記事B
　└記事C

ウェブリンク用フォルダ(2)
　└リンクA
　└リンクB
　└リンクC
</code></pre>

<p>このようなファイル構成から記事とウェブリンクをごちゃ混ぜにして公開日が最新の3件を取得するには、Dittoスニペットを以下のように使用します。表示に使用するチャンク名は<em>chunk</em>とします。</p>

<pre><code>[[Ditto?parents=`1,2` &amp;sortBy=`pub_date` &amp;total=`3` &amp;sortDir=`DESC` &amp;tpl=`chunk` &amp;hideFolders=`1`]]
</code></pre>

<p>それぞれの設定内容は以下の意味です。</p>

<table>
<thead>
<tr>
  <th>設定内容</th>
  <th>意味</th>
</tr>
</thead>
<tbody>
<tr>
  <td>parents=&#96;1,2&#96;</td>
  <td>記事用フォルダとウェブリンク用フォルダ両方から取得する</td>
</tr>
<tr>
  <td>sortBy=&#96;pub_date&#96;</td>
  <td>公開日でソートする</td>
</tr>
<tr>
  <td>total=&#96;3&#96;</td>
  <td>3件取得する</td>
</tr>
<tr>
  <td>sortDir=&#96;DESC&#96;</td>
  <td>降順でソート（新しいものが上にくる）</td>
</tr>
<tr>
  <td>tpl=&#96;chunk&#96;</td>
  <td>使用するチャンク名</td>
</tr>
<tr>
  <td>hideFolders=&#96;1&#96;</td>
  <td>親フォルダを表示対象にしない</td>
</tr>
</tbody>
</table>

<p>そしてチャンクを以下のようにし、PHxファンクションを使用してドキュメントかウェブリンクかで表示内容を変えます。プレースホルダ[+type+]がドキュメントの場合は<em>document</em>、ウェブリンクの場合は<em>reference</em>となるのでそれをもとに条件式で判定します。</p>

<p><em>注意</em><br />
以下の例はうまく動作しません。</p>

<pre><code>[+phx:if=`[+type+]`:is=`reference`:then=`[+description+]`:else=`[+content:limit=`500`+]`+]
</code></pre>

<p>これでドキュメントのときは内容（[+content+]）の最初の500文字を、ウェブリンクの場合は説明文（[+description+]）を表示できる・・・と思ってたらできませんでした。色々試行錯誤しているうちに、どうやら[+type+]の中にオブジェクトのタイプがちゃんと取れるときと取れないときがあることがわかりました。</p>

<p>結局、[+type+]を別の場所で一度使用してやるとPHxファンクションの中でも使用できるようになることを発見。以下のようにHTMLのコメント部で一度表示するとうまくいきます。なぜかはわかりませんが。</p>

<p><em>一応の解決策</em></p>

<pre><code>&lt;!-- this is [+type+] --&gt;
[+phx:if=`[+type+]`:is=`reference`:then=`[+description+]`:else=`[+content:limit=`500`+]`+]
</code></pre>

<p>Dittoのソースとか追っかければ理由はわかるかもしれないけど、今までPHPはほとんどノータッチだったので、とりあえず動いたということでよしとします。</p>
]]></content>
 <id>http://blog.garden-place.jp/oborobeer/:2:108</id>
</entry><entry>
 <title type="html"><![CDATA[[MODx]アクセス権限管理の注意点]]></title>
 <link rel="alternate" type="text/html" href="http://blog.garden-place.jp/oborobeer/item_68.html" />
 <author>
  <name>obanetty</name>
 </author>
 <updated>2008-02-04T08:41:16Z</updated>
 <published>2008-02-04T17:41:16+09:00</published>
 <content type="html"><![CDATA[<p>備忘録的に書いておこう。</p>

<h3>MODxにおけるユーザのアクセス権設定</h3>

<p>MODxのアクセス権というものには以下の２通りの設定がある</p>

<ol>
<li>マネージャ（管理画面）へのアクセス権</li>
<li>ウェブサイト全体へのアクセス権</li>
</ol>

<p>マネージャ画面のユーザタブ内にある５つのメニュー(MODx ver0.9.6)は上記のどちらを設定するかによって以下のように使い分ける必要がある。</p>

<table>
<thead>
<tr>
  <th>メニュー</th>
  <th>用途</th>
</tr>
</thead>
<tbody>
<tr>
  <td>ユーザ管理</td>
  <td>マネージャ</td>
</tr>
<tr>
  <td>ウェブユーザ</td>
  <td>ウェブサイト全体</td>
</tr>
<tr>
  <td>権限管理</td>
  <td>マネージャ</td>
</tr>
<tr>
  <td>マネージャへのアクセス許可</td>
  <td>マネージャ</td>
</tr>
<tr>
  <td>ウェブからのアクセス許可</td>
  <td>ウェブサイト全体</td>
</tr>
</tbody>
</table>

<h3>1. マネージャへの権限管理・アクセス許可について</h3>

<ul>
<li>「権限管理」は何ができるか（新規作成、編集、削除、管理情報参照、設定変更など）を決める</li>
<li>「マネージャへのアクセス許可」はどこにアクセスできるか（ドキュメントグループごと）を決める</li>
</ul>

<p>アクセス許可がなくてはそもそも見えないが、アクセス可能なドキュメント（見えるドキュメント）に対して何ができるかは権限管理で設定するということ。</p>

<h3>　2. ウェブからのアクセス許可</h3>

<ul>
<li>会員制サイトのようにログインしないと見れないドキュメントなどを設定する</li>
<li>会員にも複数の種類を作成して参照できるドキュメントを設定できる</li>
</ul>

<h3>設定上の注意</h3>

<p>マネージャ、ウェブどちらにおいてもユーザ/ドキュメントグループ　リンクの設定をしなければドキュメントは全て全員が参照できる。しかし、一つでも設定してしまうとそれ以外のグループは参照できなくなっているコンテンツが出てきたりするので注意が必要。</p>
]]></content>
 <id>http://blog.garden-place.jp/oborobeer/:2:68</id>
</entry><entry>
 <title type="html"><![CDATA[[MODx]MODxのSEO対策は優秀？]]></title>
 <link rel="alternate" type="text/html" href="http://blog.garden-place.jp/oborobeer/item_70.html" />
 <author>
  <name>obanetty</name>
 </author>
 <updated>2008-01-31T11:25:59Z</updated>
 <published>2008-01-31T20:25:59+09:00</published>
 <content type="html"><![CDATA[<p>僕は別の場所でちょっとしたRuby言語を紹介する連載（<a href="http://garden-place.jp/tech/ruby-prog.html">プログラマよ、Rubyで輝け！</a>）などしているのですが、そこではサイト構築にMODxを使用しています。
で、僕の連載している内容はというと、これまた中身スカスカで大したことなくて（ｵｲ）、とりあえずコンテンツの数を増やすために書いてる（だからｵｲ）、みたいな程度なのですが、先日アクセス解析で面白いことがわかりました。</p>

<p>「ruby ハッシュ変数」のキーワードでGoogle検索からたどり着いた人がいたので、何気なくそのキーワードで検索してみたのですが、なんと検索結果第一位です！（2008/1/31現在）。</p>

<p><img src="http://blog.garden-place.jp/media/2/20080131-google1_2.jpg" width="533" height="272" alt="第一位！" title="第一位！" /></p>

<p>「え～～～！！」</p>

<p>て感じでした。
もしかしてMODxってとんでもないSEO対策能力を持っているのでは・・・と思ったのもつかの間。
検索結果が330件しかないことに気づく・・・。</p>

<p><img src="http://blog.garden-place.jp/media/2/20080131-google2.jpg" width="369" height="65" alt="330件・・・" title="330件・・・" /></p>

<p>Rubyの世界ではあまりハッシュ変数とかって言い方しないのね。。。
さて、そろそろ飲むか。</p>

<h3>追記</h3>

<p>「MODx アクセス解析」のようなキーワードでここにたどり着いた人へ。</p>

<p>そのサイトではslim statを使用してアクセス解析しています。だけどデフォルトでは検索キーワードの日本語が文字化けしたり、色々めんどくさかったです。今はさらにGoogle Analyticsも追加して、こちらのほうがいい感じ。これで十分ではないかと思っています。</p>
]]></content>
 <id>http://blog.garden-place.jp/oborobeer/:2:70</id>
</entry>
</feed>