Archive for 4月, 2010

MacのZipファイルがWindowsで解凍できないとき

「イラレのファイル送ってね」とお願いしたら、ZIPファイルのURLを教えられて、ダウンロードしたのはいいんだけど、解凍してみたらエラーばりばりで涙目ってこと、ないですか?
 
あります。それはたぶん、Macで付けられたファイル名に半角:とか/、*が入っているせいです。
 
そんなときは、ここ(Macから送られたzipファイルのトラブル例と対処)を読んで McUnzip でファイル名を変換してから解凍しましょう。
 
McUnzipのインストールは前述のページに書いてあるままだとうまくいかないので、ここ(Macで作られたzipを解凍しても文字化けしないとってもナイスなMcUnzipの話)を見て、順々にやりましょう。
Rubyから入れるのはハードルが高いと思いますが、Rubyは触っておいて損はないですから、がんばって。

白地図ソフト

これ(白地図 KenMap Ver8.4)いいよ。
Windows用のソフトだけど、使い方簡単だし、いろいろできて便利。Good!!

可変グリッドレイアウト

可変グリッドレイアウトは絶対使うのでメモ。
ここ(可変グリッドレイアウトのjQueryプラグイン書いたよ)のが一番いいらしい。(どこで見たか忘れたけど、そういう評判)

jQueryを使った画像エフェクトのまとめのまとめ

ここ(37 Fresh jQuery Image And Gallery Display Solutions)には、37個ものすばらしいツールがあります。
使ったことがあるのは、この3つ。少ない。

  • 7. FancyBox
  • 25. jQuery Panel Gallery Plugin
  • 32. The jQuery Cycle Plugin

 
ここ(jQueryのアニメーション関連いろいろまとめ)やここ(画像ポップアウト・イメージギャラリー・スライドショー|jQuery plugin|Ajax|PHP & JavaScript Room)も幅広くまとまっています。
 
ここ(四方に分割スライドする画像エフェクトSliding Door)は使いどころが難しいけど、一応メモ。

vertical-alignのこと

ここ(vertical-alignの使い方【css tips】)を読んで、味噌汁で顔洗って出直してこい!
というくらい、わかりやすく書かれていますが、自分でやろうとして複数<p>タグでどうしてもうまくいかず、position:absoluteで逃げてしまいました。ヘタレです。

ブラウザの高さに応じたフッターの表示

見てる環境でフッターの位置が変わるのは気持ち悪いという人がそばにいるので、対応してみました。
そもそも、content が終わってからの footer だから、ブラウザの高さなんて関係ないんじゃというような正論は言わない約束で。(背景画像が1500pxくらいあって、contentの高さと背景はマッチしていないという前提)


var h = document.documentElement.clientHeight;
var y = (document.documentElement.scrollTop > 0) ? document.documentElement.scrollTop : document.body.scrollTop;
jQuery("#footer_entry").css("top", h+y-30+"px");

div#footer_entry {
	position:absolute;
	top:0px;
	left:595px;
}

expression()使えばなんとかなるのは知ってますけど、IE6は意図的に排除してます。
本ちゃんの div#footer は、display:none で消してしまうか、そもそも書かないということで。

カテゴリ+タグで表示

カテゴリ一覧を表示するとき、あるタグが付いているものだけ表示させたいことってありますよね?
例えば、”flower/arrange/antique/”みたいなカテゴリがあって、これをさらに”selection”と”library”に分けたいと。
普通にやれば、”flower/arrange/antique/selection”と”flower/arrange/antique/library”にすればいいんだけど、”library”は”selection”を含んでいると。
あ、だったら、”flower/arrange/antique/selection”と”flower/arrange/antique”でいいじゃんということか。かーいーけーつ!
 
という解決方法もありますが、テンポラリな”selection”チョイスをするためだけにもう一段サブカテゴリを作るのはどうかと。
クイック編集で変更するときもカテゴリは階層化されて表示されないので、間違いやすいけど、タグに”select”とか付けておくだけなら楽だし。というような用途があったとして(我田引水的に)。
 
“selection”と”library”を分けるには、”library”の場合だけ、URLに”?lib”とかを付けておいて、($_GET["lib"] == NULL)で判断するというのがオススメ。あと、”selection”の場合は

if ($_GET["lib"] == NULL) {
  query_posts(array('category__in' => $cat, 'tag_slug__and'=> 'select', 'posts_per_page' => 8));
  if (have_posts()) {
    while (have_posts()) {
      the_post();

query_posts()に配列で引数を渡してやるのがミソです。”&tag=文字列”というパラメータもあるのですが、バグなんでしょうか、効かないですね。
この場合、子カテゴリがない前提で書いてますけど、子供があるんだったら、こんな風にやればいいそうですよ。

$include_cats = explode( '/', $cat . get_category_children( $cat ) );
$args = array(
  'category__in' => $include_cats,
  'tag__and' => array( 12 )
);
query_posts( $args );
$wp_query->query_vars['cat'] = $cat;

※ こちら(query_postsでカテゴリとタグ両方での絞り込み)で勉強しました。
※ 大元のページはこっち(テンプレートタグ/query posts)。

カテゴリの取得&投稿の表示数

WordPressのことです。
get_the_category()なんかでやるのが普通ですが、category.phpのなかで普通じゃないことをやったりすると、get_the_category()だとカテゴリがとれなくなるときがあるので、汎用的に取る方法。

$uri  = $_SERVER["REDIRECT_URL"];	// "/items/category/blog/page/2"
$url  = explode("/", $uri);	// 0="", 1="items", 2="category", 3="blog", 4="page", 5="2"

こんな感じでURIをぶった切ればカテゴリが取れるよねということ。
“/page/2″が付いているのは2ページ目を取得するときのURLはこういう風になるよという例です。
 
あと、ブログは1ページ5件表示したいけど、商品一覧は1ページ20件表示で、○○は○件表示でみたいにカテゴリによって表示件数が変わる場合、表示設定だけじゃダメですよね。

query_posts($query_string.'&posts_per_page=5');
if (have_posts()) {
  while (have_posts()) {
    the_post();

query_posts()に posts_per_pageを付けて再実行させてやるっつうことでOK。
なんとなく、if (have_posts()) の下に入れたくなるけど(表示するものがあるときだけやればよくね?)、そうすると、2ページ目、3ページ目にいった場合、have_posts()は表示設定で決められた件数分だけページをカウントして、有る無しを判断するので、下に入れるのはNGです。(8件投稿があって、表示設定が10件で、posts_per_page=3の場合、1ページ目はいいけど、2ページ目にいったところで11件目はないよということになる)
 
余談。データがないときはどうするか。カテゴリ・リンクだけ先に作っておいて中味がまだないとき(いずれ埋まる前提)、先々使わなくなる「ありません」画面を作るのはしゃくだなというとき。

if ($cat === NULL) {	// 表示データがない場合はTOPへ飛ばす
?>
<meta http-equiv="Refresh" content="0; URL=">
<title> - </title>



&lt;?php
} else {

こんな風にしてTOPへ飛ばしちゃいます。楽ちんですね。

いろんなサイズの画像URLを取得

function small_image($url, $siz = "medium") {
  $attachments = get_children(array('post_parent' =&gt; get_the_ID(), 'post_type' =&gt; 'attachment', 'post_mime_type' =&gt; 'image', 'orderby' =&gt; 'menu_order'));
  $attachments_count = count($attachments);
  foreach ($attachments as $key =&gt; $value) {
    if ($attachments[$key]-&gt;guid == $url) {
      return wp_get_attachment_image_src($key, $siz);	// "thumbnail","medium","large","full"
    }
  }
  return false;
}

the_post()したあとで使うこと。そうしないと、get_the_ID()がちゃんと値を返さないから。(当たり前)
引数($url)には、オリジナル・サイズ(fullサイズ)の画像URLをセットしておく。
記事に紐づいた画像は1つとは限らないので、なんらかの方法で画像を特定できないと困るということと、基本的にカスタム・フィールドに画像を登録して使うことを想定しているのでこういう仕様になってます。
サイズはサムネイル(”thumbnail”)、中(”medium”)、大(”large”)、フルサイズ(”full”)で、指定しなければ中サイズを返します。
戻り値は配列で、$ret[0]=そのサイズの画像URL、$ret[1]=幅px、$ret[2]=高さpxです。
使い方はこんな感じ。

$image = small_image(post_custom('cf_image_1'));  // カスタムフィールドから画像URLをセット
if ($image !== false) {
  &lt;a href=&quot;"&gt;
  &lt;img src=&quot;" width="" height="" /&gt;
  </a>
}

 
参考したページ:画像URLの取得画像ファイルの情報を取得する2.5 How to create a category template for a gallery ?WordPress2.5~2.6 サムネイル画像を取得して表示カスタムフィールドに登録した画像のサムネールやらを取得する。WordPress 2.1 のアタッチメント API

Tipsいろいろメモ

こういうPHPの挙動をちょっと試したいときは、codepadがオススメ。(<?php と ?> でくくって、ちゃんと echoしないと出力はされないよ)
 
PHPで単語の最初の文字を大文字にする ・・・ ucwords($str)


 
PHPで数字を3桁でカンマ区切りにする ・・・ number_format($num)


 
PHPで配列の最初と最後の要素をとる ・・・ reset/end


« 前ページへ次ページへ »