<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
		xmlns:xhtml="http://www.w3.org/1999/xhtml"
>

<channel>
	<title>Webシステム開発の株式会社フラッツ &#187; やかん部</title>
	<atom:link href="http://www.flatz.jp/archives/category/yakan/feed" rel="self" type="application/rss+xml" />
	<link>http://www.flatz.jp</link>
	<description>フラッツはWebシステム開発専門の会社です。お客様のお悩み・ご要望に沿ったWebシステム開発プランをご提案いたします。お気軽にご相談ください。</description>
	<lastBuildDate>Tue, 27 Jul 2010 09:04:31 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://www.flatz.jp/archives/category/yakan/feed" />
		<item>
		<title>Zen Cartで新しいページを作成する</title>
		<link>http://www.flatz.jp/archives/2855</link>
		<comments>http://www.flatz.jp/archives/2855#comments</comments>
		<pubDate>Wed, 20 Jan 2010 00:00:16 +0000</pubDate>
		<dc:creator>taniguchi</dc:creator>
				<category><![CDATA[ZenCart]]></category>
		<category><![CDATA[ひとりごと]]></category>
		<category><![CDATA[やかん部]]></category>
		<category><![CDATA[技術情報]]></category>

		<guid isPermaLink="false">http://www.flatz.jp/?p=2855</guid>
		<description><![CDATA[谷口です。

とても今更なタイトルですが、初めてZen Cartに触れた人に新しいページの作成方法を説明するのは、意外と伝えることが多くて面倒だったりします。
最低限必要な操作だけでも出しておけば何かと便利かなと思いまとめてみました。]]></description>
			<content:encoded><![CDATA[<p>
</p><p>谷口です。</p>
<br />
<p>とても今更なタイトルですが、初めてZen Cartに触れた人に新しいページの作成方法を説明するのは、意外と伝えることが多くて面倒だったりします。<br />
最低限必要な操作だけでも出しておけば何かと便利かなと思いまとめてみました。</p>
<br />
<ol>
<li> 新規ページ用のmain_pageパラメータを決め、定数を定義する</li>
<li> ページ表示用のモジュールディレクトリを作成する</li>
<li> モジュールファイル、テンプレートファイル、言語ファイルを作成する</li>
</ol>
<br />
<p>最も単純なページ作成方法は以上です。（定番ページの追加はまさにこれだけ）</p>
<br />
<h4>1. 新規ページ用のmain_pageパラメータを決め、定数を定義する</h4>
<br />
<p>例えばhogeというページを作成することに決めたとします。<br />
定数の定義は、includes/filenames.php に追記してもできるのですが、より良い方法があります。<br />
includes/extra_datafilesディレクトリに設定ファイルを追加する方法です。</p>
<br />
<p>= includes/extra_datafiles/hoge.php</p>
<br />
<pre><code><br />
  define('FILENAME_HOGE', 'hoge');<br />
</code></pre>
<br />
<h4>2. ページ用のモジュールディレクトリを作成する</h4>
<br />
<p>includes/modules/pages/にhogeディレクトリを作成します。</p>
<br />
<pre><code><br />
 $ mkdir includes/modules/pages/hoge<br />
</code></pre>
<br />
<p>上記ディレクトリを作成したら、とりあえずheader_php.phpというファイルを作成し、テンプレートファイルを作成します。</p>
<br />
<pre><code><br />
 $ touch includes/modules/pages/hoge/header_php.php<br />
</code></pre>
<br />
<pre><code><br />
 $ touch includes/templates/TEMPLATE_DIR/templates/tpl_hoge_default.php<br />
</code></pre>
<br />
<p>※TEMPALTE_DIRは使用しているテンプレートのディレクトリに置き換えてください。</p>
<br />
<p>これでindex.php?main_page=hogeにアクセスすればメインコンテンツが何もないページが表示されます。</p>
<br />
<h4>3. モジュールファイル、テンプレートファイル、言語ファイルを作成する</h4>
<br />
<p>先ほど作成した2ファイルを作っていけばページが作成できるのですが、せっかくの多言語化されているのでその流儀にのっとって、言語ファイルで固定の文言を作成します。<br />
日本語の場合、hogeで使う言語ファイルを以下のパスに作成します。</p>
<br />
<p>includes/languages/japanese/hoge.php</p>
<br />
<p>次にincludes/modules/pages/hoge/header_php.phpで言語ファイルを読み込みます。</p>
<br />
<p>= includes/modules/pages/hoge/header_php.php</p>
<br />
<pre><code><br />
　require(DIR_WS_MODULES . zen_get_module_directory('require_languages.php'));<br />
</code></pre>
<br />
<p>あとは、テンプレートで使う固定の文言（見出しなど）をincludes/languages/japanese/hoge.phpに定数定義していけば、<br />
新しいページの作成準備完了です。</p>
<br />
<p>あとは、ページにアクセスしたときの動作をモジュールファイルに書いたり、好きなようにテンプレートファイルにデザインすれば完成です。<br />
ちなみに、テンプレートファイルで使用する変数（商品名など）はモジュールディレクトリにmain_template_vars.phpを作成してそこでセットしていく感じです。<br />
（header_php.phpで書いても良いですけどね･･･）</p>
<br />
<h3>最後に</h3>
<br />
<p>まとめてみて思ったのですが、これスクリプトにできますね･･･。作ったら公開しようかと思います。</p>

<img src="http://www.flatz.jp/?ak_action=api_record_view&id=2855&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.flatz.jp/archives/2855/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://www.flatz.jp/archives/2855" />
	</item>
		<item>
		<title>技術系のtweet &#8211; ～2010/01/14</title>
		<link>http://www.flatz.jp/archives/2832</link>
		<comments>http://www.flatz.jp/archives/2832#comments</comments>
		<pubDate>Mon, 18 Jan 2010 01:00:00 +0000</pubDate>
		<dc:creator>nasu</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Perl]]></category>
		<category><![CDATA[ひとりごと]]></category>
		<category><![CDATA[やかん部]]></category>
		<category><![CDATA[技術情報]]></category>
		<category><![CDATA[未分類]]></category>

		<guid isPermaLink="false">http://www.flatz.jp/?p=2832</guid>
		<description><![CDATA[twitterでの技術系つぶやきまとめ。Excel,perl,UNIX,MySQL,PHP,svn,vimなどその時々で見知ったこと、調べたことをつぶやいています。]]></description>
			<content:encoded><![CDATA[<p>
</p><p>那須です。</p>
<br />
<p>最近、その時々で調べたtipsをtwitterでつぶやいたりしてます。主に自分の備忘メモとして使っています。後日検索することがあるかといえば。。。今のところは特にないのですが、とはいえ埋もれてしまっていざというときに使えないのは残念なので、こちらにまとめておこうと思います。</p>
<br />
<p>私の全てのつぶやきは<a href="http://twitter.com/nasu">こちら</a></p>
<br />
<h3>Excel</h3>
<br />

<blockquote><p>
=COUNT(INDEX(1/(MATCH(A1:A39,A1:A39)=ROW(A1:A39)),0))　a1からa39の中でユニークな値の数を算出。理解できないけど、ひとまず動く #Excel<br />
</p></blockquote>
<p>
<br />
</p><p>1/MATCH() が未だによくわからないなぁ</p>
<br />
<h3>perl</h3>
<br />

<blockquote><p>
$SIG{INT}=&#8221;IGNORE&#8221;;$p=fork;if($p){wait;}else{$SIG{INT}=sub{$a=1};sleep 30;sleep 5;if($a){die}} SIGINTすると子プロセスの最初のsleepがリセットされる #perl<br />
perl -n -l -e &#8216;print +(split(/\t/))[2]&#8216; filename cut使えって話 #unix<br />
perl -n -l -e &#8216;print +(split(/\t/))[2]&#8216; filename タブ区切りの3列目だけ抽出 -n の使い道 #perl<br />
[perl] \b 単語境界　$&#038; マッチ変数　正規表現構文<br />
[perl] perl -i.bak -wnl -e &#8217;s/A/B/g; print&#8217; file 上書き編集<br />
[perl] -l 改行 -n 暗黙ループ -p 読み込みループ perl -wpl -e &#8221; file1 file2 イミフ<br />
</p></blockquote>
<p>
<br />
<h3>UNIX</h3>
<br />
</p>
<blockquote><p>
PAGER JLESSCHARSET=japanese /usr/bin/less -isr 日本語文字化けの時man.confにこれ書く。書けなければ man -C ~/man.conf とかする #unix<br />
1:06 PM Dec 25th, 2009 from web<br />
[bash] command 2> /dev/null STDERRの出力を捨てる。<br />
[unix]grep -L 文字列が含まれないファイル一覧を返す GNU grep<br />
[unix]find . -type f -print | xargs ls -lrdt | tail -l xargsの処理できる引数の数を越えると期待通りにいかない<br />
</p></blockquote>
<p>
<br />
<h3>MySQL</h3>
<br />
</p>
<blockquote><p>
[MySQL] INSERT INTO table () VALUES () ON DUPLICATE KEY UPDATE を使ったときに、UPDATE側が作動すると affected rows が 2になる。これにはめられました。<br />
[MySQL] order by で DESCとASCが混在するとインデックス利きません<br />
[mysql]auto_incrementの解除にはalter table changeを使う<br />
</p></blockquote>
<p>
<br />
</p><p>affected rowsの件は本当にハメられたましたよ。というかこれMySQLのバグじゃないのかな&#8230;replace into が affected rows = 2 になるのは、実質 delete &amp; insert かけるので正しいと思うけど、insert on duplicate はinsert失敗してupdateかかるわけだし、affected rows = 1 が正しい気がする</p>
<br />
<h3>PHP</h3>
<br />

<blockquote><p>
[PHP]foreach内ではbreakが効かないらしい。初めて知った<br />
</p></blockquote>
<p>
<br />
</p><p>よく考えたら、知っていた気もする。</p>
<br />
<h3>SVN</h3>
<br />

<blockquote><p>
[svn] function svnvimdiff() { tmp=[file]; vimdiff $1 `svn cat $1 > $tmp ;ls $tmp;` &#038;&#038; rm -f $tmp; } vimdiffで名前付パイプがうまく機能しないとき用<br />
[svn] vimdiff [file] < (svn cat [file]) svnの差分をvimdiffで見る<br />
[svn] svn diff --diff-cmd /usr/bin/diff -x "-b -E" svnでのdiffコマンドの変更とかに<br />
</p></blockquote>
<p>
<br />
</p><p>svnvimdiff 重宝してます。</p>
<br />
<h3>vim</h3>
<br />

<blockquote><p>
[vim] :s/./&#038;\r/g　行を一文字区切りで改行する。「あ\nい\nう\nえ\nお\n&#8230;」のような列を作るのに便利<br />
[vim]:set noro リードオンリモードの解除。sambaとかにある共有ファイル開くときとかデフォルトで-Rしといて必要なときにこれ使うようにしようかなぁ<br />
[vim]:compiler perl &#8220;-I&#8221;が指定できないのかな…<br />
[vim]:set list 制御文字表示。常時はうざいから確認のときに使う<br />
</p></blockquote>
<p>
</p>
<img src="http://www.flatz.jp/?ak_action=api_record_view&id=2832&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.flatz.jp/archives/2832/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://www.flatz.jp/archives/2832" />
	</item>
		<item>
		<title>テンプレートモンスターのZen Cart 用テンプレートをZen Cart1.3.0.2で使う方法</title>
		<link>http://www.flatz.jp/archives/2713</link>
		<comments>http://www.flatz.jp/archives/2713#comments</comments>
		<pubDate>Wed, 13 Jan 2010 00:00:03 +0000</pubDate>
		<dc:creator>taniguchi</dc:creator>
				<category><![CDATA[ZenCart]]></category>
		<category><![CDATA[ひとりごと]]></category>
		<category><![CDATA[やかん部]]></category>
		<category><![CDATA[技術情報]]></category>

		<guid isPermaLink="false">http://www.flatz.jp/?p=2713</guid>
		<description><![CDATA[
谷口です。

テンプレートモンスターというサイトをご存知でしょうか？
WebテンプレートやFLASHのテンプレートなどを販売しているサイトです。

ここはZen CartやWordPressといったオープンソースのWe [...]]]></description>
			<content:encoded><![CDATA[<p>
</p><p>谷口です。</p>
<br />
<p><a href="http://www.templatemonster.jp/">テンプレートモンスター</a>というサイトをご存知でしょうか？<br />
WebテンプレートやFLASHのテンプレートなどを販売しているサイトです。</p>
<br />
<p>ここはZen CartやWordPressといったオープンソースのWebアプリケーションも扱っていて、<br />
急ぎでサイトを立ち上げたい場合には非常に便利なサイトです。<br />
（Zen Cartはデフォルトのテンプレートがあれなので･･･）<br />
多少は微調整することもあると思いますが、一からデザインを作るよりは断然早く立ち上げられます。</p>
<br />
<p>ですが･･･Zen Cartのテンプレートで検索すると･･･どれもこれも「higher Zen Cart 1.3.8 only」と･･･Zen Cart1.3.0.2用のテンプレートがないんです･･･。</p>
<br />
<p>実際にテンプレートを購入して、日本語公式版の1.3.0.2に適用してみると･･･当然のようにエラーが出ます。<br />
エラーが出ている部分であれば、エラー内容を見てなんとか対処できると思います。<br />
undefined functionがほとんどなので、1.3.8からその関数を適当な関数ファイルにコピペしてやれば大体うまく動いてくれました。</p>
<br />
<p>難点なのが定数と変数の洗い出しです。。。<br />
万全を期すのであれば、以下のような手順で確認するのが良いと思います。</p>
<br />
<ol style="font-weight:bold;">
<li>テンプレートファイル内、1.3.8からコピペした関数内で使われる変数・定数をすべて抜き出す。</li>
<li>抜き出した変数・定数が1.3.0.2で定義されているか調べます。（ Zen Cartの定数はDBとファイル両方探さないといけません。）</li>
<li>1.3.0.2で使われていれば、そのまま。使われていなければ、1.3.8に合わせて定義・設定する。</li>
</ol>
<br />
<p>テンプレートによって調整量は変わると思いますが、これはなかなかしんどい調整です。。。</p>

<img src="http://www.flatz.jp/?ak_action=api_record_view&id=2713&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.flatz.jp/archives/2713/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://www.flatz.jp/archives/2713" />
	</item>
		<item>
		<title>[Zen Cart] security_patch_v138_20090619適用後の注意点補足</title>
		<link>http://www.flatz.jp/archives/2794</link>
		<comments>http://www.flatz.jp/archives/2794#comments</comments>
		<pubDate>Wed, 13 Jan 2010 00:00:00 +0000</pubDate>
		<dc:creator>taniguchi</dc:creator>
				<category><![CDATA[ZenCart]]></category>
		<category><![CDATA[やかん部]]></category>
		<category><![CDATA[技術情報]]></category>

		<guid isPermaLink="false">http://www.flatz.jp/?p=2794</guid>
		<description><![CDATA[谷口です。

[Zen Cart] security_patch_v138_20090619適用の2つの注意点でsecurity_patch_v138_20090619パッチ適用時の注意点を記載しました。
補足として、修正コードを見れば分かりますが、フォームになっていなくてもただのリンクでもactionパラメータが含まれている場合も、そのリンクが動作しなくなります。この場合は、リンクをフォームに変更してやれば解決します。
ただ、修正対象のリンクがフォーム内にある場合、ちょっと面倒ですね･･･。]]></description>
			<content:encoded><![CDATA[<p>
</p><p>谷口です。</p>
<br />
<p><a href="http://www.flatz.jp/archives/2652">[Zen Cart] security_patch_v138_20090619適用の2つの注意点</a>でsecurity_patch_v138_20090619パッチ適用時の注意点を記載しました。<br />
補足として、修正コードを見れば分かりますが、フォームになっていなくてもただのリンクでもactionパラメータが含まれている場合も、そのリンクで実行される動作が行われなくなります。この場合は、リンクをフォームに変更してやれば解決します。</p>
<br />
<p>ただ、修正対象のリンクがフォーム内にある場合、ちょっと面倒ですね･･･。<br />
例えば、以下のようなリンクの場合です。</p>
<br />
<pre><code style="line-height: 0.8em; font-size: 12px;"><br />
&lt;form&gt;<br />
・・・<br />
&lt;a href="< ?php echo zen_href_link(FILENAME_HOGE, 'action=save'); ?>"&gt;<br />
SAVE<br />
&lt;/a&gt;<br />
・・・<br />
&lt;/form&gt;<br />
</code></pre>
<br />
<p>こういった場合はJavaScriptでFormオブジェクトを生成してPOSTするような関数を作成するとかが良いですかね。<br />
実証はしてませんが･･･。</p>

<img src="http://www.flatz.jp/?ak_action=api_record_view&id=2794&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.flatz.jp/archives/2794/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://www.flatz.jp/archives/2794" />
	</item>
		<item>
		<title>[Clip]2010-01-08</title>
		<link>http://www.flatz.jp/archives/2761</link>
		<comments>http://www.flatz.jp/archives/2761#comments</comments>
		<pubDate>Fri, 08 Jan 2010 05:03:07 +0000</pubDate>
		<dc:creator>hisasue</dc:creator>
				<category><![CDATA[やかん部]]></category>
		<category><![CDATA[clip]]></category>

		<guid isPermaLink="false">http://www.flatz.jp/?p=2761</guid>
		<description><![CDATA[

     twitter創立者の新事業「Square」、iPhoneを使ってクレジット決済が可能に 
     Nexus One Phone &#8211; Web meets phone.
     MT4j &#038; [...]]]></description>
			<content:encoded><![CDATA[<p>
<ul>
    <li> <a class="taggedlink" href="http://iphones.cx/news/twittersquareiphone/" target="_blank">twitter創立者の新事業「Square」、iPhoneを使ってクレジット決済が可能に </a></li>
    <li> <a class="taggedlink" href="http://www.google.com/phone/?locale=en_US&amp;s7e=" target="_blank">Nexus One Phone &#8211; Web meets phone.</a></li>
    <li> <a class="taggedlink" href="http://www.mt4j.org/mediawiki/index.php/Main_Page" target="_blank">MT4j &#8211; Multitouch For Java</a></li>
    <li> <a class="taggedlink" href="http://jp.techcrunch.com/archives/20091214rockyou-hack-security-myspace-facebook-passwords/" target="_blank">3200万人の個人情報漏洩―RockYouのハッカー侵入への対応は最悪</a></li>
    <li> <a class="taggedlink" href="http://googleblog.blogspot.com/2009/12/making-urls-shorter-for-google-toolbar.html" target="_blank">Official Google Blog: Making URLs shorter for Google Toolbar and FeedBurner</a></li>
    <li> <a class="taggedlink" href="http://ec.kbmj.com/index.html" target="_blank">エレコマ &#8211; エレコマとは？｜KBMJ</a></li>
    <li> <a class="taggedlink" href="http://sites.google.com/site/fudist/Home/qfixhowm" target="_blank">QFixHowm &#8211; vim用howmプ&gt;ラグイン (fudist)</a></li>
</ul>
</p>
<img src="http://www.flatz.jp/?ak_action=api_record_view&id=2761&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.flatz.jp/archives/2761/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://www.flatz.jp/archives/2761" />
	</item>
		<item>
		<title>[Clip]2009-12-11</title>
		<link>http://www.flatz.jp/archives/2717</link>
		<comments>http://www.flatz.jp/archives/2717#comments</comments>
		<pubDate>Fri, 11 Dec 2009 04:58:15 +0000</pubDate>
		<dc:creator>hisasue</dc:creator>
				<category><![CDATA[やかん部]]></category>
		<category><![CDATA[clip]]></category>

		<guid isPermaLink="false">http://www.flatz.jp/?p=2717</guid>
		<description><![CDATA[
ホーム (fudist)

Official Google Blog: Relevance meets the real-time web

米Microsoft、「Windows Azure」で「Ruby on Ra [...]]]></description>
			<content:encoded><![CDATA[<p>
<h3><a class="taggedlink" href="http://sites.google.com/site/fudist/Home" target="_blank">ホーム (fudist)</a></h3>
<br />
<h3><a class="taggedlink" href="http://googleblog.blogspot.com/2009/12/relevance-meets-real-time-web.html" target="_blank">Official Google Blog: Relevance meets the real-time web</a></h3>
<br />
<h3><a class="taggedlink" href="http://enterprise.watch.impress.co.jp/docs/news/20091203_332995.html" target="_blank">米Microsoft、「Windows Azure」で「Ruby on Rails」に対応 &#8211; Enterprise Watch</a></h3>
<br />
<h3><a class="taggedlink" href="http://k-tai.impress.co.jp/docs/news/20091117_329492.html" target="_blank">シャープ、Android端末を来年前半投入へ &#8211; ケータイ Watch</a></h3>
</p>
<img src="http://www.flatz.jp/?ak_action=api_record_view&id=2717&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.flatz.jp/archives/2717/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://www.flatz.jp/archives/2717" />
	</item>
		<item>
		<title>SymfonyでマルチプルFKの利用がしたい件(Symfony1.2-Doctrine)</title>
		<link>http://www.flatz.jp/archives/2626</link>
		<comments>http://www.flatz.jp/archives/2626#comments</comments>
		<pubDate>Thu, 26 Nov 2009 01:37:53 +0000</pubDate>
		<dc:creator>amakata</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[symfony]]></category>
		<category><![CDATA[やかん部]]></category>
		<category><![CDATA[技術情報]]></category>
		<category><![CDATA[Doctrine]]></category>
		<category><![CDATA[propel]]></category>
		<category><![CDATA[SQL]]></category>

		<guid isPermaLink="false">http://www.flatz.jp/?p=2626</guid>
		<description><![CDATA[
こんにちは、天方です。

最近、久しぶりにマルチプルFKが使いたくなりました。（本当は使いたくないのですが&#8230;）
Symfony1.2のDoctrineでマルチプルFKをしようとしたら、うまくいきませんでした [...]]]></description>
			<content:encoded><![CDATA[<p>
</p><p>こんにちは、天方です。</p>
<br />
<p>最近、久しぶりにマルチプルFKが使いたくなりました。（本当は使いたくないのですが&#8230;）<br />
Symfony1.2のDoctrineでマルチプルFKをしようとしたら、うまくいきませんでした。（注：Propelの場合はaddJoinではできないっぽいです。）<br />
新規で設計するならいいんですが、過去の遺産にアクセスする時には必要なので、なにかしら対応方法があるとうれしいのです。</p>
<br />
<p>例えば、下記のように、idとsub_idがあるテーブルをリレーションでつなげる設定を書きたいのです。（実際にはこれはうまく動かなかったです&#8230;）</p>
<br />
<pre>
Parent:<br />
  columns:<br />
    id:<br />
      type: integer(4)<br />
      notnull: true<br />
    sub_id:<br />
      type: string(14)<br />
      notnull: true<br />
Child:<br />
  columns:<br />
    id:<br />
      type: integer(4)<br />
      notnull: true<br />
    parent_id:<br />
      type: integer(4)<br />
      notnull: true<br />
    parent_sub_id:<br />
      type: string(14)<br />
      notnull: true<br />
 relations:<br />
    Parent:<br />
      local: parent_id, parent_sub_id<br />
      foreign: id, sub_id<br />
      type: one<br />
</pre>
<br />
<p>私の環境だと、</p>
<br />
<pre><code>  $q = $parent-&gt;createQuery('p')<br />
  $q-&gt;innerJoin('p.Child c');<br />
  $q-&gt;execute();<br />
</code></pre>
<br />
<p>と書きたいコードが実行時エラーになります。</p>
<br />
<p>とりあえず、下記のような感じでSQLを記述することでで対応しました。</p>
<br />
<pre><code>$con = Doctrine_Manager::connection();<br />
$stmt = $con-&gt;prepare('SELECT<br />
                          id, sub_id<br />
                        FROM parent p INNER JOIN child c ON p.id = c.parent_id AND p.sub_id = c.parent_sub_id');<br />
$stmt-&gt;execute(array());<br />
</code></pre>
<br />
<p>これだとSQLを書かなきゃいけないし、結果がオブジェクトにマッピングされてなくて、他と統一性が失われてしまうので面倒なのですが、いい方法はないだろうか&#8230;。</p>

<img src="http://www.flatz.jp/?ak_action=api_record_view&id=2626&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.flatz.jp/archives/2626/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://www.flatz.jp/archives/2626" />
	</item>
		<item>
		<title>Zen Cartでメール送信グループの追加をする</title>
		<link>http://www.flatz.jp/archives/2613</link>
		<comments>http://www.flatz.jp/archives/2613#comments</comments>
		<pubDate>Wed, 25 Nov 2009 00:00:44 +0000</pubDate>
		<dc:creator>taniguchi</dc:creator>
				<category><![CDATA[ZenCart]]></category>
		<category><![CDATA[やかん部]]></category>
		<category><![CDATA[技術情報]]></category>

		<guid isPermaLink="false">http://www.flatz.jp/?p=2613</guid>
		<description><![CDATA[谷口です。
Zen Cartの小ネタです。
Zen Cartにはメール送信機能があります。
今回はここの顧客選択のプルダウンメニューに顧客グループを追加する方法を紹介します。]]></description>
			<content:encoded><![CDATA[<p>
</p><p>谷口です。</p>
<br />
<p>Zen Cartの小ネタです。</p>
<br />
<p>Zen Cartにはメール送信機能があります。</p>
<br />
<p><img src="http://www.flatz.jp/wp-content/uploads/2009/11/send_mail-300x181.jpg" alt="send_mail" title="send_mail" width="300" height="181" class="alignnone size-medium wp-image-2614" /></p>
<br />
<p>今回はここの顧客選択のプルダウンメニューに顧客グループを追加する方法を紹介します。</p>
<br />
<p><img src="http://www.flatz.jp/wp-content/uploads/2009/11/pulldown-300x79.jpg" alt="pulldown" title="pulldown" width="300" height="79" class="alignnone size-medium wp-image-2615" /></p>
<br />
<p>方法はquery_builderテーブルにデータを登録するだけです。<br />
具体的にはquery_stringに対象となる顧客グループを抽出するSQL文をセットする形です。<br />
例えば、男性会員だけに送りたい場合、下記のようなSQLを実行すれば「男性会員」というメニューが顧客選択のプルダウンに追加されます。</p>
<br />
<pre><code style="line-height:1em;"><br />
insert into query_builder<br />
(query_category,query_name,query_description,query_string)<br />
values <br />
("email", <br />
 "男性会員", <br />
 "男性にメールを送ります。", <br />
 "select <br />
   customers_firstname, <br />
   customers_lastname, <br />
   customers_email_address <br />
  from TABLE_CUSTOMERS <br />
  where customers_newsletter = '1' and customers_gender='m'"<br />
);<br />
</code></pre>
<br />
<p>ちなみに、query_categoryを&#8221;email,newsletters&#8221;とすると、メルマガ送信時にもこのメニューを出すことができます。</p>
<br />
<p>東京都の顧客だけにメールを送るとか、ある商品を注文した人だけにメールを送るとかしたいときに非常に便利です。<br />
SQLの知識が必要ですので、ショップ運営者には敷居が高いかもしれませんが･･･</p>

<img src="http://www.flatz.jp/?ak_action=api_record_view&id=2613&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.flatz.jp/archives/2613/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://www.flatz.jp/archives/2613" />
	</item>
		<item>
		<title>[Zen Cart] security_patch_v138_20090619適用の2つの注意点</title>
		<link>http://www.flatz.jp/archives/2652</link>
		<comments>http://www.flatz.jp/archives/2652#comments</comments>
		<pubDate>Wed, 25 Nov 2009 00:00:12 +0000</pubDate>
		<dc:creator>taniguchi</dc:creator>
				<category><![CDATA[ZenCart]]></category>
		<category><![CDATA[やかん部]]></category>

		<guid isPermaLink="false">http://www.flatz.jp/?p=2652</guid>
		<description><![CDATA[谷口です。

Zen Cart本家では今年6月下旬に、日本語版では8月に発表されたセキュリティパッチがあります。これを適用すると動作しなくなるモジュールがあったり、カスタマイズした機能が使えなくなったりして困ったことはありませんか？
その問題の解決方法を紹介しようと思います。（今更感がありますが。。。）
<a href="http://www.zen-cart.com/forum/showthread.php?t=130161">Zen Cart.comフォーラム Security Announcement -- security_patch_v138_20090619.zip</a>
<font color="red">※上記のパッチは非常に重要なパッチですので、まだ適用していない方は必ず適用しましょう。</font>]]></description>
			<content:encoded><![CDATA[<p>
</p><p>谷口です。</p>
<br />
<p>Zen Cart本家では今年6月下旬に、日本語版では8月に発表されたセキュリティパッチがあります。これを適用すると動作しなくなるモジュールがあったり、カスタマイズした機能が使えなくなったりして困ったことはありませんか？<br />
その問題の解決方法を紹介しようと思います。（今更感がありますが。。。）<br />
<a href="http://www.zen-cart.com/forum/showthread.php?t=130161">Zen Cart.comフォーラム Security Announcement &#8212; security_patch_v138_20090619.zip</a><br />
<font color="red">※上記のパッチは非常に重要なパッチですので、まだ適用していない方は必ず適用しましょう。</font></p>
<br />
<h3>このパッチはどういった脆弱性を防ぐものなのか？</h3>
<br />
<p>簡潔に説明しますと、管理画面のCSRF攻撃を防ぐパッチです。<br />
CSRF攻撃につきましては、<a href="http://ja.wikipedia.org/wiki/%E3%82%AF%E3%83%AD%E3%82%B9%E3%82%B5%E3%82%A4%E3%83%88%E3%83%AA%E3%82%AF%E3%82%A8%E3%82%B9%E3%83%88%E3%83%95%E3%82%A9%E3%83%BC%E3%82%B8%E3%82%A7%E3%83%AA">クロスサイトリクエストフォージェリ &#8211; Wikipedia</a>などを参考にしていただければと思います。</p>
<br />
<h3>注意点</h3>
<br />
<ol>
<li> 動かなくなる機能があった場合の対処</li>
<li> 本パッチでCSRF攻撃を防ぎきれない可能性のチェック</li>
</ol>
<br />
<h4>動かなくなる機能があった場合の対処</h4>
<br />
<p>formタグを生成する際にzen_draw_form関数を使っていない場合に起こる可能性があります。<br />
もし、動かなくなる機能があったら、直接formタグを書いている場所が無いかチェックしてみてください。<br />
そういった箇所があればビンゴです。formタグをzen_draw_form関数を使うようにすれば、機能するようになると思います。<br />
直らなければ、このパッチのせいではないかもしれません。</p>
<br />
<h4>本パッチでCSRF攻撃を防ぎきれない可能性のチェック</h4>
<br />
<p><font color="red">※こちらは主にZen Cartの管理画面をカスタマイズしてご利用の場合が対象です。</font></p>
<br />
<p>さて、何をチェックすれば良いかというと、まず本パッチで展開されるファイルの一つに、以下のファイルがありますので、その中身を見てみましょう。<br />
admin/includes/init_includes/init_security_patch_v138_20090619.php</p>
<br />
<p>この16行目以降が本パッチの肝です。</p>
<br />
<pre><code style="line-height: 0.8em; font-size: 12px;"><br />
16: if (isset ( $_GET ['action'] ) &#038;&#038; in_array ( $_GET ['action'],<br />
 array ('save', 'layout_save', 'update', 'update_sort_order', <br />
'update_confirm', 'copyconfirm', 'deleteconfirm', 'insert', <br />
'move_category_confirm', 'delete_category_confirm', <br />
'update_category_meta_tags', 'insert_category' ) ))<br />
17: {<br />
18:   if (strpos ( $PHP_SELF, FILENAME_PRODUCTS_PRICE_MANAGER ) === FALSE<br />
 &#038;&#038; strpos ( $PHP_SELF, FILENAME_PRODUCTS_OPTIONS_NAME ) === FALSE <br />
 &#038;&#038; (strpos( $PHP_SELF, FILENAME_CURRENCIES ) === FALSE)<br />
 &#038;&#038; (strpos( $PHP_SELF, FILENAME_LANGUAGES ) === FALSE)<br />
 &#038;&#038; (strpos( $PHP_SELF, FILENAME_SPECIALS ) === FALSE)<br />
 &#038;&#038; (strpos( $PHP_SELF, FILENAME_FEATURED ) === FALSE)<br />
 &#038;&#038; (strpos( $PHP_SELF, FILENAME_SALEMAKER ) === FALSE))<br />
19:   {<br />
20:     if ((! isset ( $_SESSION ['securityToken'] )<br />
 || ! isset ( $_POST ['securityToken'] ))<br />
 || ($_SESSION ['securityToken'] !== $_POST ['securityToken']))<br />
21:    {<br />
22:      zen_redirect ( zen_href_link ( FILENAME_DEFAULT, '', 'SSL' ) );<br />
23:    }<br />
24:  }<br />
</code></pre>
<br />
<p>16行目のin_array関数の第2引数の配列で指定されているactionパラメータ以外はCSRF対策が有効になりません。<br />
そのため、上記以外のactionパラメータを付けているフォームがあったら、in_array関数の第2引数の配列にそのaction名を追加しましょう。<br />
また、CSRF対策が必要にもかかわらずaction名のないフォームがあったら、有効になるようにaction名を付けましょう。</p>
<br />
<p>CSRF対策パッチの注意点を書きましたが、他のパッチでも何かあればまた記事にします。</p>

<img src="http://www.flatz.jp/?ak_action=api_record_view&id=2652&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.flatz.jp/archives/2652/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://www.flatz.jp/archives/2652" />
	</item>
		<item>
		<title>[Clip]2009-11-13</title>
		<link>http://www.flatz.jp/archives/2645</link>
		<comments>http://www.flatz.jp/archives/2645#comments</comments>
		<pubDate>Fri, 13 Nov 2009 06:39:52 +0000</pubDate>
		<dc:creator>hisasue</dc:creator>
				<category><![CDATA[やかん部]]></category>
		<category><![CDATA[clip]]></category>

		<guid isPermaLink="false">http://www.flatz.jp/?p=2645</guid>
		<description><![CDATA[

     Incsub、WordPressプラグインのApp Storeを目指すWP Pluginsを提供開始
     Route 477 &#8211; 大規模Railsサイトのための新しいHTTPサーバ、Uni [...]]]></description>
			<content:encoded><![CDATA[<p>
<ul>
    <li> <a class="taggedlink" href="http://jp.techcrunch.com/archives/20091112wp-plugins/" target="_blank">Incsub、WordPressプラグインのApp Storeを目指すWP Pluginsを提供開始</a></li>
    <li> <a class="taggedlink" href="http://route477.net/d/?date=20091110#p01" target="_blank">Route 477 &#8211; 大規模Railsサイトのための新しいHTTPサーバ、Unicorn</a></li>
    <li> <a class="taggedlink" href="http://k-tai.impress.co.jp/docs/news/20091110_328017.html?ref=rss" target="_blank">Androidが1秒で起動、ユビキタスが組み込み向け起動高速化技術 &#8211; ケータイ Watch</a></li>
    <li> <a class="taggedlink" href="http://golang.org/" target="_blank">The Go Programming Language</a></li>
    <li> <a class="taggedlink" href="http://cacoo.com/" target="_blank">Cacoo &#8211; Web上で図の作成とリアルタイムコラボレーション</a></li>
    <li> <a class="taggedlink" href="http://www.bestwebframeworks.com/" target="_blank">Best Web-Frameworks » Find and compare PHP, Ruby, Python, Java, JS and CSS Frameworks</a></li>
    <li> <a class="taggedlink" href="http://internet.watch.impress.co.jp/docs/news/20091106_326862.html?ref=rss" target="_blank">米Google、大型ショッピングサイト向け検索サービス開始 -INTERNET Watch</a></li>
    <li> <a class="taggedlink" href="http://www.mobilecrunch.com/2009/10/30/smartphone-showdown-iphone-3gs-vs-motorola-droid/" target="_blank">Smartphone Showdown: iPhone 3GS vs Motorola Droid</a></li>
</ul>
</p>
<img src="http://www.flatz.jp/?ak_action=api_record_view&id=2645&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.flatz.jp/archives/2645/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://www.flatz.jp/archives/2645" />
	</item>
	</channel>
</rss>
