WordPressエントリ内の<P>タグを無効化

WordPressのエントリ内にjavascriptを埋め込み、document.writeでテキスト表示させたかったのですが、デフォルトのままではエントリの行単位に挿入される<p>タグの影響で、document.writeが動作しませんでした。
そこで、
タグの挿入を無効にするにはどうすればいいのかをネットで調べていると、下記のサイトにヒントがありました。
iDeasilo

wpautop($pee, $br = 1)
空行で囲まれたテキストを段落とみなしてそれぞれ <p></p> タグで囲んでテキスト全体を返す。

そこで、
“wp-includes/default-filters.php” の 121行目(V2.0.9)や123行目(V2.2)あたりの

add_filter(’the_content’, ‘wpautop’);

をコメントアウトすると、<p></p>タグは挿入されなくなりました。
もしExcerptの<p></p>タグも無効にしたいのであれば、同ファイルの

add_filter(’the_excerpt’, ‘wpautop’);

をコメントアウトすれば良いような気がします。(未検証)

Last.fm API

先日、近所の本屋に行った時に、

が平積みされていたので、手にとってパラパラと流し読みしていると、Last.fmのWebサービスについて書かれている章があり、Webサービス用のAPIが公開されていることを知りました。
Web APIの詳細はAudioscrobbler Web Services APIにあります。早速、洋楽歌詞@Tube365に取り込めそうなAPIを探してみたところ、
①Related Artists(アーティストのレコメンデーション)
②TopTracks(人気曲)
がありました。
これらを実装した方法をメモしておきます。以下はTopTracks(人気曲)の取得方法です。

<?php
function getTopTracks($artist_name) {
$base_url = "http://ws.audioscrobbler.com/1.0/artist/";
$res = file_get_contents($base_url . $artist_name . "/toptracks.xml") or die("HTML取得エラー\n");
$xml = simplexml_load_string($res);
$xml_items = $xml->xpath(’//track’);

$popular_songs = array();
foreach ($xml_items as $xml_item) {
$track_data = (array)$xml_item;
array_push($popular_songs, $track_data[’name’]);
}
[…]

mod_rewriteによる静的URL

洋楽歌詞@Tube365では、PHPによる動的URLでプログラムを組んだのですが、検索エンジン最適化(Search Engine Optimization:SEO)の観点ではよろしくないとのことで、Apacheのmod_rewrite機能を利用して、静的URLへの変換にチャレンジしてみました。
多くの方が既に詳細な説明文を公開されているので、こここでは備忘録程度にしています。
.htaccessに下記のように記載すると、

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^param1-([a-z]+)$ index.php?param1=$1 [QSA,L]
RewriteRule ^param1-([a-z]+)/param2-([0-9]+)$ index.php?param1=$1&param2=$2 [QSA,L]

http://hogehoge.com/index.php?param1=foo&param2=bar
でアクセスしていたところを、
http://hogehoge.com/param1-foo/param2-bar
でアクセスができるようになります。
QSAフラグを付けると、
http://hogehoge.com/param1-foo/param2-bar&param3=boo
とアクセスした場合でも、正しく
http://hogehoge.com/index.php?param1=foo&param2=bar&param3=boo
と変換してくれます。

XREAサーバでSymfonyを動かした場合の問題

当然ながら本番環境では、
“/myproject/apps/myapp/config/settings.yml”

prod:
.settings:
cache on

“/myproject/apps/config/cache.yml”

default:
enabled: on
with_layout: false
lifetime: 86400

としてキャッシュ機能を有効にし、レスポンスの向上を図りたいわけですが、
“/myproject/apps/myapp/modules/mymodule/template/searchSuccess.php”

<?php echo form_tag(’@search’, ‘method=get’) ?>
<?php echo input_tag(’query’, htmlspecialchars($sf_params->get(’query’), ENT_QUOTES), array(’style’ => ‘width: 150px’)) ?>&nbsp<?php echo submit_tag(’検索’) ?>
</form>

のように、GETメソッドを利用したformを含むtemplateをキャッシュすると、

$sf_params->get(’query’)

で取得したvalueがなぜか表示されません。ちなみに、POSTメソッドを使った場合は問題ありませんでした。
対処療法的ですが、
“/myproject/apps/myapp/modules/mymodule/config/cache.yml

search:
disabled: off

として、formのテンプレートはキャッシュをOffにすれば、正常に動作します。
根本的な解決をするためには、symfonyのコードを読まないと、なんともできないですね。でも、コード量は半端じゃなく膨大ですから、気合いを入れて取りかからないと、時間の無駄になってしまいそう。暇を見つけて、チャレンジしてみたいと思います。

symfonyでGoogle Map(グーグルマップ)を使う

SymfonyでGoogleMapを使う方法を紹介します。いろいろ方法はあるのだろうが、一番手っ取り早くて、JavaScriptを書かなくても利用できる方法を紹介します。
具体的には、PHP Google MAP APIクラスライブラリを利用します。
PHP GoogleMapAPIでクラスライブラリが公開されており、これをダウンロードしてSymfonyの/myproject/apps/myapp/lib/におき、該当するモジュールのaction.calss.phpでrequireしてパラメータをセットします。
例えば、下記のような感じです。各行の意味はだいたいわかると思いますが、詳細はクラスライブラリのソース内に記載(英語)がありますので、そちらを参照してください。
“actions.class.php”

require(’GoogleMapAPI.class.php’);

$this->map = new GoogleMapAPI();
$this->map->setHeight(’400px’);
$this->map->setWidth(’400px’);
$this->map->enableMapControls();
$this->map->enableZoomEncompass();
$this->map->enableOverviewControl();
$this->map->enableSidebar();
$this->map->setBrowserAlert(
‘お使いのブラウザでは地図を表示することができません。’
.’Internet Explorer 6.0以降か、’
.’Firefox 1.0以降をおすすめします。’);
$this->map->setJSAlert(’お使いのブラウザではJavascript’
.’に対応していないか、Javascript がオフになっています。’
[…]