2012年8月アーカイブ

やりたかったことは以下の通り。

  1. あるプルダウンメニューで選択を変えると、 他のプルダウンメニューの選択状態などが変わる
  2. その変更内容は、DBから取得したい

<制約条件>
・Ajax(発音はエイジャックス)とかSmartyとか流行りのことは知らない

ということなのだが、
「よくわからないけどなんとかできるだろー」
とか適当に始めてみたところ、
かなりの罠があって、ひっかかりまくった。

解決するに当たり、先人の方々の解決メモに
大変お世話になったので、
私も罠の内容と解決策をメモしておく。


当初の方針は以下のようなものだった。

A. 「プルダウンメニューの選択を変えると処理が始まる」は
Javascriptを使う(selectタグのonChange())
B. Aの内容を元に、サーバサイド言語(ここではPHP)でDBとやりとりする
C. DBから取得した内容を元に、Javascriptで
他のプルダウンメニューの選択状態を変更する

しかし、問題が続発した。

問題1 AとBの連携:Javascript→PHPの処理呼び出し?

Aは、selectタグに仕込む。


<select id="id1" onChange="function()">

みたいな感じ。

このfunction()はJavascriptの外部ファイルとかで定義しておく。

Bは、PHPでDBと会話すれば良く、
これは調べればいくらでも出てくるので問題ない。

ところが、AとBの流れを考えると、

Aで呼び出されるJavascriptの関数から、
BのPHPでやる一連の処理を呼び出さなければならない

でもJavascriptからPHPを呼び出すのってどうやるの?

調べても、なんかできなさそうな感じだった。

<解決策>

form(HTML)→Javascript→PHP
はなんか無理そうだったので、
form(HTML)→PHP⇄Javascript
とした。

ベースの処理はPHPにする。
でないとDBとの会話ができない。
で、PHPにJavascriptのコードを吐かせて
Javascriptの処理を実行する、
みたいな感じ。

やり方はこちらを参照のこと。
PHPとJavaScriptの連携 - PHPプログラミング解説
PHP TIPS - 12. JavaScriptをPHPで記述しよう:ITpro

要は、下のようにしてPHPにJavascriptをお話ししてもらう。


print<<<EOF
<script type="text/javascript">
〜Javascriptでやりたいこと〜
</script>
EOF;

引数は、手抜きしてoptionのhiddenで渡す。

<トリガー>
onChangeだとJavascriptしか呼び出せないので、

<form method="POST" action="hogehoge.php">

みたいにしてphpファイルを呼び出すことにした。

ただこれだと、ボタンを押すと発動するのだが、
プルダウンメニューの変更では発動しない。
かつ、hogehoge.phpにページ遷移してしまうので、
元ページの他のプルダウンメニューを変更できなくなってしまう。

要は、プルダウンメニュー変更でhogehoge.phpを呼び出しつつも、
ページ遷移したくない。

調べたら、なんかできた。
値だけ送信してページは遷移させないためには? - CGI - 教えて!goo


<form target="fr1" action="hogehoge.php">
<select id="id1" onChange("this.form.submit()")>

として、その前あたりに


<iframe name="f1" width=0 height=0 style="visibility:hidden"></iframe>

みたいなフレームを仕込む、というやり方。
ページ遷移もなく、あたかもonChangeでPHPを呼び出している
ような感じになった。

これで第一ハードルクリア。

問題2 BとCの連携:PHP→Javascriptの処理呼び出し?

なんとかonChangeっぽくプルダウンメニュー変更でPHPの処理を発動し、
DBからデータを取り出すところまではできた。

しかし、その内容で他のプルダウンメニューの変更をする場合、
「PHPでDBから取得した内容をJavascriptに渡す」
ということが必要になる。

元のページ(HTML)で


<script type="text/javascript" src="hogehoge.js">

みたいな感じで呼び出しておいたのだけど、PHPの処理中に
「そんな関数知らね」
とかエラーが。もう意味わかんない。

<解決策>

PHPのファイル(hogehoge.php)の最初にも


print<<<EOF
<script type="text/javascript" src="hogehoge.js"></script>
EOF;

みたいにしてJavascriptの外部ファイルを読み込ませておく。
(むしろ呼び出し元のHTMLの方には不要)

これは、
「formで呼び出されたhogehoge.phpの世界」
で起きていることなので、
「元のHTMLの世界」
で呼び出しておいても関係ないのですな。
あらうっかり!

ページ遷移しない細工をしていたので、
気づくのに手間取ってしまった。

ともあれ、これでOK。

PHPの処理内で、自作のJavascriptの関数を呼び出せる。
呼び出し方は以下のような感じ。引数も渡せる。


print<<<EOF
<script type="text/javascript">
kansuu($var1);
</script>
EOF;

受けるJavascript側はこんな感じ。


function kansuu(var1){
〜やりたい処理〜
}

書くまでもないか?

問題3 他のプルダウンメニューの選択状態が変えられない

これで、だいたいやりたいところはできた。


  • onChangeっぽくプルダウンメニュー変更でPHPを呼び出し

  • PHPでDBからデータ取得

  • その内容をJavascriptの処理に渡す

最後の詰めで、Javascriptで他のプルダウンメニューの
選択状態を変えようと思ったのだけど、
なんかピクリともしない。なんで?

いつも通り


document.getElementById()

みたいに指定していると
「そんなの見つかりません」
とおっしゃる。

???

<解決策>

hogehoge.phpは、
ページ遷移を避けるために作ったフレーム内で動いている。
なので、同じフレーム内を指している


document.getElementById('id')

ではなく、


parent.document.getElementById('id')

としてやらないといけない。
うへ〜。罠だらけ。

ちなみに、プルダウンメニューの選択状態を変更をするには、


parent.document.getElementById('id').selectedIndex = the_index;

みたいにする。
私は、これ以外のやり方ではできませんでした。

the_indexは、がんばって取得する。

まとめ

  • PHPとJavascriptの連携はかなり強力
  • JavascriptからPHPを呼び出すのではなく、 PHPを走らせその中でJavascriptのコードを吐かせる
  • onChange()っぽく.phpファイルを呼び出すこともできる
  • PHP内でJavascriptの外部ファイルも読み込める

なんか結構なんでもできるな、というのが印象。
ただ、処理速度とかそういうのは考えていないので、
その辺りはえらい人になんとかしていただけるとうれしい。

ちなみに、この一連の制約はDBと会話するから発生していて、
例えばCSVから読み込むのでよければ、
こんなめんどくさいことは不要で、Javascriptだけでできた。

てか、Ajax(発音は以下略)使えばできるんでしょ?知らないけど。


お世話になったサイト
PHPとJavaScriptの連携 - PHPプログラミング解説
PHP TIPS - 12. JavaScriptをPHPで記述しよう:ITpro
PHP入門
フォームからの入力 | PHP Labo

皆さんの拍手が私のモチベーションです。
励ましのコメントも送れるよ!→

<最後に追記あり>

今だけかもしれないが、Safari6.0になってから、
Safariを起動すると、前回閉じたタブの内容が再現されず、
新しいタブだけのキレイさっぱりとした状態になっていて、困った。

ということで、いくつか試してみた。

ショートカットを設定

Safari6_setting1.png

Safari6_setting2.png

「システム環境設定」→「キーボード」→「キーボードショートカット」
→「アプリケーション」→「+」→アプリ一覧からSafariを選択
→「メニュータイトル」に「最後のセッションの全ウインドウを開く」と入力
→「キーボードショートカット」に好きなショートカットキーを設定
(ここでは⌘+Option+O)

これで、毎回Safariを起動したら、⌘+Option+O すれば、
前回閉じたときのタブが再現される。

メニューから開くより、ちょっとだけ早いよ。ちょっとだけ...

Glimsを使う

「Glimsは?」という意見をいただき、入れてみた(version 1.0 build 34)。
Glims for Safari | www.MacHangout.com

Safari6_setting3.png

確かに「起動時にタブを復元」という項目があり、
喜び勇んでONにしてみたところ、なにも起きなかった。
なんで???


現状の結論としては、ショートカットの設定が一番早いものの、
Glimsが動作しないのはバグっぽい?ので、
解消されればGlimsを使う方が早いでしょう。

終わり。

<追記>

wakabaさんに解決策を教えていただいた。

こちらです。
SweetP Productions - Extensions

機能拡張をインストールすると、こんな感じ。
ちょいと有効にするやり方がわかりにくい。

SafariRestore1.png

「有効にする」をしてから、下の四角にチェックを入れると下の画面に移る。

SafariRestore2.png

このチェックを入れると、セッション復元が有効になる。

ということで、みんなの力を合わせればなんとかなる、
という良い例でしたね。(主に他力のみ)

ウソです。wakabaさんありがとうございました!

皆さんの拍手が私のモチベーションです。
励ましのコメントも送れるよ!→

web拍手にお答え 2012年4月〜6月

はい!
ということで、読者の方と管理人をゆるやかにつなぐ、
双方向コミュニケーションコーナー「web拍手にお答え」です!

今回は大幅拡張サービスで、3ヶ月分まとめてお届けします!太っ腹!!

【速報】虚構新聞さん更新一時停止(追記あり)へのweb拍手
同感です。冗談の通じない人間が増殖してるって事かなー?哀しさを通り越して怒りを感じるレベル。

なんか追記があります。
釣られた〜。



【速報】虚構新聞さん更新一時停止(追記あり)へのweb拍手

誤植発見w:困ったりもすりが→困ったモスラが

ありがとうございます。
きちんとモスラに修正しました(ウソ)



第4世代iPod Touchをとことん使い倒す!私のiPod Touch活用法へのweb拍手

iPod Touchを導入しようか否か迷っている通りすがりの者です。
「第4世代iPod Touchをとことん使い倒す!私のiPod Touch活用法」が大変ためになりました。
ありがとうございます。
あと...拍手画像かわいいですね。

お役に立ってなによりです。
iPod touchはいい子なので、ファンが増えるとうれしいです。

拍手画像は実は何種類かあって、
コンプリートすると 何も起きない 小さな幸せが
訪れると言い伝えられています。



最近見た、吹いた画像たちへのweb拍手

水飲み器じゃない?

最近見た、吹いた画像たちへのweb拍手
2×2マトリクス みずの + みき = 水飲み器 (給水器) ですね。 家のハムスターに小さいのを使っています。

なんと。みんな天才なんじゃないの?

じゃあこれはどうだ!
うむらうす's tumblr



「Macオンラインウエア情報検索」をアップデートしました2012へのweb拍手

あなたのアプリのレビューが見たいんだ!(笑

え?ワタシ?
ええ、まぁ、そのうちね。うん。



返戻率へのweb拍手

普通は返戻率って読めないよね・・・たぶん

へんれいりつへんれいりつへんれいりつへんれいりつへんれいりつ
へんれいりつへんれいりつへんれいりつへんわいりつへんれいりつ

10回書いたから忘れないぞ!
(本当は1回であとはコピペ)
(ちなみに1文字だけ間違いあり)



「プレビュー.app」で複数のPDFや画像をひとつのPDFファイルにまとめるへのweb拍手

ハック情報、助かりました。有り難うございます!

Mountain Lionになってちょっと簡単になった気がするので、
やる気に勢いが出たら更新します。


ということで、暑い真っ盛りですが、
皆さんも冷たいものをお腹を壊さない程度に摂取しつつ、
乗り切りましょう!

ちなみに最近自分で読み返してみておもしろかった記事はこちらです。
カプチーノのシナモン棒の使い道


皆さんの拍手が私のモチベーションです。
励ましのコメントも送れるよ!→

ブックマークレット《AppHtmlメーカー》のリンク切れ対応版リリースとWordPress一括変換方法 | 代助のブログ

ということで、画像のリンク切れがいくつか発生していた様子。
当サイトもAppHtmlメーカーを使わせてもらっているため、
画像リンク切れが多発していたので修正。

上のサイトではWordpressでの置換の方法が紹介されていますが、
Movable Typeでも、検索と置換はできますね。

apphtml_link_replace.png

↑こんな感じ。

修正したエントリーに対しては、例によって再構築が必要。
「全部再構築」をした方が早いのか、
置換したエントリーだけを、手動で再構築した方が早いのかは、
サイトによってそれぞれだと思われます。
(当サイトの場合は後者の方が全然早い)

ということで、見えないフリをしていた問題が解決。
よかったよかった!

皆さんの拍手が私のモチベーションです。
励ましのコメントも送れるよ!→

いろんなことを一気にやったので、
環境に慣れるのが大変。
整理がてらメモしておくの巻。

Snow LeopardからLionを飛ばしてMountain Lionに。しかも上書きインストール

Time Machineあるからいいか、みたいなノリで。わぁ適当。

周辺機器ドライバなどの対応

Canon DR-P215(スキャナ)も特に問題なく使えた。 Canon MG6230(プリンタ複合機)も特に問題なく使えた。 ソフトは MP Navigator EX 5.0。 ああよかった!(確認しないでアップグレードした)

Day One

Day One 1.9.2(¥1,000)App
カテゴリ: ライフスタイル, 仕事効率化
販売元: Bloom Built, LLC - Bloom Built, LLC(サイズ: 13.1 MB)

OSX版をver1.7、iOS版をver1.8にアップデートしたら、
iOSとMacの同期がなんだかおかしくなった。
解決にやや手間取ったので別に記事を書く予定。

アプリの対応

よく使うアプリは特に問題なく使えている。
Butler(ver4.1.7)
Day One
MacJournal
Metanota
夜フクロウ
ClamXav Sentry
Handbrakeも動作している様子。

Purge Memory

先日作った Purge Memory はMountain Lionでもガッツリ働いてくれている。
メモリ解放アプリPurge Memoryを作ってみた(要Xcode)

フォアグラウンドの処理を5秒くらい奪われるのがちょっと困る。
これでLionだけ動作未確認。

Safari6.0

なんか変わったような気もするけど、あんまりわからない。
iCloud対応といってもMountain Lion2台持ってないし。
タブビューは好きな感じなので、
早速Magic Trackpadにジェスチャー割り当てた。

Launchpad

ランチャーは未だにButlerでがんばっている私です。
アプリ以外にも、AppleScriptなども起動できるようになれば、
移行できるのですが、どうなんでしょう。

フルスクリーンモード

何はともあれ ⌘+Ctrl+F してみる。
対応していないアプリの場合は、 Mega Zoomer。
(サイトがなくなってる?i use thisからダウンロードはできるようです
 →Mega Zoomer - i use this on mac os x

これでフルスクリーンモード体制は万全!

メモ

タグが使えないので、Simplenoteの代替にはなりえない。
もし今後対応したら、ちょっと考えちゃうかも。

通知センター

あんまし通知されてないからよくわかんない。
とりあえずGrowlを通知センターに流し込む、Hissを入れてみた。
Growlの通知をMountain Lionの通知センターへ流し込む『Hiss』 - Macの手書き説明書

カレンダー

ついiCalを探してしまう...
Googleカレンダーとの同期は、
そのまま引き継がれている感じ。

リマインダー

私はWunderlistで暮らしているため、あまり影響ありません。
Todo管理アプリWunderlistを使ってGTDするときのオススメ設定


ここまで読み返してみると、なんか役に立たない情報ばかりだなぁ。
まぁいいか。次行こう。


Magic Trackpad関連

Magic Mouseも良いのだけど、
狭いマウスの上で三本指スワイプとかすると、
マウス本体が動いてしまい、ムキー!となりがち。

で、ついカッとなって買ってみた。

2本指でスクロールするのがちょっと慣れない

ノートPC持ち歩かない人なので、
トラックパッドにそもそも慣れてない、という。
(Magic Mouseでは1本指でスクロールだった)

3本指タップで「調べる」が結構便利

キーボードのショートカットは ⌘+Ctrl+D とかで覚えにくい。

ジェスチャーの設定

とりあえずシステム環境設定の「トラックパッド」は見ておくべき。
私はこんな感じ。

trackpad_setting.png

「Mission Control」「DashboardとExpose」
「フルスクリーンアプリケーション間をスワイプ」は
全て4本指スワイプに変更。
3本指スワイプは別に使いたいので。

BetterTouchToolがMountain Lionに対応したっぽい(ver0.785使用)

システム環境設定はいじった上で、BetterTouchToolですよ。
これでジェスチャーをいじりまくれる!

しかし、BetterTouchToolを終了して起動すると、
そのたびに上下のスクロール方向が逆になる。なぜだ。

真ん中クリックはどうすればいいんだ!

「リンクを新しいタブで開く」のこと。
二本指クリックで右クリックのメニューを表示させて選択、
とかやってられない。

そこで、とりあえず三本指クリックを割り当ててみた。
これでいいのかな...?


ということで、殴り書きではありますが、
以上を持ちまして、私からの生存報告と替えさせて頂きます。
ありがとうございました。


<参考>
200種類も機能が増えたと評判の「Mountain Lion」を超ていねいに解説してみた(エキサイトレビュー) - エキサイトニュース
広田稔のMacでいきます(8):独断と偏見で選ぶ!! Mountain Lionで感じた「10の便利」 (3/3) - ITmedia +D PC USER
ほこほこ、ね » OS X Mountain Lionの新機能〜タイトルバーで名前を変更

皆さんの拍手が私のモチベーションです。
励ましのコメントも送れるよ!→

ガッツゴリラ

この最も大事な位置にガッツポーズをするゴリラが表示されていることに何の意味があるのだろうか?答え:何もありません。こんなところまでお読みいただきありがとうございました。

Macオンラインウエア情報検索

Loading
Macオンラインウエア情報検索についてはこちらを参照ください。 →「Macオンラインウエア情報検索」をアップデートしました2012

このアーカイブについて

このページには、2012年8月に書かれたブログ記事が新しい順に公開されています。

前のアーカイブは2012年7月です。

次のアーカイブは2012年9月です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

広告

アーカイブ