アクセス数: | 今日: | 昨日:   記事数:996

HOMESITE MAPBOOKMARKTAG CLOUD

Tag:PHP

WordPress - メディアライブラリWordPress 3.0 日本語版が6/23にリリースされ、アップデートした方は色々触っている事だと思います。

以前書いた、記事投稿時に画像を挿入する際フラッシュ形式ではなくポップアップにして連続投稿する方法ですが、3.0になって前回の方法では使えなくなってしまいました。
私は画像が1・2枚ならフラッシュ形式、それ以上ならポップアップ形式かFTPに直上げの方法を取っており、私だけではなくこのポップアップ形式を使っている人が少なからずいるので、再度調べてみました。

今回変更箇所多すぎ。

なので、私の変更したファイルを画像込みでZIPにしてアップしてます。
『media-button-image_f.gif』、『media-button-image_p.gif』、『media.php』が中に入っています。
2つの画像は『wp-admin/images/』の中に。
media.php は『wp-admin/includes/』の中に放り込めば一先ず使えます。

投稿画面がこんな感じになります。
WordPress 3.0

左がフラッシュ形式、右がポップアップ形式です。
WordPress 3.0WordPress 3.0

ダウンロードはこちらから。

「いや、俺は自分で変更する!」
ってな方は、以下に変更箇所を全て書いておりますので頑張ってください。

余計な説明は入れていません。
私も深くは分かっておらず、「こうしたから出来た」ってなだけです。^^;

ファイルは言わずもがな、『media.php』の変更後は UTF-8 で保存してください。
続きを読む

WordPress - メディアライブラリ過去記事、
【WordPress】記事投稿時に画像を貼るのをフラッシュではなくポップアップにする方法
【WordPress】記事投稿時に画像を貼るのをフラッシュではなくポップアップにする方法2
ですが、WordPress 3.0 の『wp-admin/includes/media.php』を見ると少々ややこしく・・・と言うか前よりは簡単になっているんでしょうが、以前のやり方では上手くいきません。

しかし、無事解決方法を解読。
その方法とは!

・・・明日書きまーす。w

WordPressちょっと気になって調べたら案外簡単に出来たので、備忘録として書いておこうと思います。
今回行ったのは、特定のクラス(CSS)を加えたイメージタグの抽出方法です。

私が記事を書く時は、必ず頭にイメージを入れています。
(今日のシリーズやニコニコ紹介などは別)

このイメージは以下のように記述しています。

<img src="http://kome-suki.net/・・・" class="entry_thumb" />

他にも画像を入れる時があり、先頭に持ってきた画像(class=”entry_thumb”)だけを抽出したい。
これが出来れば、検索画面や関連記事や最近の記事などでサムネ付きというのが表示できるようになります。
プラグインや他の方法もググったら出てきましたが私的にいまいち合わなく、それらを踏まえていった上でもの凄く簡単に出来ました。
リニューアル後の表示変更を考えていたので、これは覚えておかなくてはいけない方法です。

search.phpなどを開き、記事のループを行っている中に以下のコードを書きます。

<?php
  $cnt = get_the_content();
  if (substr($cnt, 0, 1) == "<") {
    preg_match("/<img(.*?)class=\"entry_thumb\" \/>/", $cnt, $thumb);
    echo $thumb[0];
  } else {
  }
?>

解説
2行目 $cnt に記事内容を代入するんですが、『the_content()』だと記事が全て表示されてしまうので、必ず『get_the_content()』にする。

3行目 記事の1文字目が『<』じゃないと何も無しを返します。
6行目の else を書かないと、『Array』と表示されてしまうので注意。

4行目 PHPの『preg_match』関数で該当するタグ・クラスを書いて、$thumb に代入する。
『”/~~~/”』とダブルクォーテーション・スラッシュで囲むのが一般的らしいので、それ以外のダブルクォーテーション・スラッシュの前には¥(Macはバックスラッシュ)を記述する。

5行目 代入された $thumb[0] を echo ではき出す。

6~7行目 上記の例だと何も書いてませんが、『no image』みたいな画像を書き足してもOK。

画像の大きさを変えたかったら、<div>~~~</div>で囲ってCSSで変えた方が早いかもしれません。


取り合えず私個人用なので、別の方法(a や他のタグ)では試していませんが、応用すれば色々いけると思います。
勿論WordPress以外にも使えると思います。

Tag : , , ,

WordPress - メディアライブラリ@yoidoreoさんからの要望でやってみました。

WordPressで画像を記事内に挿入する際、以前紹介した『【WordPress】記事投稿時に画像を貼るのをフラッシュではなくポップアップにする方法』、『【WordPress】記事投稿時に画像を貼るのをフラッシュではなくポップアップにする方法2』を使っています。

私は画像が大量にある時には、画像に連番付けてFTPで上げてから、記事内にイメージタグをコピペして番号だけ手打ちしています。
@yoidoreoさんはそうではなく、メディアライブラリで全部上げてからポップアップ表示してリストから挿入しているらしいです。
で、挿入する際一々画像の詳細を表示してからじゃないと画像が挿入できません。
詳細の一番下に『投稿に挿入』ボタンがあるんですから。

要は何を行ったかと言うと、

・ 画像のリスト表示部にも挿入ボタンが欲しい。
・ ついでにリストに表示する数も増やしたい。
・ ついでにサムネイル画像の大きさも変えたい。
以上3つをやってみました。

結論から言うと、以下のようになります。
変更前
WordPress - メディアライブラリ

変更後
WordPress - メディアライブラリ

では変更方法です。

1画像のリスト表示部にも挿入ボタンが欲しい
詳細を表示した際にあるボタンをリスト部に持ってくるだけなので簡単なんですが、デザイン的に崩れたりしてしまうので、ちょっとだけ手を加える必要があります。
デザインなんか関係ねぇって人はいいんでしょうけど。

では、『wp-admin/includes/media.php』を開きます。
まずはボタンを設置する方法です。

media.php 1165行目~ (2.9.2の場合)
if ( $toggle ) {
  $class = empty($errors) ? 'startclosed' : 'startopen';
  $toggle_links = "
  <a class='toggle describe-toggle-on' href='#'>$toggle_on</a>
  <a class='toggle describe-toggle-off' href='#'>$toggle_off</a>";
} else {
  $class = 'form-table';
  $toggle_links = '';
}

上記のコード内に、ボタンを表示するコードを付け足します。
ついでにCSSも直接書いてみました。

media.php 1165行目~ (2.9.2の場合)
if ( $toggle ) {
  $class = empty($errors) ? 'startclosed' : 'startopen';
  $toggle_links = "
  <a class='toggle describe-toggle-on' href='#'>$toggle_on</a>
  <a class='toggle describe-toggle-off' href='#'>$toggle_off</a>
  <div style=\"float:right; margin:5px 10px 0 0;\"><input type='submit' class='button' name='send[$attachment_id]' value='" . esc_attr__( 'Insert into Post' ) . "' /></div>";
} else {
  $class = 'form-table';
  $toggle_links = '';
}

青色のコードがCSSなんですが、『float:right;』を入れないと、画像タイトルの上にボタンが来てしまいます。
見栄え悪いし、使いづらいかとも思います。

私はシングルクォーテーションよりダブルクォーテーションの方が好きなので『¥”』の書き方にしています。
Windowsの人は『¥』でいけますが、Macの人はバックシュラッシュになります。
素直にシングルクォーテーション( ’ )だけでもOKです。


2ついでにリストに表示する数も増やしたい
同じ『media.php』の 2 3 箇所を変更する必要があります。

media.php 1807行目(ボタンコード未挿入時) (2.9.2の場合)
add_filter( 'post_limits', $limit_filter = create_function( '$a', "return 'LIMIT $start, 10';" ) );

追記
上記の変更だけでは、ページを送った際10個ダブった表示になるので、もう1箇所変更しなければいけません。

media.php 1801行目(ボタンコード未挿入時) (2.9.2の場合)
$_GET['paged'] = isset( $_GET['paged'] ) ? intval($_GET['paged']) : 0;
if ( $_GET['paged'] < 1 )
  $_GET['paged'] = 1;
$start = ( $_GET['paged'] - 1 ) * 10;
if ( $start < 1 )
  $start = 0;
add_filter( 'post_limits', $limit_filter = create_function( '$a', "return 'LIMIT $start, 10';" ) );

media.php 1870行目(ボタンコード未挿入時) (2.9.2の場合)
'total' => ceil($wp_query->found_posts / 10),

上記の『 10 』を20や30にする事で、リストに表示される数が増えます。
同じ数にしないと表示が変になると思うので、同じにしておいた方が良いと思います。


3ついでにサムネイル画像の大きさも変えたい
リストに表示されているサムネイル画像の大きさは、CSSで変更しているらしいです。
サムネイル画像には以下のCSSが使われています。
.media-item .pinkynail {
  float: left;
  margin: 2px;
  max-width: 40px;
  max-height: 32px;
}

『max-width』と『max-height』の大きさを変更すれば良いだけです。
削除すると画像がそのままの大きさで表示されてしまうので、とんでもない事になります。
適度な大きさにしておいた方が良いと思います。(50×50 pxとか)

変更したい方は『wp-admin/wp-admin.css』を開きます。
スペースが入っていない軽量版のCSSなので、『.media-item .pinkynail』で検索すれば該当するCSSクラスが引っかかると思います。

IE版のCSSは別ファイルになります。

wp-admin/css/ie.css 414行目~ (2.9.2の場合)
* html .media-item .pinkynail {
  height: 32px;
  width: 40px;
}

上記の大きさを『wp-admin.css』と同じにしましょう。
IE使ってない人は別に変更しなくても大丈夫だと思います。

100px × 100px とかにした人は分かると思いますが、画像に『float: left;』が入っていてPHPのソース内にはクリアータグが入っていません。
なので、メチャクチャな表示になると思います。
その場合は、『media.php』の以下の箇所にクリアータグを追加します。

media.php 1209行目(ボタンコード未挿入時)~ (2.9.2の場合)
$display_title
<table class='slidetoggle describe $class'>

上記タグの間に以下のクリアータグを追加します。

media.php 1209行目(ボタンコード未挿入時)~ (2.9.2の場合)
$display_title
<div style=\"clear:both;\"></div>
<table class='slidetoggle describe $class'>


簡単に見ただけなので、何か問題があればコメントください。

WordPress & Twitter2日前からトップページのみにTwitter(@kome__suki)のつぶやきを表示させるようにしていました。
これはいつものRSSフィードを読み込んで表示させる方法を使用していたんですが、Twitterだけは上手く読み込んでくれません。
文字コードが何故か ASCII になってバケたり、30分経っても読み込まなかったりとメチャメチャです。
ブログ用のアカウント取ったってのに、そのブログにちゃんと表示してくれなくては意味がありません。
こちらのサイトも利用して試させてもらいましたが、やっぱりダメでした。
なので、TwitterのRSSだけはプラグインに頼った方が懸命です。

サイドバーにある @kuu_san のつぶやきは『Twitter Tools』というプラグインを使用しています。
多数のアカウント設定は出来ないので、別の『Tweetable』と言うプラグインを使用しました。

これは凄いです。
何が凄いって、Twitterでつぶやいた内容が瞬時に反映されます。
TweetDeck でつぶやき、すぐにブログをリロードしたら反映されていました。
この速さには驚きです。
RSSと言うより Twitterの公式サイトに登録するので、アプリと同じ感覚なんでしょうね。
管理画面上からつぶやいたりフォロワーのTLなんかも見れますが、私は表示させたいだけだったのでこの辺はノータッチです。

バージョンが上がって少々違いますが、登録などの仕方は以下のサイトを参考に。

Ryuzee.com
[wordpress]Twitter連携用プラグインTweetableが便利すぎる!

私がハマった点は『コールバックURL』を入力しなかった為、ドえらい手間が掛かりました。
上記ページ1枚目のスクリーンショットの所に『コールバックURL』が表示されているので、ちゃんと登録画面でコピペしましょう。
設定し直すと、すんなり登録できました。

後は表示させたい場所に以下のコードを加えればOK。
<?php tweetable_latest_tweets(10); ?>
『 10 』の数字は、表示させたい件数です。
他にもフォロワー数を表示させたり出来るみたいです。
詳しくはプラグインページの『Other Notes』に書かれています。(英語)


使えたとなると、後は私の大好きなカスタマイズのお時間です。
いじくるファイルは『tweetable.php』と『main_css.css』の2つです。
CSSファイルは2つあって、『admin_css.css』は管理画面上のCSSなので、これは触らない方が良いと思います。
管理画面なんて自分しか見ませんもんね。

以下のつぶやきを元にしてみます。
2010/5/5 03:00:51 【アニメ】けいおん!!がオリコン1・2位独占。 そして中の人を初めて見た。 http://bit.ly/ba5ZFj

プラグインをそのまま使うと、以下のように表示されます。
【アニメ】けいおん!!がオリコン1・2位独占。 そして中の人を初めて見た。 http://bit.ly/ba5ZFj
May 4, 2010 6:00

まずは日付を日本語表記にします。

tweetable.php 60行目 (Version: 1.1.8)
$date = date('F j, Y g:i', strtotime($latest['tweets'][$counter]['created_at']));
 ↓
$date = date('Y/n/d H:i', strtotime($latest['tweets'][$counter]['created_at'])+32400);

日付を西暦表示にし、GMT+9時間で日本時間に変更しています。

私は日時を前に持ってきたかったので、以下のように変更しています。

tweetable.php 61~63行目 (Version: 1.1.8)
echo '<span class="twitter_status">';
echo '<span class="status-text">'.make_clickable($latest['tweets'][$counter]['text']).'</span>';
echo '<span class="twitter_meta">'.$date.'</span>';
 ↓
echo '<span class="twitter_status">';
echo '<span class="twitter_meta">'.$date.'</span>';
echo '<span class="status-text">'.make_clickable($latest['tweets'][$counter]['text']).'</span>';

只単に62行目と63行目を入れ替えただけです。
170行目からも同じ記載がありますが、こちらは変更しなくても上手くいきました。
不安な人は、どちらも変更してた方が吉かもしれません。

ソースを見ると分かりますが、コードは以下のように出力されます。
(分かりやすいように改行しています)
<li class="tweetable_item">
  <span class="twitter_status">
  <span class="twitter_meta">2010/5/05 03:00</span>
  <span class="status-text">【アニメ】けいおん!!がオリコン1・2位独占。 そして中の人を初めて見た。 <a href="http://bit.ly/ba5ZFj" rel="nofollow">http://bit.ly/ba5ZFj</a></span>
  </span>
</li>

日付を囲っている『twitter_meta』には『display:block;』が入っているので、SPANであっても改行されてしまいます。
この辺は好みで『main_css.css』ファイルをいじってください。

私はバックに画像を入れているので全てコメントアウトして、テーマ内のCSSファイルに書き込んでいます。
その方が画像を使用した場合、絶対指定しなくて済むので楽です。


なるべくプラグインに頼らずにやろうと思いましたが、最初にも書いた通り TwitterのRSSだけはプラグインに頼った方が懸命です。

【WordPress】TwitterのRSSを表示させる方法

『【WordPress】TwitterのRSSを表示させる方法』をはてなブックマーク

Twitter昨日作ったブログ用のTwitterアカウントのつぶやきを、トップページのみ表示させました。
RSSをそのまま表示させるのには難があります。

1.Twitterからのフィードは、全文表示しかない。
2.文の頭にアカウント名が入る。
3.リンクはテキストのまま。(非リンク状態)
4.日時表示が日本向きではない。

たった1つのつぶやきに対し、上記の4つもの問題点があります。
その問題を解決させて表示させる方法です。

PHPでの基本的な表示方法は、例によってこちらの方法を使用しています。

1.Twitterからのフィードは、全文表示しかない。
RSSフィードからの情報は以下の通り。
『2010/5/3 00:23:40 【2ch】この精神科医に良い病院を教えてあげてください。 http://bit.ly/cZuTm0』を例にしています。

Array (
      [title] => kome__suki: 【2ch】この精神科医に良い病院を教えてあげてください。 http://bit.ly/cZuTm0
      [description] => kome__suki: 【2ch】この精神科医に良い病院を教えてあげてください。 http://bit.ly/cZuTm0
      [pubdate] => Sun, 02 May 2010 15:23:40 +0000
      [guid] => http://twitter.com/kome__suki/statuses/13250913673
      [link] => http://twitter.com/kome__suki/statuses/13250913673
      [summary] => kome__suki: 【2ch】この精神科医に良い病院を教えてあげてください。 http://bit.ly/cZuTm0
      )

6つになっているにも関わらず、被っている点が多いです。
今回は『description』と『pubdate』のみを使用します。

結果的に表示させたい箇所に書き込むコードは以下。(リスト表示にした場合)
<ul>
<?php
  $rss = fetch_rss('http://twitter.com/statuses/user_timeline/139088868.rss');
  $maxitems = 10;
  $items = array_slice($rss->items, 0, $maxitems);

  if (empty($items)) echo 'No items';
  else
    foreach ($items as $item) :
?>
  <li><?php
    $text = substr($item['description'],12);
    $text = ereg_replace("(https?|ftp)(://[[:alnum:]\+\$\;\?\.%,!#~*/:@&=_-]+)", "<a href=\"\\1\\2\" target=\"_blank\">\\1\\2</a>", $text);
    echo date("Y/n/j H:i", strtotime($item['pubdate'])+32400) . $text;
  ?></li>
<?php endforeach; ?>
</ul>


2.文の頭にアカウント名が入る。
『$text = substr($item['description'],12);』の部分です。
substrで12文字目からの指定をし、アカウント名を表示させていません。
アカウント名によっては、この『 12 』の数値が変わります。


3.リンクはテキストのまま。(非リンク状態)
『$text = ereg_replace(“(https?|ftp)(://[[:alnum:]\+\$\;\?\.%,!#~*/:@&=_-]+)”, “<a href=\”\\1\\2\” target=\”_blank\”>\\1\\2</a>”, $text);』の部分です。
テキスト内にURLが含まれると、テキストと同じリンクURLを貼る形になっています。


4.日時表示が日本向きではない。
ただ単に表示させると『Sun, 02 May 2010 15:23:40 +0000』になってしまいます。
これを日本表示向けにするのが『date(“Y/n/j H:i”, strtotime($item['pubdate'])+32400)』の部分です。
日本はGMT+9時間なので、date表示する時に『+32400(+9:00)』にしています。
strtotimeでタイムスタンプに変換した内容を、dateで任意の表示方法に変えています。
最後にの『$text』と一緒に表示(echo)させています。

Y = 4桁の年
n = 0無しの月(1~12)
j = 0無しの日(1~31)
H = 24時間制0付き(00~23)
i = 0付きの分(00~59)
秒を表示させたい場合は
s = 0付きの秒(00~59)

私は日時を赤で表示させていますが、その場合はこちら。
echo "<span style=color:#ff0000;>" . date("Y/n/j H:i", strtotime($item['pubdate'])+32400) . "</span> " . $text;
通常は『<span style=”color:#ff0000;”>』と『 ” (ダブルクォーテーション)』を使いますが、上手く表示しなかったので省いています。(結果オーライw)


以下は参考になったサイト。
[PHP-users 20308]自動リンク
ウェブシステム開発【Lucen@Wiki】
[PHP] RSSのpubDateを時間に変える方法
そふぃのphp入門
PHPスクリプト講座:GMTの有効利用

Tag : , ,

【WordPress】iTunesのRSSを表示させる方法

『【WordPress】iTunesのRSSを表示させる方法』をはてなブックマーク

iTunes & RSSiTunes Storeはトップ10やトップ25などのRSS配信をしています。
RSSリーダーで読む事も、WordPressではなくても表示させる事は可能です。
私がWordPressを使ってるってだけです。

WordPressでのRSS表示方法は以前書いた『【WordPress】外部RSSを取得して表示する方法』の方法を使っています。
この方法を使ってWordPress上に表示させてみます。
『sidebar.php』など、PHPファイルに書くのであれば何の問題もありませんが、ページを使って表示させる場合はPHPで書いていますので、以下のプラグインが必要になります。

Bluesome
Exec-PHP plugin for WordPress

このプラグインを入れると、記事内だろうがページ内だろうが、どこでもPHPを書く事が出来ます。

以下はWordPressのページを使って、無料ゲームアプリ トップ10を表示させています。

米が好き
App Store 無料ゲームアプリ トップ10

説明文の開閉はjQueryを使用しています。
では、サンプルページのように表示させる方法。

まず、以下のサイトでRSSフィードを取得します。
Apple – iTunes – RSS Generator
Apple - iTunes - RSS Generator

今回は『Japan / App / 無料 app / 10 / ゲーム』で取得しています。
ページを作成し、以下のコードを書きます。
<?php
  $rss = fetch_rss('http://ax.itunes.apple.com/WebObjects/MZStoreServices.woa/ws/RSS/topfreeapplications/sf=143462/limit=10/genre=6014/xml');
  $maxitems = 10;
  $items = array_slice($rss->items, 0, $maxitems);

  if (empty($items)) echo 'No items';
  else
    foreach ($items as $item) :
?>
~~~~~
<?php endforeach; ?>

取得したRSSフィードをコピペし、表示する数を10に設定しています。
『~~~~~』の所に好きなようにデザインします。
RSSからの情報は『$item』に格納されます。
配列に入っているデータは以下のようになります。
名 称表示コード
アップデート日
<?php echo $item['updated']; ?>
ID
<?php echo $item['id']; ?>
タイトル
<?php echo $item['title']; ?>
説明文
<?php echo $item['summary']; ?>
名前
<?php echo $item['im']['name']; ?>
期間
<?php echo $item['im']['duration']; ?>
製作者
<?php echo $item['im']['artist']; ?>
価格
<?php echo $item['im']['price']; ?>
アイコン
<?php echo $item['im']['image']; ?>
リンク
<?php echo $item['link']; ?>
リリース日
<?php echo $item['im']['releasedate']; ?>
1枚目のスクリーンショット
<?php echo $item['link_enclosure']; ?>
コピーライト
<?php echo $item['rights']; ?>
全文
<?php echo $item['atom_content']; ?>

注意点1
アイコンは3つのサイズがあり、『image』の中に3つ分のURLが入っています。
それをそのまま書いても表示されないので、100×100のアイコンを表示させる場合、以下のような文になります。
<img src="<?php echo substr($item['im']['image'],162,245); ?>" />
PHPのsubstrで162(161)文字目~245(244)文字目を出力するようにしています。
数値は0から始まります。

ちなみに175×175の大アイコンもあるようで、その場合はこちら。
<img src="<?php echo substr($item['im']['image'],0,69); ?>175x175-75.jpg" />

注意点2
ジャンルとカテゴリーに関してはRSS内に入っていないので、手書きする必要があります。

最後に、サンプルページの全内容です。
<h2 class="title">AppStore 無料ゲームアプリ トップ10</h2>
<?php
  $rss = fetch_rss('http://ax.itunes.apple.com/WebObjects/MZStoreServices.woa/ws/RSS/topfreeapplications/sf=143462/limit=10/genre=6014/xml');
  $maxitems = 10;
  $items = array_slice($rss->items, 0, $maxitems);

  if (empty($items)) echo 'No items';
  else
    foreach ($items as $item) :
?>
<div class="entry_title_top"></div>
<h2 class="index_title"><a href="<?php echo $item['id']; ?>" target="_blank" style="font-size:16px;"><?php echo $item['im']['name']; ?></a></h2>
<div class="entry_title_btm"></div>
<div style="float:left; width:250px;">
  <img src="<?php echo substr($item['im']['image'],162,245); ?>" />


  <strong>価格:</strong> <?php echo $item['im']['price']; ?>

  <strong>カテゴリー:</strong> ゲーム
  <strong>リリース:</strong> <?php echo substr($item['im']['releasedate'],0,10); ?>
  
  <strong>アップデート:</strong> <?php echo substr($item['updated'],0,10); ?>

  <strong>販売業者:</strong> <?php echo $item['im']['artist']; ?>
  
  <strong>コピーライト:</strong> <?php echo $item['rights']; ?>
</div>
<div style="float:right; width:330px; text-align:right;">
  <img src="<?php echo $item['link_enclosure']; ?>" class="pict" width="300" />
</div>
<div style="clear:both;"></div>

<div class="entry_box" style="margin-bottom:30px;">
  <div class="title">■原文説明</div>
  <div class="intro"><?php echo $item['summary']; ?></div>
</div>
<?php endforeach; ?>

デザイン部で改行が変になっているのは、『brBrbr』を入れている為です。

注意点3
RSSを表示しているだけなので、LinkShareは使えません。
Yahoo Pipes』を使えば出来るようですが、そこまで調べていません。

app-store.org』、『BuzzApp!』、『CatchApp』なんかはシステムでしてそうですけど、どうやってiTunesからのデータを引っ張って来ているのかを知りたい。
そうすればLinkShare貼ってゴニョゴニョ出来るのに。w

Tag : , , , ,

Smarty今まで覚えたい覚えたいと思いつつも、中々着手しなかったSmarty

「Smartyって何じゃらほい?」ってな人もいると思います。
「PHPで使えるテンプレートエンジン」と言っても、「何それ、おいしいの?」と返事すると思います。
私もそうでした。
簡単に言うと、ブログみたいに『index』『header』『footer』『side』などを分けて管理できるようになる素晴らしき言語なのです。

WordPressどっぷりな私にとっては要らないって言えば要らないんですが、仕事となるとそうもいかない。
5年以上も前に作られたWEBサイト。
100ページ以上もあるのに、全てHTMLでベタ打ち。
1箇所変更があると、全てのファイルを変更しなければいけません。
DreamWeaver使って一括変換なども出来ますが、一々全てのファイルをアップしなければいけないし手間と労力が掛かりすぎます。
このご時勢、こんな面倒な事はやってられません。
本当はデータベース化したかったんですが、まだ私の力が及ばないので、まずはSmarty導入してから勉強したいと思います。

最初からやりたい事は決まっていたんですが、これが中々思うように行きません。
やりたかったのは、こんな感じ。(簡単に)

<html>
<head>
<title>タイトル</title>
</head>
<body>
{include file="header.tpl"}
メインコンテンツ
{include file="side.tpl"}
{include file="footer.tpl"}
</body>
</html>

細かい<div>等は省いています。
『{include file=”○○○”}』ってのが、Smartyのコードで、別の『 .tpl 』ファイルを読み込んで表示してくれます。
これがベタ打ちなHTMLファイルが100以上もあるんです。

アクセスするのはPHPではなくHTML。(× index.php ○ index.html など)
その中にSmartyコード。
言うは易しで、それを行うには裏でPHPファイルやら『.htaccess』などを駆使しなければいけません。

そんな苦戦したプログラムが上手く行った時の快感と言ったらもう!
結局は全てのファイルを書き換えしなければいけないんですが、ファイルの中身が簡略化できて管理しやすくって、そんな苦労はどこへやら。
一クライアントWEBサイトで、私が管理してて頻繁に更新作業があるので、自分が楽したいが為にやりました。
エクセルのマクロ組むのと一緒で、こういった楽の仕方はどんどんしていきたいです。

もちっと理解が出来てきたら、その内まとめるかもです。
データ会社に置いてきたし。

何はともあれ、Smartyバンザイ。w


Smarty : Template Engine

WordPress - メディアライブラリ昨日書いた記事の続きです。

前回は『フラッシュ形式』と『ポップアップ形式』のボタンを2つ設置する方法で行いましたが、画像が同じだと分かりづらいと思うので表示させる画像を分けてみました。
ソースを見ると一目瞭然ですが、画像ファイルは『wp-admin/images/media-button-image.gif』です。
これを新しく2つ作成し、画像リンクを変えるだけで簡単に表示を変えれます。

元の画像は 14×12 ですので、それに合わせて自作するも良しです。
私は只単に文字を乗せただけで作ってみました。

フラッシュポップアップ
アイコンWordPress - メディアライブラリWordPress - メディアライブラリ
ファイル名media-button-image_f.gifmedia-button-image_p.gif

これをアップロードし、また『wp-admin/includes/media.php』の書き換えを行います。

media.php 366行目~ (2.9の場合)
<a href="{$image_upload_iframe_src}&TB_iframe=true" id="add_image" class="thickbox" title='$image_title (Flash)' onclick="return false;"><img src='images/media-button-image_f.gif' alt='$image_title (Flash)' /></a>
<a href="javascript:w=window.open('{$image_upload_iframe_src}&flash=0','','scrollbars=yes,Width=650,Height=720,top=0,left=0');w.focus();" id="add_image" title='$image_title (Popup)' onclick="return true;"><img src='images/media-button-image_p.gif' alt='$image_title (Popup)' /></a>

結果的に、このような表示になります。
WordPress - メディアライブラリ

ついでに titlealt も変えてみました。
赤の太字で追加したコード(&flash=0)がありますが、これはポップアップ表示した際『Flashアップローダー』ではなく『ブラウザアップローダー』に最初から指定するコードです。
私はFirefoxを使っていて『dragdropupload』のアドオンを入れる事によって、テキストボックスにドラッグ&ドロップ出来るので多少の時間短縮にはなります。

『動画』『音声』『メディア』は使った事無いので無視してますと書きましたが、この方法で行えば同じような事が出来ると思います。(多分w)

WordPress - メディアライブラリ以前から各所で声があり、ちょっと調べてやってみました。

その声とは・・・
「WordPressの投稿画面で画像を挿入する時、一々フラッシュが立ち上がり1枚挿入したら消えてしまう。
連続で挿入する時もの凄く面倒だから、ずっと表示していて欲しい」
 との事。

機会があったらやってみようと思ってましたのでやってみました。
いやー、4・5時間かかっちゃったよ。w

結果的に何をしたかと言うと、
・画像挿入画面をポップアップで出す。
・1枚挿入しても、そのまま表示させる。
以上2点だけです。
それだけの為に何時間も・・・。
その何時間もかかった結晶(?)は以下より。

基本的に、画像を挿入する場合以下のような画面になります。
画像を1枚挿入する度に、この画面が消えてしまう。
WordPress - メディアライブラリ

別ウィンドウで出しても、結局タブなりウィンドウなりを切り替えなきゃいけないので面倒。
なもんでポップアップ表示にしてみました。

結果から言うとこんな感じになります。
WordPress - メディアライブラリ

画像を挿入しても、ポップアップは残ったまま。
あらステキ。w
やり方は分かってみれば超簡単。
1つのファイルの2箇所を変えるだけです。

では、『wp-admin/includes/media.php』を開きます。
まずはポップアップで表示する方法。

media.php 366行目 (2.9の場合)

<a href="{$image_upload_iframe_src}&TB_iframe=true" id="add_image" class="thickbox" title='$image_title' onclick="return false;"><img src='images/media-button-image.gif' alt='$image_title' /></a>

以上のコードが、フラッシュで表示させるコードになっています。
これを残しても良いし書き換えても良しです。
以下のコードは“残す”パターンで、2種類のボタンが並ぶようにしてます。

media.php 366行目~
<a href="{$image_upload_iframe_src}&TB_iframe=true" id="add_image" class="thickbox" title='$image_title' onclick="return false;"><img src='images/media-button-image.gif' alt='$image_title' /></a>
<a href="javascript:w=window.open('{$image_upload_iframe_src}','','scrollbars=yes,Width=650,Height=700,top=0,left=0');w.focus();" id="add_image" title='$image_title' onclick="return true;"><img src='images/media-button-image.gif' alt='$image_title' /></a>

赤字が追加した文です。
1つずつ説明しますと、
『scrollbars=yes』スクロールを表示するようにしています。
これが no だと、下の方が見えなくなってしまいます。
『Width=650,Height=700』ポップアップ表示した時の横幅(Width)と高さ(Height)です。
横幅は600で横スクロールが出たので、コレぐらいが丁度良いかも。
高さは好みの高さ指定をどうぞ。(ピクセル単位です)
『top=0,left=0』デスクトップにポップアップを表示した時の場所を指定しています。
上(top)、下(bottom)、右(right)、左(left)で指定出来ます。(これもピクセル単位です)

ポップアップ表示した時に、表示するページ指定も出来ます。
タブで『コンピューターから』『URLから』『ギャラリー』『メディアライブラリ』と4つに分かれており、最初は『コンピューターから』になっています。
最初から別のタブで表示させたい場合は、以下のようになります。

『コンピューターから』は変更なし。
<a href="javascript:w=window.open('{$image_upload_iframe_src}','','scrollbars=yes,Width=650,Height=700,top=0,left=0');w.focus();" id="add_image" title='$image_title' onclick="return true;"><img src='images/media-button-image.gif' alt='$image_title' /></a>

『URLから』
<a href="javascript:w=window.open('{$image_upload_iframe_src}&tab=type_url','','scrollbars=yes,Width=650,Height=700,top=0,left=0');w.focus();" id="add_image" title='$image_title' onclick="return true;"><img src='images/media-button-image.gif' alt='$image_title' /></a>

『ギャラリー』
<a href="javascript:w=window.open('{$image_upload_iframe_src}&tab=gallery','','scrollbars=yes,Width=650,Height=700,top=0,left=0');w.focus();" id="add_image" title='$image_title' onclick="return true;"><img src='images/media-button-image.gif' alt='$image_title' /></a>

『メディアライブラリ』
<a href="javascript:w=window.open('{$image_upload_iframe_src}&tab=library','','scrollbars=yes,Width=650,Height=700,top=0,left=0');w.focus();" id="add_image" title='$image_title' onclick="return true;"><img src='images/media-button-image.gif' alt='$image_title' /></a>


後は1番苦労した、ポップアップを閉じない方法。

media.php 169行目~
<?php
  exit;
}
これを
<?php
  #exit;
}

コメントアウトなり削除なりをすれば良いだけです。
こ、こ、これだけに数時間も・・・・・・。orz


当然の事ながらWordPressのバージョンアップがあった場合、毎回書き換えなければいけません。
まぁ、たったコレだけの事なのでプラグインに頼る程でもないですね。

『動画』『音声』『メディア』は使った事無いので無視してます。
では、よきWordPress生活をっ!


追記
表示アイコンを変えたい場合などは、『【WordPress】記事投稿時に画像を貼るのをフラッシュではなくポップアップにする方法2』に書きましたので、合わせてどうぞ。