web-dev-qa-db-ja.com

可用性カレンダーで製品日付属性の可用性をミラーリングする方法は?

特定の製品の在庫カレンダーに応じて、現在の製品ラインアイテムの使用可能な日付をミラー化したいと思います。可用性カレンダーは、その製品の所有者/管理者が記入するものです。

enter image description here

次に、その商品のラインアイテム(カートに追加)にある別の日付フィールドがあり、顧客はいつ使用/取得するかを選択できます/その特定の製品をレンタルします。

利用可能日カレンダーで確認できるように、2月19日、21日、23日、26日、28日は満席です。ポップアップカレンダーの同じ日付を無効にしたい。

どうすればそれを達成できますか?

これらは私がすでに試したモジュールです:

  • 部屋 -フォーム/ステップを使用しているため、これは当社のWebサイトには適していません。
  • Commerce Availability -これはまさに私が欲しかったものですが、私の目的では機能していません。在庫カレンダーが完全に予約されていても、日付は引き続きラインアイテムで予約可能です。私はすでに指示に従い、モジュールの設定を修正しました。

私は Easy Booking のデモも確認しました。どの日付が利用できないかを推測する必要がありましたが、これも良くありません。

よろしくお願いします!

1
Danz

残念ながら、状況を修正するために共有できる特定のコードはありません。しかし、心に留めてください!表示する前に変更するように設計されたライブラリを使用しています。つまり、カスタムのphpとjavascriptを少し使用すれば、これを実行できます。

  1. まず、ウィジェットを変更する方法を決定する必要があります

JavaScriptの使用: https://stackoverflow.com/questions/9742289/jquery-ui-date-picker-disabling-specific-dates

Drupalを使用してJavascriptに変数を送信するには: 。phpファイルから.jsファイルに変数を送信する方法は?

  1. 次に、利用可能日が保存される場所を決定する必要があります

これはおそらく最も抽象的な問題です。ノード内から可用性を保存しているようです。 devel モジュールを使用して$node = node_load(123); dpm($node);を試し、Availabilityフィールド配列がどのように見えるかを確認することをお勧めします。これは次のステップで行います。 ( 開発モジュールのLyndaシリーズ

  1. 最後に、カレンダーを微調整する方法に関する知識と、在庫が保存される場所の両方をラインアイテムフォームに関連付ける必要があります。

幸い、これは非常に簡単です。残念ながら、これは完全ではなく、実用的なソリューションを実現するにはかなりの試行錯誤が必要です。難しい方法を学ぶことへようこそ:)

<?php

/**
 * Implements hook_form_alter()
 */
function MODULE_form_alter(&$form, &$form_state, $form_id) {
  // Avoid bundle cart forms and other forms
  if (strpos($form_id, 'commerce_cart_add_to_cart_form_') === 0) {
    $current_node = menu_get_object();
    // view the current node structure for your availability
    dpm($current_node);
    // view the current product's form array
    // you may not actually need to change the form here, but
    // I anticipate you needing to attach a javascript snippet to the
    // form so that it gets run each time the ajax loads a new
    // product
    dpm($form);

    // add your js to the php form
    $js_settings = "js array for your availability?";
    $form['#attached']['js'][] = array(
      'data' => array('module' => $js_settings),
      'type' => 'setting',
    );
  }
}

?>
2
joshmiller