amazonアソシエイトが重いのを解消

  • 2023.08.07 Monday
  • 14:43

前回の投稿から10年以上立ってますが…。



サイトリニューアルしたけど、一部のページが表示されたあともずっと読み込み中のままぐるぐる矢印が回ってた問題、何が重いのか分からなかったが、やっと判明。



受賞作候補作のアマゾンリンクつけてるページが重かったわけだが、amazonアソシエイトの画像リンクについてくる1px画像が原因だった。



Amazonアソシエイトのリンクがとても重い


いつまでたってもサイトが表示されないときの対処法



ためしにいくつかのページで1px画像を削除したら、すぐ表示完了した。


しかしアマゾンリンクは年度ごとに少ないときでも5個、多いとき(コミック巻数多いなど)は数十個ある。1つ1つ修正するのはうんざりなので、CMSの強みで一括でできないか考えた。



以下のMODXのスニペットを作った。


アソシエイトの画像リンクは



<a href="http://www.amazon.co.jp/gp/product/**ほげほげ**&tag=アソシエイトID"><img border="0" src="画像のURL&tag=アソシエイトID" ></a><img src="http://ir-jp.amazon-adsystem.com/**ほげ**" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" />


という形なので、ページに書き出すときにaタグで囲まれている部分のみ取り出せばいい。
スニペット名は a取り出す

phpの正規表現でこう書く。


$output = preg_match("/<a(.*?)<¥/a>/", $output, $match);
print $match[0];


preg_matchの使い方はこちらを参考



【PHP】文字列を正規表現で検索する関数の使い方を解説



画像ダグを記載してるテンプレート変数に
[+TV変数:a取り出す+]
として無事1px画像をページに書き出さないようにできました。



この1px画像、デザイン上も邪魔なのでcssで非表示にしてたんですが、元から書き出さないほうがスマート。



ajaxsearch1.9.2でも、全角スペースで検索させる

  • 2012.02.17 Friday
  • 13:03
毎度のことながらAjaxSearchはアップデートごとにファイル構成とかマイナーチェンジされます。

検索するときの区切り文字はスペースですが、日本語の全角スペースをいれると全角スペース含みの文字列として検索するので、これをなんとかしたいです。

過去記事
ajaxsearch1.8.4で全角スペースでも検索させる
で対処法を書きましたが、AjaxSearch1.9.2には
assets/snippets/ajaxSearch/classes/search.class.inc.php のファイルがありません…。またかよ。

classes/の中を見ると
ajaxSearchInput.class.inc.php というのがあやしい。
開いてみると223行目あたりに

$searchString = $this->_stripTags($searchString);

というのがあるので
このすぐ下に

// zenkakuhankaku space
$searchString=mb_convert_kana($searchString, s, "UTF-8");

と入れてあげれば、全角スペースは自動で半角に変換して検索してくれますw

-------追記--------
こちらからダウンロードできるAjaxSearch1.9.2c は全角スペース問題は解決されていますので、修正する必要はありません。

ロリポでAjaxSearch1.9.2を動かす modx1.0.5J-r10 およびr5

  • 2012.02.17 Friday
  • 13:00
G研サイトをmodx1.0.5J-r5からr10にアップデートしたのを機に、サイト内検索をつけようとAjaxSearch1.9.2を使ってみた。

以前記事に書いたが
ロリポップでAjaxSearch 1.8.1を動かす
このときはmodxもまだ0.9あたりだったので、この情報はもうかなり古い。

でmodx1.0.5J-r10でAjaxSearch1.9.2bを使ってみたのだけど、いきなりエラーで動かないorz
日本公式フォーラムで質問したところ対処法を教えていただいたので、メモ。

assets/snippets/ajaxSearch/classes/ajaxSearch.class.inc.php
78行目あたりの
set_time_limit($asCfg->cfg['timeLimit']);
を削除orコメントアウトすることで動くようになりました。
※コメントアウトするには行頭に//をつける。

ロリポサーバーの人はお試しください。
※ちなみにさくらサーバーでは上記の処理をしなくても動きました。
ためしにコメントアウトしたファイルをさくらサーバーでも使ってみましたが、問題なく動きました。
さくらはどっちでもokみたいです。



ファイルサイズを計算してくれるスニペット

  • 2011.11.18 Friday
  • 13:20
 便利なスニペットを見つけたのでメモ。

pdfファイルとかzipファイルをアップしてダウンロードしてもらうとき、ファイルサイズが書いてあったほうがありがたいよね。
管理してるサイトで、実は今まで手動で書いてたのだが^^;
今後pdfのアップが増えることになったので、自動で計算できないかなぁ? と検索したらスニペットありました。

SNIPPET: filesize

スニペットコール

[[filesize? &file=`filename` &unit=`unit` ]]

Where:

filename - the path to file (for example: assets/file/index.htm)
unit - the maximum unit (for example: KB)
ポイント
・filenameは最初に/なしでOK
・unitはKBにしても1MB超えると表示は
1.19 MBみたいに出力してくれます。

便利です。

mootoolsとMaxigalleryのslimboxを一緒に使う方法

  • 2011.08.23 Tuesday
  • 11:29
今日もmootoolsがらみです。
mootoolsのかっこいいにょろにょろメニューを使ってるるページで、スニペットMaxigalleryを入れて、画像をslimboxで表示したい! と思った。

MaxiGallery(0.5.2)のスニペットコール

[!MaxiGallery? &display=`embedded` &embedtype=`slimbox` &pics_per_row=`4` &max_thumb_size=`80` &max_pic_size=`700` &order_direction=`ASC` &order_by=`pos`!]

としたら、slimbox動きません。サムネイル画像クリックすると、画像のみリンク先ページに表示する…。(mootoolsのにょろにょろメニューはうごく)

書き出したソース見るとheadの中で
<script type="text/javascript" src="manager/media/script/mootools/mootools.js"></script>
<script type="text/javascript" src="assets/templates/modxhost/drop_down_menu.js"></script>

<link rel="stylesheet" href="/assets/snippets/maxigallery/slimbox/css/slimbox.css" type="text/css" media="screen" />

    <script type="text/javascript" src="/assets/snippets/maxigallery/slimbox/js/mootools.js"></script>
    <script type="text/javascript" src="/assets/snippets/maxigallery/slimbox/js/slimbox_lang_en.js"></script>
    <script type="text/javascript" src="/assets/snippets/maxigallery/slimbox/js/slimbox.js"></script>
<link rel="stylesheet" href="/assets/snippets/maxigallery/css/default.css" type="text/css" media="screen" />

となっていてmootoolsを2回読み込んでる。(赤字の部分)
また順番をいじるのかなーと思ったら、MaxigalleryにはJSライブラリを自動で挿入させないパラメータがあった。

&disable_js_libs=`1`(デフォルトは&disable_js_libs=`0`で自動挿入する)
をくわえてやったら
<script type="text/javascript" src="manager/media/script/mootools/mootools.js"></script>
<script type="text/javascript" src="assets/templates/modxhost/drop_down_menu.js"></script>

<link rel="stylesheet" href="/assets/snippets/maxigallery/slimbox/css/slimbox.css" type="text/css" media="screen" />

    <script type="text/javascript" src="/assets/snippets/maxigallery/slimbox/js/slimbox_lang_en.js"></script>
    <script type="text/javascript" src="/assets/snippets/maxigallery/slimbox/js/slimbox.js"></script>
<link rel="stylesheet" href="/assets/snippets/maxigallery/css/default.css" type="text/css" media="screen" />
となって、mootools.jsは一回のみになり、無事slimboxが動くようになりました。

参考
Let's enjoy MODx Maxigallery - 0.5.2
MaxiGalleryのエラー(その2)

MaxiGalleryのエラー(その2)にはMaxigalleryのマネージャー画面でもドロップダウンメニュー(mootoolsのにょろにょろメニュー)を動かす方法も出てますが、Maxigalleryのマネージャー画面は基本管理者しか入らないので、必要ないので修正していません。

ajaxsearch1.8.4で検索の最大文字数を変更する

  • 2010.12.07 Tuesday
  • 17:56
ajaxsearch1.8.4デフォルトでは検索の最大文字数が30文字(日本語だと15文字)です。
英語圏では問題ないでしょうが、日本語で少し長い商品名などをいれるには少々足りないことも。

AjaxSearch Wikiをみると、パラメータに 最小文字数 &minChars  と 最大単語数 &maxWords はありますが最大文字数がありません(ToT)

いったいどこで変更するのか探し回りましたが
最大文字数の変更は全角スペースでも検索の変更と同じファイルにありました。

assets/snippets/ajaxSearch/classes/search.class.inc.php
の18行目
define('MAX_CHARS',30); // maximum number of characters
の30を任意の文字数に変更すればOKです。

ajaxsearch1.8.4で全角スペースでも検索させる

  • 2010.12.07 Tuesday
  • 17:51
ajaxsearchはバージョンがあがるごとに、微妙に細かい変更が多いので、旧バージョンと同じ変更ではうまくいかないことが多いです。

バージョン1.8.1では
報告:ajaxsearch 全角スペースで区切ってand検索
の方法でうまくいったのですが、1.8.4では位置がすこし違いますw
assets/snippets/ajaxSearch/classes/search.class.inc.php
の155行目あたり
// Strip HTML tags
$searchString = stripHtml($searchString);

の下に

// zenkaku space=>hankaku space
$searchString=mb_convert_kana($searchString, s, "UTF-8");

にいれればうまくいきました。
またパラメータの書き方が変更になっているので、前バージョンと同じスニペットコールでは動かなかったり…。

AjaxSearch Wiki とバージョン変更点の書いてある
assets/snippets/ajaxSearch/ajaxSearch_version_184.txt
は必読です。

dittoで更新履歴 1年分だけ表示する

  • 2010.09.03 Friday
  • 11:08
dittoで更新履歴を作る場合、トップページに最新のみを表示させるなら &display=`10` で10件表示とかにします。
ここで「もっと読む」とか「続きをよむ」などのリンクをつけて過去の履歴も見せたい場合、リンク先のページで &display=`all` にすればいいのだけど、長くやってるサイトだと件数が膨大になる。なので1年ごととか、更新日時でページを分けたい場合どうするか? ちょっと悩んだのですがfilterパラメータで簡単にできましたw

&display=`all` &filter=`pub_date,1262271600,6|pub_date,1293807599,5|`

これで公開日(pub_date)が2010年1月1日00:00:00以上(6)、2010年12月31日23:59:59以下(5)のリソースをすべて表示になります。

日付時刻はmodxが読めるようにunixタイムスタンプの形式にします。unixtime変換はググるといろいろでてきます。
ここが便利でした。

unixtime変換ツール

pub_dateでなくeditedonにすれば編集日時で区切れます。

filterパラメータの書き方と意味はMEGUさんのDitto - 2.1の解説を参考にどうぞ。
Let's enjoy MODx Ditto - 2.1

あと、これはサイトをmodxに移行して、過去の履歴は静的htmlを使いmodx移行後の履歴のみDittoで作りたい、という場合にも使えます。
というのも &orderBy=`pub_date DESC` で公開日ソートにした場合、公開日が未入力の時はリソース作成日時が使われます。
サイト移行の場合、過去のページでも作成日時はすべて、当然ですが移行日以後です。単に&display=`all`にした場合、困ったことに…。古いページにいちいち公開日を設定するのはうんざりするくらい大変です。(←実は途中までやったorz)
filterで公開日がサイト移行日以後のものだけ表示にすれば、この問題も解決ですw

コピーライトの年号を自動で入れるスニペット(10.03.02追記あり)

  • 2010.01.21 Thursday
  • 12:21
サイト管理していて、フッターのコピーライト©の年号変更をつい忘れがち。
modxでつくってれば、フッター部分はチャンクにしてる人がほとんどだろうから、一箇所直せばすむのだが、それでも結構忘れるんだよなぁ。

なので年号表記部分をphpで書いてスニペットにすることにした。


<?php
echo 'Copyright &copy; '.date('Y').'';
?>


Copyright &copy; の部分は自分のサイトに合わせて書き方変更してくまさい。
スニペット名はAutoCopyrightとでも。

[[AutoCopyright?]] サイト名 All Rights Reserved.

と書いておけば来年になったら自動で年号変わります。

modxなくてもphpが使えるサイトなら、php直接書いておけば楽ですよ。


------------
追記(10.03.02)

バックアップを取った時に、イベントログが異様に溜まっていることに気が付いた。

date() [function.date]: It is not safe to rely on the system's timezone settings. Please use the date.timezone setting, the TZ environment variable or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected 'Asia/Tokyo' for 'JST/9.0/no DST' instead


というエラーログが大量にある。(AutoCopyrightスニペットで)タイムゾーンの設定がないから、設定しろといってるらしい。

PHPのtimezoneの設定メモ
PHP | php.ini の date.timezone を変更する

このあたりを参考にして修正しました。

方法1 スニペットの記述に設定を加えて以下のように変更にする。


<?php
ini_set("date.timezone", "Asia/Tokyo");
echo 'Copyright © '.date('Y').'';
?>


方法2 php.iniに直接記述する

date.timezone = Asia/Tokyo

※テキストエディタにこの1行を書いて、ファイル名をphp.iniで保存。modxのindex.phpと同じ階層にアップします。

どちらかをすれば、エラーはでなくなります。

Ditto内でGetFieldスニペットを使う時はキャッシュに注意【1.0.5J-r7で解決済み】

  • 2010.01.21 Thursday
  • 11:44

テンプレートにDittoを記述して、それぞれの親idを取得したい時など、GetFieldスニペットを使うと便利です。

&parents=`[[GetField? &field=`id` &parent=`1` &parentLevel=`1`]]`

このときDittoのスニペットコールはキャッシュなしの

[!Ditto? &parents=`[[GetField? &field=`id` &parent=`1` &parentLevel=`1`]]`!]

にしないとうまくいきません。

外側のDittoはキャッシュなしの[!Ditto?
入れ子のGetFieldはキャッシュありの[[GetField?

ここ、はまりました。
そもそも[!と[[どっちがキャッシュありだっけ? といっつも混乱する…^^;

あとDittoでページ分割パラメータpaginateを使う時はキャッシュありにしないとうまく動きません。
なのでDittoコール内でGetFieldコールした場合は、paginateは使えないです。(未検証ですが)

-------------------------
2012.2.13 追記
modx 1.0.5J-r7 アップデートでこの問題は解決されました。
r7以降は外側のDittoも以下のように[[で記述できます。

[[Ditto? &parents=`[[GetField? &field=`id` &parent=`1` &parentLevel=`1`]]`]]

calendar

S M T W T F S
     12
3456789
10111213141516
17181920212223
24252627282930
31      
<< March 2024 >>

たいやき

selected entries

categories

archives

links

profile

search this site.

others

mobile

qrcode

powered

無料ブログ作成サービス JUGEM