2016年7月13日水曜日

CS-Cart 納品書のカスタマイズ 納品書の罫線の色を変えたい

PDF納品書の罫線の色を変更したい。
罫線の色は、func.phpファイル内に直接記述されているので、これを変更する。

1./addons/localization_jp/func.php ファイルを開く
2.3214行あたりの「 $pdf->SetLineStyle」を修正する

罫線ではなく、項目のセル内の色は同じくfunc.phpファイルの3213行あたり、$pdf->SetFillColorの項目を修正する。

色の指定はRGBで行われているので、黒なら

 'color' => array(0,0,0)

になるし、濃い灰色なら

 'color' => array(102,102,102)

になる。


■どうでも良い話
納品書が標準でPDFダウンロードできるのはCS-Cartのいいところ。

が、しかし、水色に輝く罫線はデザインにうるさいクライアントが眉をひそめるところ。
「あ、大丈夫ですよ、すぐ変更できます」なんて気楽に請け負ってきたら、テンプレートが見つからねえ!なんて方もいるのでは? 俺だけですかそうですか。

予想外に手間取って、この工数はどこから持ってくりゃいいんだ。と余計な悩みまでオマケについてきて困ってます。
この記事を読んで「おお、助かったわ」という方は、その浮いた工数俺に下さい。

CS-Cart v.4.x

CS-Cart4 納品書のカスタマイズ 納品書を納品書兼領収書にしたい

PDF納品書の「納品書」の文字を「納品書兼領収書」に変更したい。

このためには
 1.言語変数に「納品書兼領収書」を登録する
 2.該当部分の変数を1.で登録したものに置き換える
という作業が必要になる。

■言語変数の登録
1.管理画面から[一般設定]-[言語]-[言語変数]を辿る
2.[+]ボタン(言語変数の追加)をクリック
3.言語変数に「jp_pdfinv_invoice_and_receipt」を入力
4.値に「納品書兼領収書」を入力
5.[登録]ボタンをクリックして登録

■変数名を変更
1./addons/localization_jp/func.php ファイルを開く
2.3006行目あたりの「jp_pdfinv_invoice」を「jp_pdfinv_invoice_and_receipt」に書き換え(v4.3.4。該当箇所になければjp_pdfinv_invoiceでファイル内検索)
3.ファイルを保存

■確認
[注文履歴から納品書(PDF)を印刷]リンクをクリックしてPDFをダウンロード、確認。

■備考
書類を変更したのだから「納品書(PDF)を印刷」も「納品書(PDF)を印刷」
管理画面の言語変数で「print_pdf_invoice」を検索して書き換える。

■どうでもいい話
CS-Cartにはユーザーがマイページの注文履歴から納品書をPDF出力できる機能がある。
(管理者からも注文履歴を辿って同じ事ができる)

ところがこの納品書、他の書類と違ってテンプレートが見つからない。あげく言語変数で「納品書」と検索してもヒットしない。

実は、納品書はテンプレートではなくfunc.phpの中で直接生成されており、言語変数では「納品書」ではなく「納 品 書」で登録されている。

 ※つまり「納 品 書」で検索すればヒットする

こんなコネタに全部ひっかかったため、どこを変更すれば良いのかを探るのにずいぶん時間がかかった。

納品書に関しては、日本人離れしたヴィヴィッドな色合いの罫線についてクライアントから変更してくれ、と言われることもあるだろうが、こちらについてもfunc.php内に記述することで解決する。

CS-Cart v4.x

2015年3月5日木曜日

Baked グローバルメニューのトップページへのリンクを修正したい

Bakedのタイトルリンクとグローバルメニューのトップページリンクを両方、ディレクトリ名なしに変更するには、default.ctpを次の様にする。



if ($menu['Page']['path'] == '/index'){$menu['Page']['path'] = '/';}


Bakedのデフォルトテンプレートは、トップページに戻るリンクが2つ用意されている。

しかし、リンク先はページタイトルが

http://hogehoge.com/

なのに対し、グローバルメニューのトップページリンクは

http://hogehoge.com/index

となる。

同じページの表示だけども、お客さんの中には揃えてよ、っておっしゃる方も多いし、製作するこっちだって揃っているほうがケツの座りがいい。
トイレでケツ吹いた後に、ケツにトイレットペーパーがはさまってるのと挟まっていないのだったら、ケツに紙がはさまっていない方がいいじゃないか。アレと一緒だ。
それにケツに紙はさんだ男とはさんでいない男だったら、はさんでいない男の方がモテると思うんだ。同じ理由でindexがついているのはイケてない。取ってしまおう。

本来であればこいつはDBに登録されている「index」を削除するのが筋なのだけど、こうすると、何かのタイミングで戻ってしまう。
何のタイミングかはちょっとよくわからない。管理画面からも未入力はNGとしてエラーが出るので、まあ、Bakedの流儀に沿わないよろしくない方法なのでしょう。

そこで、default.ctpに1行書き加えてやることで、メニューをindexなしに変更してやる。
この方法だとDBいじれないよって方でも安心。

編集ファイル名
app/Plugin/(テーマ名)/View/Layout/default.ctp


<?php
 $classes = array();
  if ($menu['current']) $classes[] = 'current';
  if ($menu['Page']['hidden']) $classes[] = 'hidden';
  if ($menu['Page']['path'] == '/index'){$menu['Page']['path'] = '/';} // ←この1行を足す
?>

テーマファイルに書き込むため、テーマを変更すると元に戻っちゃう点に注意。

なお、両方ともケツに紙がはさまっている方がカッコイイじゃねえか!というのであれば、もっと簡単。
default.ctpのロゴ部分、


 <?php echo BK_SITE_NAME ?>

ここのところに「index」と書き足すだけでいい。



 <?php echo BK_SITE_NAME ?>

Baked 現在のページを取得する

Bakedで現在のページを知りたい、取得したいというときは、view内で下記のようにして取得できる。
<?php
 echo $currentMenu['Page']['name'];
?>
Bakedは、初心者に使いやすい反面、カスタマイズしようとすると情報が少なすぎて困る。
たとえばトップページだけ表示したいコンテンツがある、とかの場合、それがページ内コンテンツであれば簡単なのだけど、default.ctpテンプレート内で、となるといきなり面倒になる。現在のページを取得できればいいだけなのだけども、ソースコードを追わないとわからない。

そういった場合も、default.ctp内に下記の用に記述すれば良い。

<?php
 if($currentMenu['Page']['name'] == 'index'){
  echo 'トップページ';
 }
?>

ただし、トップページだけグローバルメニューを表示しない、という場合にデフォルトのメニューをif文で回避するのはよくない。 この場合、Controllerでメニューの中身を空っぽにして渡す方がよいと思われる。

2013年5月28日火曜日

jQuery UI Datepicker 土曜 日曜の色をCSSだけで変更する

jQuery UI Datepickerは、土日まとめて色を変える場合には ui-datepicker-week-end というclassが用意されていますが、土曜と日曜のそれぞれの色を変更したい場合は、first-childとlast-childを遣うことでそれぞれ日曜日と土曜日の色を指定できます。


表示するページのスタイルシートに次のコードを追記してください。
table.ui-datepicker-calendar tbody td:first-child a.ui-state-default{
    color: #F00;
}
table.ui-datepicker-calendar tbody td:last-child a.ui-state-default {
    color: #00F;
}
祝日指定がない場合は、CSSだけで十分なので、手軽に変更できます。 ここでは、文字色だけを変更していますが、当然、背景なども変更可能です。 曜日名を変更する場合は下記のようにすればOK。
table.ui-datepicker-calendar thead th:first-child {
    /* 日曜日のスタイルを記述 */
}
table.ui-datepicker-calendar thead th:last-child {
    /* 土曜日のスタイルを記述 */
}

ただし、first-child、last-childは古いブラウザでは正しく表示されませんので、注意が必要です。
お仕事上、古いブラウザに対応必須とか休日も必要という方は、CSSだけでは無理ですので(たぶん)、JavaScriptで対応する必要があります。

 たとえばWindowsXP+IE8ではfirst-child(日曜日)は表示されますが、last-child(土曜日)は認識されません。 個人的にはざまあみろ、古いIEは利用しているヤツが悪い、っていうかいい加減にしろやマイクロソフト!という気分ですので、IEのことなど知っったことか、という気分ですが、お客様のサイトの時とかはそういうわけにもいきませんよね。っていうか取り消し線引いた意味があんまりありませんね。IE嫌い。迷惑。

気が向いたら、IE対策のhackも追記しますね(向かない)。

追記
IE7、IE8はこれでOK。
でもIE6はこれだと土日同じ色になっちゃうのでダメですけども。
table.ui-datepicker-calendar tbody td.ui-datepicker-week-end a.ui-state-default {
    color: #00F;
}
table.ui-datepicker-calendar tbody td:first-child a.ui-state-default{
    color: #F00;
}
table.ui-datepicker-calendar tbody td:last-child a.ui-state-default {
    color: #00F;
}
あれこれいじっているよりGCalHolidaysを導入した方が早そうですけども。

2013年4月12日金曜日

起動時の画面を指定する

起動時の画面を指定する Xcode4.6

■ストーリーボードを利用する場合
MainStoryboard.storyboardを表示し、起動時に表示したい画面を選択。
[ViewController]にある[Initial Scene]の[Is Initial View Controller]にチェックを入れる(チェックが入るとボードの矢印が選択している画面に移動します)。

2013年3月25日月曜日

CS-Cart3 マイアカウントブロックの「ダウンロード」メニューを削除する

CS-Cart3 ショップ構築時、物販サイトなどダウンロード販売を行わない/利用しないショップでは「ダウンロード」のリンクが不要だろう。
しかし、ダウンロードのリンクは管理画面から削除することができない。このため、テンプレートを直接変更する必要がある。

該当するテンプレートには、profiles:my_account_menuというhookがあるので、次のファイルを作る。

/skins/[利用中のskin名]/basic/customer/addons/my_changes/hooks/profiles/my_account_menu.override.tpl

該当する記述箇所は以下の通り。

  • {$lang.downloads}
  • 上記を削除してしまえば「ダウンロード」リンクは非表示になる。

    2013年3月21日木曜日

    CS-Cart3 ランキングブロックにランク画像を追加する

    CS-Cart3の商品ブロックを使い、[コンテンツ]の[表示内容]に「人気の商品」を指定すると、売れ行きランキング表示ができる。
    このランキングに「No.1」「No.2」のような画像を追加する。

    ■やること
    ランキング画像を利用中スキンのimagesに「ranking_X.png」というファイル名でアップロードし、 下記のようなコードを追加する。

     ※Xは1から始まる数字

    ※sproductsは後述する「グリッド」の場合だけかもしれないので、その場合は、該当する.tplファイルのforeach名に置き換えてください
    ※管理画面で指定した表示数分の画像を作ってアップロードしておくこと。

    ■コードの追加箇所
    テンプレートを「グリッド」にした場合。

    グリッドのテンプレートは
     /skins/[利用中のスキン名]/customer/blocks/list_templates/grid_list.tpl
    となる。

    grid_list.tplには
     {hook name="products:product_multicolumns_list"}
    というhookポイントの記述があるので、

     /skins/[利用中のスキン名]/customer/addons/mychanges/hooks/products
     /skins/[利用中のスキン名]/customer/addons/mychanges/hooks/products/product_multicolumns_list.override.tpl

    を作成し、product_multicolumns_list.override.tplを変更する(元のgrid_list.tplはいじらない)。
    product_multicolumns_list.override.tplは、grid_list.tplのhookポイントの中身をコピーし、任意の位置にランキング画像のコードを追加する。

    ■注意
    このままだとgrid_list.tplのマルチカラムを利用するすべてのブロックで画像が表示されてしまうので、任意の場所だけに表示できるように制限する必要がある。
    制限の方法はいろいろあるだろうけども、たとえばトップページのブロックのみ表示させたい、といった時にはテンプレート側で特定URLのみ表示、としたのが下記のサンプル。

    画像の上にランキング画像を表示する例(トップページのみ表示)

    {if $smarty.server.REQUEST_URI == "/"}

    {/if} {include file="common_templates/image.tpl" obj_id=$obj_id_prefix images=$product.main_pair object_type="product" show_thumbnail="Y" image_width=$settings.Thumbnails.product_lists_thumbnail_width image_height=$settings.Thumbnails.product_lists_thumbnail_height} {if $settings.Appearance.disable_quick_view != 'Y'} {include file="views/products/components/quick_view_link.tpl"} {/if}  :  :

    2013年3月18日月曜日

    CS-Cart3 商品価格表示の (○円 税込) を (税込 ○円) に変更したい

    CS-Cartは、商品を税込み表示にした際、(○○円 税込) と表示される。
    (税込 ○○円) というように価格と税込の文字列を入れ替える。

    ■修正ファイル
    /skin/(利用スキン名)/customer/common_templates/product_data.tpl

    ■修正箇所
    270行あたりにある
    {******************* Clean Price ******************}
    のブロック内
    ({include file="common_templates/price.tpl" value=$product.taxed_price span_id="product_price_`$obj_prefix``$obj_id`" class="list-price nowrap"} {$lang.inc_tax})

    {$lang.inc_tax}が「税込」になるので、{$lang.inc_tax}と半角スペースを前方に移動する。

    ({$lang.inc_tax} {include file="common_templates/price.tpl" value=$product.taxed_price span_id="product_price_`$obj_prefix``$obj_id`" class="list-price nowrap"})
    

    ただし、この修正はhookポイントがないので、アップデートなどで上書きされる可能性があるのを忘れないように。

    2013年3月15日金曜日

    CS-Cart3 フックポイントのファイルを読み込まないとき

    CS-Cart3
    フックポイントを見つけ、正しい位置に正しい名前でファイルを設置したのに、読み込まれない時、アドオンを追加していないかどうかチェックしてみるといい。

    もし、アドオンを追加していたら。一端そのアドオンを無効にし、ページを再読み込みすると反映されることがある。その後はアドオンを有効にするのを忘れずに。

    たぶん、同じ名前のフックをアドオンで使っているからこういうことが起こるんだと思いますよ。たぶんね。