Welcart の商品詳細ページを自分で作る


スポンサーリンク


welcart の商品詳細ページってすごく汚いですよね?
かといって、テンプレートをカスタマイズしようにも、そのテンプレ―トが汚くて見ずらい。

そこで考えた。WelCart のカゴボタン等々を張り付けられないか。

WelCartの商品詳細ページを自分で作る方法その1


自分で作ったページの「かごに入れる」ボタンを付けたいところへ
1、WelCartの商品詳細ページを表示させる。
2、ソースを見るで、ソースファイルを開く。
3、かごへ入れてるところをコピーして、自分のページへ張り付ける。

そすっとある程度 form 系タグがわからないとできないので。

WelCartの商品詳細ページを自分で作る方法その2


テンプレートを見て直すには、若干敷居が高いかもしれない。

つーのは、オリジナルの商品詳細ページでは、そのページそのものの postデータなので、
いきなり usces_the_item(); を呼び出してやれば、マスターデータが決まるわけだ。

自分で作った個別ページでやるためには、post データを確定させないといけないので、
query_posts() でデータを確定させてやる必要がある。

確定させてしまえば、あとはこっちのもの。
テンプレートを見ながらプログラムを書けばいい。

<form action="<?php echo USCES_CART_URL; ?>" method="post">
<?php
query_posts(・・・);
while(have_posts()) {
    the_post();
    global $post;
    usces_the_item();
    if( usces_sku_num()>0 ){
        // form の内容の表示
        while (usces_have_skus()){
            //オプションの表示
            if( usces_is_options()>0 ){
                $col = 0;
                while(usces_have_options()){
                    // オプション内容の表示
                    usces_the_itemOption( usces_getItemOptName());

                }
            }
        }
        // 数量
        usces_the_itemQuant();
        // サブミット
        usces_the_itemSkuButton('カートへ入れる');
    }
    // エラーの受け取り表示
    $block = usces_singleitem_error_message($post->ID, usces_the_itemSku('return'), 'return') ;
    if($block!=''){
        echo $block;
    }
}
?>
</form>
※usces_the_itemQuant は、個数入力ボックスなんだけど、これってクソ長くなるので、ここの長さは、WelCartのQ&Aにありました。
usc-e-shop/css/usces_cart.css 内の#itempage .skuform .skuquantity を修正します。Welcart 専用テーマで無い場合は適宜セレクターを変更してください。
変更が確認できましたら、修正したusces_cart.css をテーマフォルダの中にコピーして設置します。(重要です)


サブミットしてデータチェックで引っかかるとかごに飛ぶのではなくて、そのページに戻ってくる。
なので、エラー受け取り処理の記述が必要となるわけだ。

JavaScript にも似たようなものがあるけど、これはどうやらダミーらしい。
つか、前のバージョンの物なのかも。

classes/usceshop.class.php の中に本物が入ってるので、そこのエラーチェックモジュールを
手直しすると、任意のエラーチェックをいれることができる。 function incart_check() 当たりでやればいい感じ。

ただ、ここを触るとバージョンアップのたびに書き直さないといけなくなるので要注意。


WelCartのフィールドのカスタマイズ


welcart の入力フィールドをカスタマイズするといってもとて泥臭い方法w

welcart の関数のほとんどは ‘return’ を引数にいれてやると、その場で表示ではなくて変数に取り出すことができる。

これを利用する。

ようするに、それを受け取って文字列を置換してやればいい。

例えば、<input name=”??????” class=”iopt_select” ・・・> なら、
class=”iopt_select” を違うクラスにかえてしまってもいい。
※ replace 関数を使って置き換えてしまえw

form のフィールドを分解して、組み立てなおしてもいいわけだ。

欲しいのは、name= と id=” の中身だけだ。


welcart パーツ出血大サービス


これは、welcart に限らないけど、HTMLのタグの要素を取り出す関数のソースです。
function get_formfield($buffX,$fieldname){
	$buff = $buffX;
	$p=strpos(" ".$buff,$fieldname);
	if($p>0){
		$p--;
		$buff = mb_substr($buff,$p+mb_strlen($fieldname));
		$p=strpos(" ".$buff,"=");
		if($p>0){
			$p--;
			$buff = mb_substr($buff,$p+1);
			$p=strpos(" ".$buff,'"');
			if($p>0){
				$p--;
				$buff = mb_substr($buff,$p+1);
				$p=strpos(" ".$buff,'"');
				if($p>0){
					$p--;
					$buff = mb_substr($buff,0,$p);
					return($buff);
				}
			}
		}
	}
	return("");
}
使い方は、プログラムを読むとわかると思うけど、

get_formfield(HTMLタグ,取り出したい要素);

戻り値:要素の内容

例、

$a = ‘<a href=”http://hoge.com”>あああ</a>”;
$b = get_formfield($a,’href’);

$b には、http://hoge.com が戻ってくる。


ただし、サービス品なので 要素のくくりがシングルクォートの場合には対応していません。
直して使ってねw

スポンサーリンク