Sleipnir用 Amazonアソシエイト スクリプトで使っていたXSLTファイルですが、とりあえず動いたんでサイトで公開したものの、幾つか気になっていたところがあります。
1:CatalogがBookの時は作者が表示されるので問題ないが、それ以外の商品だと余分に一行スペースが表示されることになる。
2:CatalogがMusicの時は作者が表示できない(AuthorsではなくArtistsという変数名であるため)。
3:MediaがVideo Gameの時はPlatforms(機種)も表示させたい。
といった感じだったので、最初はどうにかJSファイル内で分岐させて、別々のXSLTファイルを用意するしかないのかな、とか思っていたんですが実はXSLTファイル内で条件分岐が出来るんですね。
そこで、条件分岐を含めてXSLTファイルを書き換え、amz.xslという別のファイルとして追加して圧縮ファイルに同梱させました。前回のamazon.xslも念のために同梱してますが、問題なければamz.xslを使うようにした方がいいです。
記事の続きでは具体的にどこが変更されたか書いていますが、読むのが面倒だったらamz.xslのアソシエイトIDのところだけ書き換えてアップしてJSファイル内のXSLTのURL指定を変更すれば問題ないです。
変更したのは以下の三箇所です。
<xsl:variable name="cat" select="Catalog" /> <xsl:variable name="artist" select="Artists" /> <xsl:variable name="plat" select="Platforms" />
XSLTファイルの上の方の変数定義に、上記の3つを追加しました。これによりCatalogが$cat、Artists*1が$artist、Platforms*2が$platとして使用できるようになります。
<xsl:if test="$cat='Book'"> <xsl:value-of select="$auther"/> <br /> </xsl:if> <xsl:if test="$cat='Music'"> <xsl:value-of select="$artist"/> <br /> </xsl:if>
CatalogがBookのときは$autherを、Musicのときは$artistを表示させるようにしました。それ以外は改行なしになります。choose-case文使った方が見栄えがいいとは思ったんですが、なんかうまく動かなくて面倒だったから不恰好にif文並べました。動けばいいやの精神で使ってください。
<xsl:value-of select="$media"/> <xsl:if test="$media='Video Game'"> <xsl:value-of select="concat(' [', $plat,']')" /> </xsl:if>
CatalogがVideo Gameのときだけ、後ろに$platを付けるようにしました。
あと、なんでわざわざファイル名を変えたかと言うと、名前を変えずにamazon.xslを上書きアップロードしてもキャッシュか何かに残っているのか、前回のXSLTファイルを読み込んだかのような誤動作を起こすことが多かったからです。少し面倒に思えるかもしれませんが、amz.xslをアップしてからJSファイルでのXSLTファイルの指定も変更した方がそういう誤動作が無くて面倒なことにならないからオススメです。
なお、この記事では例として値段も表示するようにしていますが、個人的に使う分のXSLTファイルでは消費税総額表示を考慮して値段を表示しないようにしています。配布している圧縮ファイル内のXSLTファイルでは値段を表示するようにしていますので、もし表示させたくない方はXSLTファイルから下記の部分を消去してください。
<xsl:value-of select="$price"/>
以下に各メディア別の表示例を羅列してみます。同じamz.xslを使っても、メディアを自動判別して表示項目が変わっているのが分かっていただけると思います。
コメント