CMS構築を目的にPHPをベースとしたWordPress、CakePHPやPEARなどオープンソースを中心に解説しています

FuelPHPの機能を活用して、良い感じで他言語対応サイトを構築できないか、考えてみました。

そこで、クラスAgent、Cookie、Langを活用したサイト構築にトライしてみました。
今回は、日本語ユーザがブラウザでアクセスした際は日本語表示で、そうでない場合は英語表示でサイトを切り替えることを目指します。

言語ファイルの用意

まず、言語を切り替える文言について、言語ファイルを「/fuel/app/lang/」に用意します。
ファイル名は任意ですが、各言語はフォーマットを含めて統一させます。
例えば以下のファイルを用意します。

WordPress 4.4にアップデートしてから、記事に投稿した画像の出力まわりがおかしくなりました。
Firefoxでサイトを確認してみると、それまで画像が表示されていたところが表示されなくなっている。。。

ソースをチェックすると、画像メディアを追加してサムネイルを表示していた部分が以下のようになっていました。

<img src="/images/sample-300x250.jpg" alt="サンプル" width="300" height="250" class="size-medium wp-image-3114" srcset="/images/sample-300x250.jpg 300w, /images/sample.jpg 525w" sizes="(max-width: 300px) 100vw, 300px" />

「srcset」や「sizes」など見慣れない属性が追加されています。

どうやら、レスポンシブに対応するべく追加された新しい機能のようです。
ブラウザサイズに応じて画像を切り替えたり、Retinaディスプレイなど解像度の高いデバイスに対応したりと、
レスポンシブサイトにおいて、あらゆるデバイスに対して最適な画像を動的に出力してくれるようです。
つまり、画像が荒れたり、必要もないのに全てのサイズの画像を読み込んだりといったリスクを避けることができるようです。
※この技術の詳細についてはまた次回の宿題とします。。。

PHPの関数「unserialize」でエラーが発生する場合の対処方法です。

久しぶりにドツボにはまりました。。。
「serialize」で処理されたデータについて「unserialize」で元に戻そうとしたのですが、どうしてもエラーになってしまいます。

unserialize($data);
unserialize(): Error at offset xxx of xxx bytes

私のケースでは、FuelPHPでユーザ管理のモデルを作成し、プロフィールフィールドにデータを格納したときのお話です。
拡張性を持たせたテーブルのプロフィールフィールドは、1つのカラムに配列をシリアライズしたデータを格納します。
そのデータをSQLで取り出し、「unserialize」した時にエラーになってしまうのです。
ちなみに、現象が発生した環境は以下の通りです。

  • Windows 7 64bit Professional
  • Apache 2.4
  • PHP 5.4
  • FuelPHP 1.7
  • MySQL 5.5

ネットで調べてみると、似たような現象がちらほら見受けられます。

FuelPHPのValidationクラスを使ってフォームの項目チェックを実装します

例えば、フォームで入力された「ユーザ名」の入力必須をチェックします。

ユーザ名:<input type="text" name="username" value="">

「投稿する」などsubmitボタン押下時に、コントローラ内でValidationを実行します。
上記のHTMLからポストされた「ユーザ名」の必須チェックを行う場合、以下のように記述します。

$val = Validation::forge();
$val->add('username', 'ユーザ名')
	->add_rule('required');
if($val->run()){
	// チェックOK
}else{
	// 入力エラー
}

関数「add」の第1引数に要素名、第2引数に要素のラベルを設定します。ラベルはエラーメッセージの表示の際などに利用されます。
「add_rule」に「required」を設定することで必須チェックをします。
「run」でValidationを実行し、入力内容に問題がなければtrueが返されます。この判定で、DBへのデータの入出力や、どのviewで画面を表示するかなどの処理を分岐させることができます。

ヘッダ、フッタやサイドメニューなど共通部品をテンプレート化するため、FuelPHPのTemplateコントローラを導入してみます。

CMSでサイトを構築する場合に、各ページのヘッダ、フッタなどの共通部分については一元管理したいですよね。
FuelPHPでその方法を探していました。
View部分の機能で実現すると思い込み、ドキュメントを読んでいたのですが、出てきたキーワードが「ビューの入れ子」。
その名と通り、Viewの中でさらにViewを読み込むということですが、何だかスマートじゃない。。。

その他をいろいろと調べていたら「Templateコントローラ」という機能を見つけました。
FuelPHPではコントローラでレイアウトのテンプレートを定義するのですね。

さて、以下、導入方法です。
ちなみに今回確認したのは「FuelPHP 1.7.3」です

ある日突然、PHPの日付関数「date()」と「strtotime()」からワーニングメッセージが表示されるようになりました。
さくらレンタルサーバ上で個人で運用しているCMSを長らく放置していた私が悪いのですが。。

特にPHPの設定を変更したわけでもなく、気が付いたらそうなっていたわけで、明確な原因は不明です。
恐らくさくらレンタルサーバ側でセキュリティアップデートなどがあったのでしょう。
詳細は後ほど調べてみます。

WordPressを常時SSL対応させます。

先日、GoogleがSEOの観点でSSLを導入したページを優遇することを発表しました。
ただ、明確な効果があるほど重点はおいていないともいわれていますが、特に大きな弊害もないので、全コンテンツSSL化を実施してみます。

WordPressのSSL化については「お問い合わせフォームのみSSL化する」や「管理画面のみSSL化する」のは難しいといった話題がよく聞かれます。
そこで、今回はシンプルにオープンなコンテンツも含め「常時SSL化」します。

設定変更

WordPressの管理画面にログインします。

メニュー「設定」⇒「一般」を開き、以下の「http://~」となっている項目を「https://~」に変更します

WordPress アドレス (URL) : http://~
サイトアドレス (URL) : http://~

WordPressの設定は以上です。

WordPressにはデフォルトでサイト内検索の機能があります。
今回はその検索フォームの設置、検索結果一覧ページの実装方法です。

検索フォームの設置

以下の関数をコールするだけで、検索フォームを設置することができます。

<?php get_search_form() ?>

ヘッダ、フッタやサイドメニューなど好きな所に「get_search_form」を記述するだけです。
すると以下のデフォルトコードが出力され、検索フォームが表示されます。

<form role="search" method="get" id="searchform" class="searchform" action="http://cms.helog.jp/">
<div>
<label class="screen-reader-text" for="s">検索:</label>
<input type="text" value="" name="s" id="s" />
<input type="submit" id="searchsubmit" value="検索" />
</div>
</form>

WordPress のカテゴリ管理画面でID情報のカラムを追加して、ソート可能にする方法です。

デフォルトのカテゴリ管理画面では、リストにカテゴリIDは表示されていません。
「編集」のパスからIDを抜き取る方法がありますが、スマートではありません。

またWordpressはカテゴリ一覧の表示順を指定できないことがしばしば課題になりますが、
IDでソートする方法もあり、その場合にやはりIDを表示する画面は必要になります。

フックを設定してカテゴリIDカラムを追加する

まずは、function.phpなどに以下のフック処理を追加して、IDカラムを表示させます。

WordPressで自作のログイン・ログアウト画面を設置する方法です。

CMSとして人気のWordPressですが、クライアントに対して管理画面のインターフェースはあまり使い勝手の評判がよくありません。使いやすいようにカスタマイズしてくれといった注文もしばしばありますが、その中でも、今回はログイン・ログアウト画面について考えてみます。

オリジナルのログイン画面を設置する

オリジナルのログイン画面について、まず、ログイン処理のしくみですが、単純にPOSTリクエストでログインを実行するだけです。

具体的にはユーザ名を「log」にセットして、パスワードを「pwd」にセットして、「wp-login.php」に対してPOSTでリクエストを送信すればログイン処理が行われます。
送信先のURLは関数「wp_login_url」で取得することができます。また、引数にリダイレクト先を設定すれば、ログイン成功後に表示する画面のURLを指定することができます。

Monthly Archives

Search