【问题标题】:Write foreach loop in session在会话中编写 foreach 循环
【发布时间】:2015-12-20 20:18:22
【问题描述】:

我有一个包含以下代码的 foreach 循环:

{foreach name=aussen item=products_data from=$products}
        <div class="cart-item clearfix">
            <div class="cart-item-inner clearfix">
                {if $products_data.IMAGE}<a href="{$products_data.LINK}"><img alt="" style="max-width: 40px; max-height: 40px; border: 0pt none; margin: 0px 10px 0px 0pt; float: left;" src="{$products_data.IMAGE}" /></a>{/if}
                <p><div id="testimg" style="display: none;">{$products_data.IMAGE}</div>{$products_data.QTY}{if $products_data.UNIT} {$products_data.UNIT}{else}x{/if} {$products_data.NAME}<br/><span class="price">{$products_data.PRICE}</span></p>
            </div>
        </div>
        {/foreach}
        <div id="dropdown_shopping_cart_total">
            <span>{$txt.text_total} {$TOTAL}</span>
        </div>
        <p class="mwst-hint">{$UST} {if $SHIPPING_INFO}{$SHIPPING_INFO}{/if}</p>
        <div class="cart-button"><a class="button_blue button_set" href="{'shopping_cart.php'|xtc_href_link}"><span class="button-outer"><span class="button-inner">{$button.to_cart}</span></span></a></div>

    {else}
        <div class="cart-item clearfix">
            <div class="cart-item-inner clearfix">
                <p>{$txt.text_empty_cart}</p>
            </div>
        </div>

这是购物车下拉菜单的内容。我得到了另一个文件,其中包含网站上的产品列表。它允许您向购物车添加一些东西。有一个输入字段和一个购物车按钮。

现在对于某些产品,我想限制一次可以购买多少。这意味着我必须将输入字段的值与已放入购物车的产品数量进行比较。问题是{$products_data.QTY} 位于输入字段和添加到购物车按钮之外的另一个文件中。

到目前为止,我尝试为{$products_data.QTY} 提供一个 ID,然后单击 addtocart 按钮将输入字段与 DivID 进行比较。问题是 DivID 是固定的,这意味着如果我比较它们,它总是将输入字段与第一个 DIV 进行比较。

现在我的想法是让上述 foreach 循环中的产品进入会话,这样我就可以在这一点上进行比较。

有人有经验如何让 foreach 循环进入会话?

【问题讨论】:

  • 请原谅我的无知,但为什么你的代码用大括号括起来?那是一些框架吗?如果是,我建议您编辑您的问题并标记其名称。
  • @wrxsti 我不这么认为,ember.js 每边都有两个花括号,这是......我不知道,看起来像 PHP 语法,但有一些奇怪的东西。
  • 你甚至使用什么样的语法?那是def不是JS ...如果您尝试访问的数据在会话变量中,则使用PHP全局'$_SESSION'...和或将PHP会话数据var打印到JS var中并将JS var保存为一个“window.session”变量。
  • foreach name=aussen item=products_data from=$products 以上帝的名义这是什么?我很好奇!如果是我想研究的框架,看起来很紧凑!
  • 我认为它是聪明的模板

标签: javascript php jquery foreach smarty


【解决方案1】:

购物篮 $products (product_data) 中的单个商品是否具有唯一的 productId 或唯一的 productNumber? 在产品页面上,这个唯一的 productId 或 productNumber 是否也可用? 如果是这种情况,那么也许您可以使用此 ID 在您的产品页面中检查购物篮中已有的金额。

如果您的购物篮产品使用 productId 作为键,可能会更容易。

{$products = [
    productId1 => ['amount' => 2, otherinfo...], 
    productId2 => ['amount' => 1, otherinfo...]
]}

在这种情况下,您只需检查 {$products[$productId]['amount']},然后在产品页面中使用 html 或 js 设置最大值。我假设您的产品页面中提供了 shoppingcart 变量。

我知道这种键值方式可能不是你的方式(如果框架不能那样工作)。所以至少要确保你的购物篮中的产品数组有productId。然后,您可以循环您的购物篮并检查产品是否已经存在以及购物篮中有多少。

{$products = [
    0 => ['id' => productId1, 'amount' => 2],
    1 => ['id' => productId2, 'amount' => 1]
]}

//loop products from shopping basket in product page
{foreach $products as $product}
    {if $product['id'] == $currentProduct['id']}
         //do something to limit the number to be ordered
    {/if}
{/foreach}

这假设产品在购物车中只能存在一次,并使用金额作为计数器。如果一个产品可以存在多次,你首先要计算产品被放入购物车的次数。

我使用了 smarty 3 循环。您可以随时将其更改为您需要的 smarty 版本。

我无法告诉您会话中产品的确切变量是什么,这可能取决于您的框架...我喜欢使用 print_r($arrayYouWantToSee) 查看哪些项目/键/值可用于我为某个数组,也许你也可以使用它:)

【讨论】:

    猜你喜欢
    • 2013-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-09
    • 2014-06-08
    相关资源
    最近更新 更多