在庫切れの際の条件分岐について

2011 年 11 月 17 日

ホーム フォーラム 使い方全般 在庫切れの際の条件分岐について

このトピックには3件の返信が含まれ、2人の参加者がいます。5 年、 11 ヶ月前 nanbu さんが最後の更新を行いました。

4件の投稿を表示中 - 1 - 4件目 (全4件中)
  • 投稿者
    投稿
  • #50800

    yoshi0012
    参加者

    お世話になっております。

    以前に在庫切れの際に価格に売切れと表示する方法について

    質問したものです。

    その節は大変お世話になりました。

    今回も似たようなご相談で大変恐縮なのですが、

    うまくいかないのでご相談させて頂ければと思います。

    現在、運営中のショップは1点ものが多くまた高額な商品も多いので

    予約やHOLDのような状況がございます。

    在庫状態に関してはフォーラムを参考にHOLD表示に変更が出来ました。

    フォーラムはとても参考になります。ありがとうございます。

    ただ、HOLDの場合でも他のお客様にご購入頂けないように

    在庫のステータスは購入出来ないステータスである必要がありますが、

    そうなるとHOLDにも関わらず価格がSOLD OUTの表示になり違和感があります。

    (以前、nanbu様のアドバイスを元に在庫が無い場合にはそうなるように設定致しました。)

    売切れの際には価格にSold Outと表示されるという状態のままで、

    売切れ以外の在庫が無いステータス(デフォルトですと入荷待ち等)時には

    価格が表示される、というような設定は可能でしょうか?

    条件分岐で何とかならないかと思案しましたが、

    <?php if( !usces_have_zaiko() ) : ?> の時点で

    在庫が無かったらばという条件分岐になるということだったので、

    この場合、売切れ、入荷待ち等、在庫が無いステータスは一括でまとめらているようなので

    どうにもうまく分けることが出来ません。

    私が希望するようなカスタマイズは可能なものでしょうか?

    かなり個人的な相談で他の方のお役にたつものでは無いかもしれませんので恐縮なのですが、

    可能か不可能かだけでもアドバイス頂けたら幸いです。

    よろしくお願い致します。

    #63273

    nanbu
    参加者

    こんにちは。

    usces_have_zaiko()は在庫数も考慮していますので仰る通りです。在庫ステータスのみで条件をきりたいということであれば、以下のようにするとステータス番号が取得できます。

    ただし、これは場所によって取得できない場合が有りますので、まずはうまく取得できるかどうかを確認してみてください。

    global $usces;
    $status = (int)$usces->itemsku['value']['zaiko'];

    $status が

    0 ならば 在庫あり

    1 ならば 在庫僅少

    2 ならば 売り切れ

    3 ならば 入荷待ち

    4 ならば 廃版

    となります。

    $status は数値ですので、条件分岐は念のため

    if( 0 === $status ){

    とすると確実かと思います。

    #63274

    yoshi0012
    参加者

    nanbu様

    アドバイスありがとうございます。

    早速、アドバイス通りに実行しましたところ、

    無事うまく表示されました。

    本当にありがとうございます。

    私は商品一覧ページのcategory.phpと詳細ページwc_item_single.phpの2ページに

    hold表示の設定を施したかったのですが、

    無事両ページ共にステータス番号を取得してくれました。

    1点ものの商品を多く抱えている方には多少は参考になるかもしれませんのでコードも記載します。

    価格の部分を<?php if( !usces_have_zaiko() ) : ?> を削除し、下記のように変更しました。

    (こちらは商品詳細ページの記述になります。)

    <?php global $usces;

    $status = (int)$usces->itemsku; ?>

    <?php if( 0 === $status ): ?>

    <div class=”field_price”><?php usces_the_itemPriceCr(); ?></div>

    <?php endif; ?>

    <?php if( 1 === $status ): ?>

    <div class=”field_price”><?php usces_the_itemPriceCr(); ?></div>

    <?php endif; ?>

    <?php if( 2 === $status ): ?>

    <span class=”price”><div class=”field_price”><?php echo apply_filters(‘usces_filters_single_sku_zaiko_message’, __(‘Sold Out’, ‘Sold Out’)); ?></div></span>

    <?php endif; ?>

    <?php if( 3 === $status ): ?>

    <span class=”price”><div class=”field_price”><?php echo apply_filters(‘usces_filters_single_sku_zaiko_message’, __(‘入荷待ち’, ‘入荷待ち’)); ?></div></span>

    <?php endif; ?>

    <?php if( 4 === $status ): ?>

    <span class=”price”><div class=”field_price”><?php echo apply_filters(‘usces_filters_single_sku_zaiko_message’, __(‘HOLD’, ‘HOLD’)); ?></div></span>

    <?php endif; ?>

    サイトでは$statusのステータスを

    0→在庫あり

    1→在庫あり(入荷中)

    2→売り切れ

    3→入荷待ち

    4→HOLD

    という風に設定しており、全て私の希望する表示にすることが出来ました。

    恐らく、もっとスマートな記述法があるかとは思いますが、とりあえず表示されているので良しとしています。

    ありがとうございました。

    #63275

    nanbu
    参加者

    yoshi0012 さん

    ご説明した後で申し訳ないのですが、$usces->itemskuという変数は仕様が変ります。次期バージョンのWelcart 1.1 で早速仕様が変ってしまいます。そこで、この値を取得するためのテンプレートタグを用意いたしましたのでこちらをご利用下さい。

    <?php $status = usces_get_itemZaiko( 'id' ); ?>

    global $usces; も必要ありません。

    このテンプレートタグは、現在のDevelopment Version(1.0.8)に入っております。

    このテンプレートタグを使っていればアップグレードしても大丈夫です。

4件の投稿を表示中 - 1 - 4件目 (全4件中)

このトピックに返信するにはログインが必要です。