この関数を使用してカスタムモジュールのフックフォーム変更でカートに追加ボタンをオーバーライドしようとしましたが、エラーが発生しました致命的なエラー:致命的なフレックススキャナーの内部エラーバッファーの終わりがありません。問題は何ですか?
function uc_button_form_alter($form_id, &$form_state, $node) {
if ($form_id == 'edit-submit-' . $node->nid) {
$form['submit']['#attributes']= array(
'class' => 'node-add-to-cart',
'xxx' => 'xxx',
);
}
};
ありがとうございました
D7では、さまざまな製品クラスのソリューションを以下に示します。
/* Overrides the Add to Cart form text*/
if ( !empty($form['nid']) ) {
$node = $form['nid']['#value'];
}
else {
$node = 0;
}
if (($form_id == 'uc_product_add_to_cart_form_'.$node) and ($form['node']['#value']->type =='uc_recurring_subscription')){
$form['actions']['submit']['#value'] = t('Subscribe');
}
if (($form_id == 'uc_product_add_to_cart_form_'.$node) and ($form['node']['#value']->type =='credit')){
$form['actions']['submit']['#value'] = t('Buy');
}
通常の製品または1つの製品クラスのみの場合、これでうまくいくはずです。
/* Overrides the Add to Cart form text*/
if ( !empty($form['nid']) ) {
$node = $form['nid']['#value'];
}
else {
$node = 0;
}
if (($form_id == 'uc_product_add_to_cart_form_'.$node){
$form['actions']['submit']['#value'] = t('Buy now');
}
関数の引数が間違っています。 hook_form_alter docs を参照してください。
したがって、基本的には次のように関数を書き直す必要があります。
まず、正しいフォームを取得します。ID.form_alter関数には$ nodeがありませんが、一部のフォームでは、完全なノードオブジェクトフォームが$ formにあります。したがって、次のコードを使用します。メッセージ領域にフォームIDと$ formの配列の説明を含む少なくとも2つのメッセージが表示されます。
function uc_button_form_alter(&$form, &$form_state, $form_id) {
drupal_set_message($form_id);
drupal_set_message('<pre>'.print_r($form, 1).'</pre>');
};
次に、探しているノードIDが$ form配列で使用できるかどうかを確認します。 (ほとんどの場合、それは$ form ['#node']にあります)。これで、関数を実際のコードに変更できます。
function uc_button_form_alter(&$form, &$form_state, $form_id) {
if (isset($form['#node']->nid) && $form_id == 'edit-submit-' . $form['#node']->nid) {
$form['submit']['#attributes']['class'] = 'node-add-to-cart';
$form['submit']['#attributes']['xxx'] = 'xxx'; // we don't want to clear existing values.
}
};
ただし、この実装でさえも必要ありません。ボタンにクラスを追加するだけの場合は、トリッキーなネストでデフォルトクラスを使用できます。
3番目のコメントの後に更新:これを試してください:
function uc_button_form_alter(&$form, &$form_state, $form_id) {
if (isset($form['nid']['#value']) && $form_id == 'edit-submit-' . $form['nid']['#value']) {
$form['submit']['#attributes']['class'] = 'node-add-to-cart';
$form['submit']['#attributes']['xxx'] = 'xxx'; // we don't want to clear existing values.
}
};