web-dev-qa-db-ja.com

コマースカートフォームページのカスタマイズ

仕事

Drupal 7のコマースモジュールの_site.com/cart_ページでカートフォームビューShopping cart form (Commerce Order)を変更するように発行されました。これには、サイズなどの追加の選択肢の追加が含まれます各製品の数量を更新するだけです。

これまでの私の試み

_commerce_cart_block_を上書きしてみましたが、コンテンツを担当していたのは_commerce_cart_form_であることに気づきました。 Commerce Cart View Override というモジュールを試しましたが、コンテンツを表示するためにテンプレート内に_views-view--commerce-cart-form.tpl.php_というテンプレートファイルを含めるのに役立ちます。

しかし、私は今何をすべきか本当にわかりません。私の考えでは、アイテムとそれを囲むフォームを表示するテーブルをオーバーライドします。渡された変数が非常に多いことを理解するために、テンプレートでget_defined_vars()をエコーし​​ました。

質問

私が望むのは、すべての/ cartページで既存のカートセッションを変更するフォームを追加し、現在のカートテーブルを完全に制御できるエレガントなソリューションです。

/ cartページをカスタマイズするための理想的な方法は何ですか?私は正しい道を進んでいますか、それとも私が見逃したいくつかの単純な代替案がありますか?個人的には、データベースに保存されたソリューションではなく、コード化されたソリューションが必要です。

3
Robin Castlin

ビューでの/ cartページの編集

これは期待されるアプローチだと思います。注:これは、ビューの使い方がわかっていることを前提としています。

  1. インストール Commerce Cart View Override を実行します。
  2. Shopping Cart Formという名前のビューを編集し、それを複製して、マシン名をcommerce_cart_formで始まるcommerce_cart_form_customのような名前に変更します。
  3. 管理ページadmin/commerce/config/cart-overrides(管理>>ストア>>構成>>カートの上書き)のドロップダウンでこれを選択し、保存します。
  4. この新しいビューを編集して、/cartページに表示されるビューを編集できるようになりました。直感的でないヒント:
    • ビュープレビューでプレビューを表示するには、プレビューの上にある[コンテキストフィルター付きプレビュー]ボックスにショッピングカートID番号を入力する必要があります。 /admin/commerce/orders/cartsでショッピングカートのID番号を確認できます。 ID番号を入力するだけで、他のテキストは必要ありません。
    • product imagesなど、商品のビューフィールドを追加するには、Line ItemsからProductsに新しい関係を追加する必要があります。ビューUIの[詳細設定]の[リレーションシップ]で、[追加]をクリックし、Commerce Line item:Referenced productsを選択します。画像や分類タグなどの製品フィールドは、[フィールド]で使用できるようになります。
    • Commerce Cart構成の一般的な混乱:ログインしていない顧客に[チェックアウト]ボタンが表示されない場合は、admin/people/permissionsにアクセスして、[チェックアウトへのアクセス]の横にある[匿名ユーザー]チェックボックスをオンにする必要があります
    • ボタンのラベル、たとえば「削除」ボタンを変更したい場合は...まったく別の話です。フォーム要素は、Drupalエコシステムのまったく異なる部分で生成され、この事前レンダリングされたようなビューに配置されます。ビューで編集できるのは、ボタンの横または上に表示されるラベルだけです。ボタン自体を編集するには、PHPコード:

ボタンなどのフォーム要素の編集

カスタムモジュールまたはテーマのtemplate.phpファイル(別の管理テーマを使用する場合、template.phpはビューのプレビューに影響を与えず、顧客向けページのみに影響することに注意してください)のようなものを追加します( クレジット ):

function yourthemename_form_alter(&$form, $form_state, $form_id) {
  switch ($form_id)  {
  case 'views_form_commerce_cart_form_custom_default': 
  //               ^ from here on should match the view machine name from earlier 
  //                                         ^ from here, the particular view display, which you can see at the end of the Views UI URL while editting that display 
      foreach ($form['edit_delete'] as $row_id => $row) {
        if(isset($form['edit_delete'][$row_id]['#value'])){
            $form['edit_delete'][$row_id]['#value'] = 'New delete button label';
            }
        }

    $form['actions']['checkout']['#value'] = 'New checkout button label';
    $form['actions']['submit']['#value'] = 'New update button label';

  break;
  }
}