商品フォームとカートフォームのボタンの言語を変更しようとしています。
すべてが製品フォームでうまく機能していますが、カートページに同じものが実装されると、正しく送信されなくなります。ボタンの値は変わりますが、機能しなくなります。
<?php
/**
**Custom Module for hook_form_alter
*/
function MYMODULE_form_alter(&$form, &$form_state, $form_id){
if ($form_id == uc_product_add_to_cart_form_1){
$form['submit']['#value'] = 'Register';
}
if ($form_id == uc_cart_view_form){
//dsm($form);
$form['continue_shopping']['#value'] = 'Back';
$form['update']['#value'] = 'Update';
$form['checkout']['#value'] = 'Continue';
}
}
?>
どんな助けでも大歓迎です。
Drupal.orgにこの問題に関するスレッドがあり、この問題を解決するためのパッチもあります。
http://drupal.org/node/1170364
ボタンのテキストを変更すると通常の動作が崩れる理由の簡単な説明(これは少し「面白い」):
c_cart_view_form_submit() のコードを見てみましょう。主にコメントの下の部分 "//ボタンに基づいて適切なリダイレクトを指定します参加する"。クリックされたボタンのtextが検査されるスイッチブロックがあることがわかります($form_state['clicked_button']['#value']
)。これは非常に悪い習慣です。ロジックは、このボタンが表示するように設定されているテキストによって異なります。つまり、プログラムでボタンのテキストを単に変更すると、適切なリダイレクトが機能しなくなります。正直なところ、Ubercartのこの部分がこのように開発された理由がよくわかりません。
私はUbercartコアにパッチを適用せずにカスタムモジュールでそれを解決しました、いくつかのテストの後に機能します。以下のコードを見つけることができます。
「買い物を続ける」テキストの変更について:
/admin/store/settings/cart/edit/basic
ページで簡単に変更できます。これは多言語変数であるため、これを変更する適切な方法です。 「Custom continue shopping link text:
」テキストフィールドに別の名前を入力し、変更を保存します。あなたはここにそれのスクリーンショットを見ることができます: $set_continue_shopping_type_programatically
をTRUE
に設定して試す必要があります-最初の方法を使用することをお勧めします)以下がテスト済みで動作するコードです。
// ...
// you should change MYMODULE to your module's name
/**
* Implementation of hook_form_alter()
* @see http://api.drupal.org/api/drupal/developer%21hooks%21core.php/function/hook_form_alter/6
*/
function MYMODULE_form_alter(&$form, &$form_state, $form_id)
{
// for testing, you can output the appropriate $form_id variable
// to detect the form id(s) of the actual form(s) printed to the page
// e.g. by using Devel module: http://drupal.org/project/devel
/*
if(function_exists('dsm'){
dsm('Actual $form_id:');
dsm($form_id);
}
*/
// You can just simply toggle overriding the default cart button values
// with setting the variable below to "TRUE" or "FALSE" (without the quotes)
// (this can be good for testing!)
$modify_default_ubercart_buttons = TRUE;
switch ($form_id) {
// CHANGE IT TO THE APPROPRIATE $form_id!!!
case 'uc_product_add_to_cart_form_1':
// dsm($form);
if($modify_default_ubercart_buttons){
$form['submit']['#value'] = 'Register';
}
break;
case 'uc_cart_view_form':
// dsm($form);
if ($modify_default_ubercart_buttons) {
$form['#submit'][] = 'testModule_form_alter_uc_cart_view_form_submit';
// 1.) changing the "Update cart" button's text
$form['update']['#value'] = 'Update';
// if you modify the "#name" attribute, you also have to modify it in testModule_form_alter_uc_cart_view_form_submit()
$form['update']['#name'] = 'update-cart';
// 2.) changing the "Checkout" button's text
$form['checkout']['#value'] = 'Continue';
// if you modify the "#name" attribute, you also have to modify it in testModule_form_alter_uc_cart_view_form_submit()
$form['checkout']['#name'] = 'cart-checkout';
// IMPORTANT!!!
// You should rather set the "Continue shopping element display" on the "/admin/store/settings/cart/edit/basic" page!
// This is a multilingual variable, so setting it on the appropriate admin page is the best solution.
// The code below is just a sample for setting it programatically!
$set_continue_shopping_type_programatically = FALSE;
if ($set_continue_shopping_type_programatically) {
$uc_continue_shopping_type = variable_get(uc_continue_shopping_type, 'link');
$continue_shopping_link_text = 'Back';
// $continue_shopping_link_path = uc_cart_continue_shopping_url();
if ($uc_continue_shopping_type == 'link') {
$continue_shopping_link_markup = l($continue_shopping_link_text, $continue_shopping_link_path);
$form['continue_shopping']['#value'] = $continue_shopping_link_markup;
} else {
$form['continue_shopping']['#value'] = $continue_shopping_link_text;
// the default "#name" attribute equals to "op" by default
// we change it to the desired button text to make it clear
$form['continue_shopping']['#name'] = $continue_shopping_link_text;
}
}
}
// ...
break;
}
}
/**
* Ubercart submit function needed because of button text altering
* @see http://drupal.org/node/1170364
*/
function MYMODULE_form_alter_uc_cart_view_form_submit($form, &$form_state)
{
// Specify the appropriate redirect based on the button used to submit.
switch ($form_state['clicked_button']['#name']) {
// Update cart button.
case 'update-cart':
// No redirect. Just display a message and preserve the last URL.
drupal_set_message(t('Your cart has been updated.'));
break;
// Checkout button.
case 'cart-checkout':
$form_state['redirect'] = variable_get('uc_checkout_enabled', TRUE) ? 'cart/checkout' : 'cart';
break;
}
}
// ...
ボタンのテキストを変更することについてのスクリーンショットもいくつか投稿しました。
「カートに追加」ボタンのテキストを変更する:
前:
後:
「ショッピングカート」ページのボタンの変更:
前:
AFTER( "Continue shopping"as a "Text link"):
AFTER( "Continue shopping"as a "Button"):
これを試して
function MYMODULE_form_alter(&$form, &$form_state, $form_id){
if ($form_id == 'uc_product_add_to_cart_form_1'){
$form['submit']['#value'] = 'Register';
}
if ($form_id == 'uc_cart_view_form'){
//dsm($form);
$form['continue_shopping']['#value'] = 'Back';
$form['update']['#value'] = 'Update';
$form['checkout']['#value'] = 'Continue';
}
}
おかげでSk8erPeter