<span style="color: #008080;"> 1</span> <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">function</span><span style="color: #000000;"> goods_number() </span><span style="color: #008080;"> 2</span> <span style="color: #000000;"> { </span><span style="color: #008080;"> 3</span> <span style="color: #008000;">//</span><span style="color: #008000;"> 接收商品ID</span> <span style="color: #008080;"> 4</span> <span style="color: #800080;">$id</span> = I('get.id'<span style="color: #000000;">); </span><span style="color: #008080;"> 5</span> <span style="color: #800080;">$gnModel</span> = D('goods_number'<span style="color: #000000;">); </span><span style="color: #008080;"> 6</span> <span style="color: #008080;"> 7</span> <span style="color: #008000;">//</span><span style="color: #008000;"> 处理表单</span> <span style="color: #008080;"> 8</span> <span style="color: #0000ff;">if</span><span style="color: #000000;">(IS_POST) </span><span style="color: #008080;"> 9</span> <span style="color: #000000;"> {<br> //var_dump($_POST)die; </span><span style="color: #008080;">10</span> <span style="color: #008000;">//</span><span style="color: #008000;"> 先删除原库存</span> <span style="color: #008080;">11</span> <span style="color: #800080;">$gnModel</span>->where(<span style="color: #0000ff;">array</span><span style="color: #000000;">( </span><span style="color: #008080;">12</span> 'goods_id' => <span style="color: #0000ff;">array</span>('eq', <span style="color: #800080;">$id</span>), <span style="color: #008080;">13</span> ))-><span style="color: #000000;">delete(); </span><span style="color: #008080;">14</span> <span style="color: #008000;">//</span><span style="color: #008000;">var_dump($_POST);die;</span> <span style="color: #008080;">15</span> <span style="color: #800080;">$gaid</span> = I('post.goods_attr_id'<span style="color: #000000;">); </span><span style="color: #008080;">16</span> <span style="color: #800080;">$gn</span> = I('post.goods_number'<span style="color: #000000;">); </span><span style="color: #008080;">17</span> <span style="color: #008000;">//</span><span style="color: #008000;"> 先计算商品属性ID和库存量的比例</span> <span style="color: #008080;">18</span> <span style="color: #800080;">$gaidCount</span> = <span style="color: #008080;">count</span>(<span style="color: #800080;">$gaid</span><span style="color: #000000;">); </span><span style="color: #008080;">19</span> <span style="color: #800080;">$gnCount</span> = <span style="color: #008080;">count</span>(<span style="color: #800080;">$gn</span><span style="color: #000000;">); </span><span style="color: #008080;">20</span> <span style="color: #800080;">$rate</span> = <span style="color: #800080;">$gaidCount</span>/<span style="color: #800080;">$gnCount</span><span style="color: #000000;">; </span><span style="color: #008080;">21</span> <span style="color: #008000;">//</span><span style="color: #008000;"> 循环库存量</span> <span style="color: #008080;">22</span> <span style="color: #800080;">$_i</span> = 0; <span style="color: #008000;">//</span><span style="color: #008000;"> 取第几个商品属性ID</span> <span style="color: #008080;">23</span> <span style="color: #0000ff;">foreach</span> (<span style="color: #800080;">$gn</span> <span style="color: #0000ff;">as</span> <span style="color: #800080;">$k</span> => <span style="color: #800080;">$v</span><span style="color: #000000;">) </span><span style="color: #008080;">24</span> <span style="color: #000000;"> { </span><span style="color: #008080;">25</span> <span style="color: #800080;">$_goodsAttrId</span> = <span style="color: #0000ff;">array</span>(); <span style="color: #008000;">//</span><span style="color: #008000;"> 把下面取出来的ID放这里 </span><span style="color: #008080;">26</span> <span style="color: #008000;"> // 后来从商品属性ID数组中取出 $rate 个,循环一次取一个</span> <span style="color: #008080;">27</span> <span style="color: #0000ff;">for</span>(<span style="color: #800080;">$i</span>=0; <span style="color: #800080;">$i</span>$rate; <span style="color: #800080;">$i</span>++<span style="color: #000000;">) </span><span style="color: #008080;">28</span> <span style="color: #000000;"> { </span><span style="color: #008080;">29</span> <span style="color: #800080;">$_goodsAttrId</span>[] = <span style="color: #800080;">$gaid</span>[<span style="color: #800080;">$_i</span><span style="color: #000000;">]; </span><span style="color: #008080;">30</span> <span style="color: #800080;">$_i</span>++<span style="color: #000000;">; </span><span style="color: #008080;">31</span> <span style="color: #000000;"> } </span><span style="color: #008080;">32</span> <span style="color: #008000;">//</span><span style="color: #008000;"> 先升序排列</span> <span style="color: #008080;">33</span> <span style="color: #008080;">sort</span>(<span style="color: #800080;">$_goodsAttrId</span>, SORT_NUMERIC); <span style="color: #008000;">//</span><span style="color: #008000;"> 以数字的形式排序 </span><span style="color: #008080;">34</span> <span style="color: #008000;"> // 把取出来的商品属性ID转化成字符串</span> <span style="color: #008080;">35</span> <span style="color: #800080;">$_goodsAttrId</span> = (<span style="color: #0000ff;">string</span>)<span style="color: #008080;">implode</span>(',', <span style="color: #800080;">$_goodsAttrId</span><span style="color: #000000;">); </span><span style="color: #008080;">36</span> <span style="color: #800080;">$gnModel</span>->add(<span style="color: #0000ff;">array</span><span style="color: #000000;">( </span><span style="color: #008080;">37</span> 'goods_id' => <span style="color: #800080;">$id</span>, <span style="color: #008080;">38</span> 'goods_attr_id' => <span style="color: #800080;">$_goodsAttrId</span>, <span style="color: #008080;">39</span> 'goods_number' => <span style="color: #800080;">$v</span>, <span style="color: #008080;">40</span> <span style="color: #000000;"> )); </span><span style="color: #008080;">41</span> <span style="color: #000000;"> } </span><span style="color: #008080;">42</span> <span style="color: #800080;">$this</span>->success('设置成功!', U('goods_number?id='.I('get.id'<span style="color: #000000;">))); </span><span style="color: #008080;">43</span> <span style="color: #0000ff;">exit</span><span style="color: #000000;">; </span><span style="color: #008080;">44</span> <span style="color: #000000;"> } </span><span style="color: #008080;">45</span> <span style="color: #008080;">46</span> <span style="color: #008000;">//</span><span style="color: #008000;"> 根据商品ID取出这件商品所有可选属性的值</span> <span style="color: #008080;">47</span> <span style="color: #800080;">$gaModel</span> = D('goods_attr'<span style="color: #000000;">); </span><span style="color: #008080;">48</span> <span style="color: #800080;">$gaData</span> = <span style="color: #800080;">$gaModel</span>->alias('a'<span style="color: #000000;">) </span><span style="color: #008080;">49</span> ->field('a.*,b.attr_name'<span style="color: #000000;">) </span><span style="color: #008080;">50</span> -><span style="color: #008080;">join</span>('LEFT JOIN __ATTRIBUTE__ b ON a.attr_id=b.id'<span style="color: #000000;">) </span><span style="color: #008080;">51</span> ->where(<span style="color: #0000ff;">array</span><span style="color: #000000;">( </span><span style="color: #008080;">52</span> 'a.goods_id' => <span style="color: #0000ff;">array</span>('eq', <span style="color: #800080;">$id</span>), <span style="color: #008080;">53</span> 'b.attr_type' => <span style="color: #0000ff;">array</span>('eq', '可选'), <span style="color: #008080;">54</span> ))-><span style="color: #000000;">select(); </span><span style="color: #008080;">55</span> <span style="color: #008000;">//</span><span style="color: #008000;"> 处理这个二维数组:转化成三维:把属性相同的放到一起</span> <span style="color: #008080;">56</span> <span style="color: #800080;">$_gaData</span> = <span style="color: #0000ff;">array</span><span style="color: #000000;">(); </span><span style="color: #008080;">57</span> <span style="color: #0000ff;">foreach</span> (<span style="color: #800080;">$gaData</span> <span style="color: #0000ff;">as</span> <span style="color: #800080;">$k</span> => <span style="color: #800080;">$v</span><span style="color: #000000;">) </span><span style="color: #008080;">58</span> <span style="color: #000000;"> { </span><span style="color: #008080;">59</span> <span style="color: #800080;">$_gaData</span>[<span style="color: #800080;">$v</span>['attr_name']][] = <span style="color: #800080;">$v</span><span style="color: #000000;">; </span><span style="color: #008080;">60</span> <span style="color: #000000;"> } </span><span style="color: #008080;">61</span> <span style="color: #008080;">62</span> <span style="color: #008000;">//</span><span style="color: #008000;"> 先取出这件商品已经设置过的库存量</span> <span style="color: #008080;">63</span> <span style="color: #800080;">$gnData</span> = <span style="color: #800080;">$gnModel</span>->where(<span style="color: #0000ff;">array</span><span style="color: #000000;">( </span><span style="color: #008080;">64</span> 'goods_id' => <span style="color: #800080;">$id</span>, <span style="color: #008080;">65</span> ))-><span style="color: #000000;">select(); </span><span style="color: #008080;">66</span> <span style="color: #008000;">//</span><span style="color: #008000;">var_dump($gnData);</span> <span style="color: #008080;">67</span> <span style="color: #008080;">68</span> <span style="color: #800080;">$this</span>->assign(<span style="color: #0000ff;">array</span><span style="color: #000000;">( </span><span style="color: #008080;">69</span> 'gaData' => <span style="color: #800080;">$_gaData</span>, <span style="color: #008080;">70</span> 'gnData' => <span style="color: #800080;">$gnData</span>, <span style="color: #008080;">71</span> <span style="color: #000000;"> )); </span><span style="color: #008080;">72</span> <span style="color: #008080;">73</span> <span style="color: #008000;">//</span><span style="color: #008000;"> 设置页面信息</span> <span style="color: #008080;">74</span> <span style="color: #800080;">$this</span>->assign(<span style="color: #0000ff;">array</span><span style="color: #000000;">( </span><span style="color: #008080;">75</span> '_page_title' => '库存量', <span style="color: #008080;">76</span> '_page_btn_name' => '返回列表', <span style="color: #008080;">77</span> '_page_btn_link' => U('lst'), <span style="color: #008080;">78</span> <span style="color: #000000;"> )); </span><span style="color: #008080;">79</span> <span style="color: #008000;">//</span><span style="color: #008000;"> 1.显示表单</span> <span style="color: #008080;">80</span> <span style="color: #800080;">$this</span>-><span style="color: #000000;">display(); </span><span style="color: #008080;">81</span> }