制作トラブル日記

PrestaShopの新商品の「新」マークを「New」に変える

PrestaShop 1.6.1.7

PrestaShopでデフォルトのテーマを使っていると、商品一覧に表示される新商品のラベルが「新」となっていて変なので、「New」に変更する。

管理画面の左メニューのLocalization⇒Translationsからやってもいいはずですが、
なぜか保存しても反映されなかったのでFTPでやりました。

/themes/***/lang 内にある変更したい言語ファイルをテキストエディタで開く
デフォルトのテーマなら***部分は「default-bootstrap」です。
日本語なら「ja.php」です。

「'新'」になっているところを「'New'」に変更し、FTPでアップロード

2016.10.07掲載

PrestaShopの翻訳画面で項目数の最大制限数の警告が表示されて編集できない

Prestashop 1.6.1.7

左メニューより「Localization」⇒「Translations」を開き、
「翻訳を変更」欄から「Modify」をクリックすると、
以下のエラーが表示される。

警告 フォームに登録できる項目数がPHP設定の最大制限数です: 1000 最大入力値のため
Please ask your hosting provider to increase this limit to 1139 at least, or you will have to edit the translation files.


php.iniの
max_input_varsを大きめの数字に変更する

2016.10.06掲載

PaidMembershipsPROで有料会員制サイトを構築したときの注意点

WordPress4.5.3
PaidMembershipsPRO1.8.9

WordPressで有料の会員制サイトを構築することになり、PaidMembershipsPROを使いました。いろいろ苦労したので、メモを残しておきます。

会員制サイト構築のプラグインを比較しているサイトに載っていたので採用しました。
比較されてる方のほとんどは、実際に使わずに記事を書いてるようなので要注意です。

結果としては、アメリカ向けのサイトはともかく、日本向けに日本語でサイトを作るつもりの方はPHPが触れないと使い物にはなりません。
そうはいっても、かなりの高機能なのが楽して構築できることも確かです。


構築したのは、月次課金の有料会員制サイトです。
PaidMembershipsPRO(PMPro)はStripeに対応しており、WordPressとStripeの管理画面をちょこっと触るだけで簡単にStripeの決済を利用することができます。
PayPalのようにユーザがアカウント登録する必要がなく、Wordpress側のサイトで全て完結できるので、非常に良いです。

Stripeの決済金額が100倍になる

決済テストしたところ、会費の100倍の金額で決済されることがわかりました。
StripeのAPIでは、決済金額に小数点の通貨を含む場合、100倍にして金額を送信するらしく、
PMProからStripeに送信する際に、金額を100倍にする設定になっていました。

米ドルや英ポンド等、小数を含む通貨はそれでいいのですが、
日本円は小数が入っていないので、例えば1,000円で決済すると、100,000円として決済されてしまい、このままでは大問題です。

PMPRoでは決済する通貨をセレクトボックスで簡単に選択できるようになっているので、
金額のようなデリケートな部分は当然ちゃんとなってるだろうと思っていたら、
まったくちゃんとしてませんでした・・。

/class/gateways/class.pmprogateway_stripe.phpの
"amount" => $amount * 100
の*100を削除しました(2箇所)

なかなか情報が見つからなくて苦労しました。

日本語に対応していない

PMProは日本語に未対応ですので、poファイルを自作する必要があります。
Poeditで作成しました。

自動送信メールを日本語にし、ヘッダ・フッタを設定する

会員登録や退会時などの自動返信メールは、/mail/*.htmlにひな形が入っていて編集できるようになっています。
ここは編集したpoファイルから翻訳されないので、htmlに書かれている内容を日本語に翻訳する必要があります。
メールの件名はpoファイルから翻訳されます。

メールのヘッダフッタの問題

メールのヘッダ・フッタは、WordPressのテンプレートディレクトリに
email_header.html
email_footer.html
というファイルを保存してやれば、読み込んでくれます。

ただし、ISOでエンコードしておかないと日本語は文字化けします。
メール本文の雛形はUTF-8でエンコードしないと文字化けするので間違えそうです。

私は、ヘッダに「◯◯様」と表記したかったのですが、
ヘッダ・フッタに入れた差し込みコードが働かないので、メール本文の差し込みコードを処理する箇所でヘッダ・フッタを読み込むように変更しました。

/includes/email.php



会員登録時に日付型を項目を追加したらエラーになる

PMPRoではpmpro-register-helperというプラグインを入れると、会員登録時の項目を増やすことができます。(増やすときはfunctions.phpに書きます)

私はdate型の項目を追加したのですが、
そうすると会員登録時にエラーが出るようになりました。

フォーム上で日付の項目は年月日が3つの入力欄で表示され、
field-name[y]、field-name[m]といった形式で配列になってるんですが、
受け取る際はstringで受け取るようになっていたのがエラーの原因でした。

/pmpro-register-helper/class.field.php


日付型の項目の表示順を「月日年」から「年月日」に変更

同じ箇所ですが、日付の入力欄が「月日年」の順に並んでおり、
しかも月は「JAN」「FEB」という英語の略称のセレクトボックスになってます。
なぜか日の方はテキスト入力。

これをすべてセレクトボックスにして、表示順を変更しました。

日付型の項目名を日本語にする

functions.phpで追加項目の設定をする際に、表示名の設定を別にすることができません。
dateという名前で設定すると、登録フォーム上もdateと表示されてしまいます。

これに関しては、jQueryで強引に変更しました。


会員登録時の名前の表示を「名姓」から「姓名」に変更する

これは直さないと気になりますね。
フォーム上の表記に加えて、メールにも出力される支払情報中の姓名(billing_name)も直さないといけませんでした。


会員登録時のカード決済のエラー文を日本語にする

登録フォームでカード番号や有効期限に不具合があった場合、Stripeから返ってきたエラーはJSのalertで表示されます。
jQueryで条件分岐して日本語の文章を出すようにしました。


カスタムフィールドの項目が会員設定に対応していない

管理画面上でカテゴリや投稿に会員設定をすれば、非会員には表示されないようにできるのですが、カスタムフィールドの項目は会員限定にしても見れてしまいました。

the_contents(); でそのままコンテンツを出力せずに、カスタムフィールドの項目を$contentにまとめて、その後以下のように書きました。

echo pmpro_membership_content_filter($content);

これで非会員の場合は、限定コンテンツが表示されず、非会員向けのメッセージが表示されます。

PMProの更新通知を無効にする

PMProは毎週のようにアップデートをしているようなので、
間違ってアップデートしないようにfunctions.phpで更新通知をしないようにしておきました。


他にもあったかもしれませんが、
今思い出せるのはこの程度です。

2016.07.29掲載

FirefoxでMovable Typeのtextareaに横スクロールが入る

【環境】
ブラウザ:Firefox38.05
OS:Windows7
CMS:Movable Type6.1

【症状】

記事の投稿画面がフォーマット「なし」の状態にすると、
文字列が折り返されず、横スクロールが入る。

【対処】
小粋空間さんの「EntryTextareaBraker」プラグインを導入

小粋空間さんによると、Firefox36以降のバグのようです。


2015.12.21掲載

ECCUBE2.13でログイン時にlogin_error等の文字だけ表示される

ECCUBE2.13で会員ログインしようとすると、
真っ白な画面に以下のメッセージが表示される。

{"login_error":"\u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9\u3082\u3057\u304f\u306f\u30d1\u30b9\u30ef\u30fc\u30c9\u304c\u6b63\u3057\u304f\u3042\u308a\u307e\u305b\u3093\u3002"}

以前の記事で同様の症状が出て、直せたと思っていたのは勘違いだった模様。

Google検索すると、
パラメータ設定の「DEVICE_TYPE_SMARTPHONE」がPC用の「DEVICE_TYPE_PC」と同一の場合にこのようになる。PCと違う値にすればOKという記載がありました。

今回のサイトでは、レスポンシブを採用したので、PCとスマホ同一ソースを出す必要があるため、DEVICE_TYPE_SMARTPHONEをPCと同じ数値にしていました。

異なる数値にはできないので、
端末の振り分け部分を修正することにしました。

data/class/SC_Display.phpの
端末の判定部分をコメントアウトし、すべてPCとして扱うよう変更。
(ガラケーサイトはつくってないのでついでにコメントアウト)

public static function detectDevice($reset = FALSE)
{
if (is_null(SC_Display_Ex::$device) || $reset) {
$nu = new Net_UserAgent_Mobile();
$su = new SC_SmartphoneUserAgent_Ex();
// if ($nu->isMobile()) {
// SC_Display_Ex::$device = DEVICE_TYPE_MOBILE;
// } elseif ($su->isSmartphone()) {
// SC_Display_Ex::$device = DEVICE_TYPE_SMARTPHONE;
// } else {
SC_Display_Ex::$device = DEVICE_TYPE_PC;
// }
}

return SC_Display_Ex::$device;
}


data/cache内のファイルを削除して、
再度アクセスし、正常な表示になっていることを確認しました。

以前の記事で直せたと思ったのは、どうもキャッシュの更新のタイミングで直ったように見えただけじゃないかと思っています。


2015.12.08追記
同じ状態になりました。
よく分かりませんが直ってなかったようです。

data/class/pages/frontparts/LC_Page_FrontParts_LoginCheck.phpの
SC_Display_Ex::detectDevice() === DEVICE_TYPE_SMARTPHONE
部分をすべてはずして、全てPC扱いに変更したら直りました。

2015.10.27掲載

ECCUBE2.13でログイン時に画面遷移しない

ECCUBE2.13でユーザがログインしようとすると、
{"success":"\/mypage\/login.php"}
とだけ画面に表示されて、正常に画面遷移しない。

Google検索したらスマホのみで同様の事例があった。
tplをデフォルトのテンプレートに変えても直らず、
templates_cの中を削除しても変わらず。

classファイルとか一部いじってたので、
こちらもデフォルトに戻しても直らず。

/data/cache内のファイルを全削除したら直った。

2015.09.08掲載

WordPressの画像の編集画面でプレビューが表示されない

【症状】
WordPressを導入しているサイトで、アップロードした画像をWordPress上から編集しようとすると、プレビュー画像が表示されない。

【環境】
WordPress: 4.1

【対処】
Googleで検索してもあまり情報はなかった。

まず「画像プレビュー部分はAjaxを使っているので、セキュリティソフトが原因では?」という書き込みがあったので、オフにしてみたが、効果なし。

WordPressの英語版のサポートサイトで、functions.phpの空白行の問題という書き込みがあったので、試したところ解決した。

具体的には
funcions.phpで、以下のようにPHPで書かれていない部分に空白行があったら削除する。

■変更前

■変更後


【参考】
"Edit Image" - image does not show up...
https://wordpress.org/support/topic/edit-image-image-does-not-show-up

2015.03.09掲載

ajaxzip3で郵便番号を訂正すると文字化けする

メールフォーム等で入力された郵便番号を住所に自動変換してくれる「ajaxzip3」。

一度郵便番号を入力し、
上3桁はそのままで下4桁を変更すると、変換される住所が文字化けしました。

この不具合はブラウザがInternetExplorerで、文字コードがUTF-8以外の場合に発生する模様。Chromeやその他のブラウザでは問題なく、IEでもUTF-8の場合は発生しない様子。

対処法方法としては読み込んでくるjsのソースの書き換えです。
(googlecode.comから直接読み込んでる場合は、jsファイルを自身のWebサーバにコピーしないといけない)

jsファイルの以下の部分を書き換えます。

【訂正前】
b.setAttribute("src",a);b.setAttribute("charset","UTF-8");

【訂正後】
b.setAttribute("charset","UTF-8");b.setAttribute("src",a);

2014.05.09掲載

エクセルファイルをダウンロードするとzipファイルになる

【環境】 OS:WindowsXP ブラウザ:Internet Explorer8 【症状】 エクセル2007形式のファイルがダウンロードできるウェブサイトで、 ファイルはエクセルにも関わらずzipファイルになってダウンロードしてしまう。 ダウンロードしたzipは解凍できるけど、もとのエクセルファイルとは全然違う内容。 【対処】 2007以降のエクセルやワード、パワーポイントはXMLが使われているため、ウェブサーバ側でMIMEタイプを正しく指定しないとzipになってしまうようです。 .htaccessで以下を追記。 AddType application/vnd.openxmlformats-officedocument.presentationml.presentation .pptx AddType application/application/vnd.openxmlformats-officedocument.spreadsheetml.sheet AddType application/application/vnd.openxmlformats-officedocument.wordprocessingml.document

2013.08.21掲載

楽天モーションウィジェットがプルダウンメニューに重なる

【症状】
マウスオーバーでサブメニューが表示されるプルダウンメニューを使っているサイトで、
楽天アフィリエイトが提供している「楽天モーションウィジェット」を使用すると、
プルダウンメニューの被さるようにウィジェットが表示されてしまう。

【対処】
楽天モーションウィジェットのコードに
「rakuten_wmode="on";」を追記する。

※以下記入例

2012.07.15掲載

Movable Typeの本文エリアに記事が書けない

OS:Windows Vista
ブラウザ:Internet Explorer9.0
CMS:Movable Type Open Source5.04

【症状】
Movable Typeを使用しているサイトで、記事を新規作成しようとしたところ、
タイトル欄には入力ができるが、本文欄に文字が入力できない。
マウスのポインタを入力欄に合わせてクリックしても、無反応。

【対処】
Movable Typeは現在(2011/8/1)、Internet Explorer9に正式対応していないため、
様々な不具合が起こる模様。

IE9には「互換表示」という機能があって、以前のバージョンでの表示ができる。
MTの記事入力画面を開き、
IEのアドレス欄の右側にある「互換表示」アイコンをクリックすれば、
本文欄に入力できるようになった。
互換表示するサイトは記憶してくれるようなので、毎回クリックする必要はないようです。


(以下、参考)
Q. Movable Type 5 は Internet Explorer 9 に対応していますか(six apart社)
http://www.movabletype.jp/faq/mt5-ie9.html

互換表示
http://windows.microsoft.com/ja-JP/internet-explorer/products/ie-9/features/compatibility-view/

2011.08.01掲載

IE7でフォームに入力ができない

OS:Windows XP Professional SP3
ブラウザ:Internet Explorer 7

【症状】
入力フォーム上でマウスをクリックしても、フォーム欄にカーソルが入った状態にならず、
入力することが出来ない。
IE8やFirefoxなどその他のブラウザでは問題なく入力できる。

【メモ】
原因を調べると、入力フォームの上部にあったパンくず表示でした。
パンくず表示がposition:absoluteで絶対位置が指定されていたのですが、
position:abosluteを外すと、うまく表示されるように。

しかしposition:abosluteを外すとレイアウトが乱れるので、
同じ要素にheight:○○pxを指定したら、問題なく表示されるようになりました。

恐らくposition:abosluteで指定した要素が入力フォームの上に乗っかっている状態なのだと思います。

2011.04.22掲載