商品列表组件demo

一个简单的商品列表组件。 主要介绍布局栅格的应用,以及商品图片的处理方式

HTML

### 配置项中存储的是商品ID
#if($!appdata.oid1 && $appdata.oid1.size() > 0)
    ### 根据商品ID获取商品模型
    #set($offers = $offerAPI.queryByIds($appdata.oid1))

    #if($appdata.useDomain==1) 
    <div class="des-tt">    
        <div class="des-t2"><a href="$appdata.addr" target="_blank">$appdata.title2</a></div>    
        <div class="des-t1"><a href="$appdata.addr" target="_blank">$appdata.title1</a></div>    
        <div class="des-t0"><a href="$appdata.addr" target="_blank">
            <img src="$appdata.cover_img" /></a>
        </div>
    </div>
    #end

    <div class="hum-grid grid-aver-2 design-pb">
    #foreach ($offer in $offers) 
        ### 取产品图片的时候,不要指定尺寸
        #set($offerImg = $offer.image.getImage())
        <div class="grid-col design-li">
            <a href="$!offer.url" target="_blank">
            <div class="design-pic">
                #### 产品图片使用"lib/image"小组件,小组件会自动根据环境寻找合适的尺寸,生成新的图片地址,替换src
                <img src="$offerImg" data-img-pos='fill' data-x-type="lib/image" data-src="$offerImg" />
            </div>
            <div class="design-div">
                <div class="design-price">RMB $!offer.price</div>
            </div>
            </a>
        </div>
        #### 目前的布局栅格不能完全平铺,所以一行满了需要重新构建一行
        #if ((($velocityCount) % 2) == 0)
    </div>
    <div class="hum-grid grid-aver-2 design-pb">
        #end
    #end
    </div>

#else

#### 未设置offer的情况,默认自己处理,可以构建模拟的商品数据

#end

CSS

  • 宽度不要写死,占用栅格的100%即可
.des-tt{ width:100%; height:100px; overflow:hidden; position:relative; background:#fff;}
.des-t0{ width:100%; height:100px; overflow:hidden; position:absolute; z-index:0; left:0px; top:0px;}
.des-t0 img{width:100%; height:100%;}
.des-t1{ width:100%; height:20px; overflow:hidden; text-align:center; line-height:20px; font-size:16px; position:absolute; z-index:1; left:0px; top:75px;}
.des-t2{ width:100%; height:20px; overflow:hidden; text-align:center; line-height:20px; font-size:14px; position:absolute; z-index:1; left:0px; top:60px;}
.des-t1 a{ color:#000; text-decoration:none; font-weight:bold;}
.des-t2 a{ color:#000; text-decoration:none;}

.design-pb{position:relative;}
.design-li{overflow:hidden; float:left; margin-bottom:2px; border:#fff 1px solid; background:#fff; position:relative;}
.design-pic
{ 
  width:100%;
  display: -webkit-box;
  -webkit-box-pack: center;
  -webkit-box-align: center;
  overflow:hidden;
}
.design-pic img{width:100%; overflow: hidden;}

.design-div{ width:100%;}
.design-price{ width:100%; height:16px; text-align:center; line-height:16px;}

配置项

<form>
    <group title="模块标题">
        <item>
            <input name="appdata.title1" value="人气推荐°" placeholder="请输入文字" title="主标题文字" maxlength="20" />
        </item>
        <item>
            <input name="appdata.title2" value="FASHION SHOW" placeholder="请输入文字" title="副标题文字" maxlength="20" />
        </item>
        <item>
            <input name="appdata.addr" value="{{appdata.addr}}" placeholder="请输入网址" title="标题链接" />
        </item>
        <item>
            <upload name="appdata.cover_img" imgtype="image" title="标题图片" button="上传" value="{{appdata.cover_img}}" />
            <description content="推荐图片尺寸620*80px" />
        </item>
        <item>
            <yesno id="offer-common-usedomain" name="appdata.useDomain" value="1" title="标题显示"></yesno>
        </item>
    </group>
    <group title="产品设置">
        <item>
            <winport-offer-chooser name="appdata.oid1" dataList="{{appdata.oid1}}" selectedLimit="15"/>
        </item>
    </group>
</form>

配置项默认数据

  • 写了 winport-offer-chooser 组件后,设计师即可选择一些offer,作为开发组件的默认数据。

商品选择

  • 选好以后可以看见已选择的商品ID列表

商品ID列表

预览效果

预览效果

致谢

感谢设计师 阿财猫猫 ,在 阿财猫猫 提供的组件源代码基础上做了一些修改。