Commerce kickstart产品变更页面,如何在没有Ajax调用的情况下更新表单值

时间:2015-04-14 05:00:16

标签: drupal drupal-7 commerce-kickstart

使用Commerce Kickstart建立电子商务网站2.我有一系列产品的标准结构。

每种产品都有许多产品变化,主要是颜色变化。

我的客户要求在一个页面上显示产品的所有颜色变化。

实际上,最终用户应该看到一系列产品,点击产品查看所有可用的颜色,然后单击一种颜色,最终在产品页面(节点页面)上显示以下功能。< / p>

  • 具有不同产品角度的图像幻灯片
  • 产品名称&amp;说明
  • 颜色变化名称
  • 产品价格
  • 用于查看其他可用颜色的彩色缩略图
  • 添加到购物车等...

实施上述所有方法都没有问题。我必须在单击产品变体时覆盖默认行为,这会导致产品变体管理页面,以便定向到节点页面。

我目前面临的问题是在用户到达产品页面时更新默认的产品差异图片。

在视图中,我设置了一个网址,例如

   node/nid/product_id

使用hook_form_alter,我可以通过从url&amp;中检索产品ID来更新一些$ form_state值。加载相应的实体。

 function mymodule_form_alter(&$form, &$form_state, $form_id)
 {
    // Here I have some code that retrieves the product ID
    // from the url...
    $form_state['values']['product_id'] = $product_id;

    // Some code that loads the product variation with 
    // entity load...
    $form_state['default_product'] = $current_product_variation;
 }

现在,当用户到达节点页面时,除图像外,所有内容都会更新!

如果我点击&#34;添加到购物车&#34; ,我有预期的产品,描述,颜色变化名称。实际上,除了图像之外,一切似乎都有效。

我在更新$ form_state值之前尝试清除缓存,不知怎的,我无法修复此问题。

我可以模拟一个Ajax调用,但这似乎是一个不必要的黑客,无论如何,这会导致图像在页面加载时闪烁。

当我使用Devel检查$表单时,我可以看到需要更新的各个地方,主要是与订单项有关,但我还没有找到一个允许我更新产品页面的非Ajax解决方案。

我错过了什么?

1 个答案:

答案 0 :(得分:0)

我很满意更新表格&amp; form_state值,我完全忽略了产品显示图像不是从表单呈现的事实,而是节点!

在hook_preprocess_node中更新图像就可以了。