📄 productdetail.ftl
字号:
<input type="text" class="inputBox" size="5" name="quantity" value="1"<#if product.isVirtual?if_exists?upper_case == "Y"> disabled="disabled"</#if>/> </#if> <#-- This calls addItem() so that variants of virtual products cant be added before distinguishing features are selected, it should not be changed to additemSubmit() --> <a href="javascript:addItem()" class="buttontext"><nobr>${uiLabelMap.EcommerceAddtoCart}</nobr></a> </#if> <#if requestParameters.category_id?exists> <input type="hidden" name="category_id" value="${requestParameters.category_id}"/> </#if> </#if> </form> <div class="tabletext"> <#if sessionAttributes.userLogin?has_content && sessionAttributes.userLogin.userLoginId != "anonymous"> <hr class="sepbar"/> <form name="addToShoppingList" method="post" action="<@ofbizUrl>addItemToShoppingList<#if requestAttributes._CURRENT_VIEW_?exists>/${requestAttributes._CURRENT_VIEW_}</#if></@ofbizUrl>"> <input type="hidden" name="productId" value="${requestParameters.product_id}"/> <input type="hidden" name="product_id" value="${requestParameters.product_id}"/> <input type="hidden" name="productStoreId" value="${productStoreId}"/> <input type="hidden" name="reservStart" value= ""/> <select name="shoppingListId" class="selectBox"> <#if shoppingLists?has_content> <#list shoppingLists as shoppingList> <option value="${shoppingList.shoppingListId}">${shoppingList.listName}</option> </#list> </#if> <option value="">---</option> <option value="">${uiLabelMap.EcommerceNewShoppingList}</option> </select> <#if product.productTypeId?if_exists == "ASSET_USAGE"> <table><tr><td> </td><td class="tabletext" align="right">Start Date (yyyy-mm-dd)</td><td><input type="text" class="inputBox" size="10" name="reservStartStr" ></td><td class="tabletext">Number of days</td><td><input type="text" class="inputBox" size="4" name="reservLength"></td><td> </td><td class="tabletext" align="right">Number of persons</td><td><input type="text" class="inputBox" size="4" name="reservPersons" value="1"></td><td class="tabletext" align="right">Qty </td><td><input type="text" class="inputBox" size="5" name="quantity" value="1"></td></tr></table> <#else> <input type="text" class="inputBox" size="5" name="quantity" value="1"/> <input type="hidden" name="reservStartStr" value= ""/> </#if> <a href="javascript:addShoplistSubmit();" class="buttontext">${uiLabelMap.EcommerceAddtoShoppingList}</a> </form> <#else> <br/> ${uiLabelMap.EcommerceYouMust} <a href="<@ofbizUrl>checkLogin/showcart</@ofbizUrl>" class="buttontext">${uiLabelMap.CommonLogin}</a> ${uiLabelMap.EcommerceToAddSelectedItemsToShoppingList}. </#if> </div> <#-- Prefill first select box (virtual products only) --> <#if variantTree?exists && 0 < variantTree.size()> <script language="JavaScript" type="text/javascript">eval("list" + "${featureOrderFirst}" + "()");</script> </#if> <#-- Swatches (virtual products only) --> <#if variantSample?exists && 0 < variantSample.size()> <#assign imageKeys = variantSample.keySet()> <#assign imageMap = variantSample> <p> </p> <table cellspacing="0" cellpadding="0"> <tr> <#assign maxIndex = 7> <#assign indexer = 0> <#list imageKeys as key> <#assign swatchProduct = imageMap.get(key)> <#if swatchProduct?has_content && indexer < maxIndex> <#assign imageUrl = Static["org.ofbiz.product.product.ProductContentWrapper"].getProductContentAsText(swatchProduct, "SMALL_IMAGE_URL", request)?if_exists> <#if !imageUrl?has_content> <#assign imageUrl = productContentWrapper.get("SMALL_IMAGE_URL")?if_exists> </#if> <#if !imageUrl?has_content> <#assign imageUrl = "/images/defaultImage.jpg"> </#if> <td align="center" valign="bottom"> <a href="javascript:getList('FT${featureOrderFirst}','${indexer}',1);"><img src="<@ofbizContentUrl>${contentPathPrefix?if_exists}${imageUrl}</@ofbizContentUrl>" border="0" width="60" height="60"></a> <br/> <a href="javascript:getList('FT${featureOrderFirst}','${indexer}',1);" class="linktext">${key}</a> </td> </#if> <#assign indexer = indexer + 1> </#list> <#if (indexer > maxIndex)> <div class="tabletext"><b>More options available in drop down.</b></div> </#if> </tr> </table> </#if> </td> </tr></table> <#-- Digital Download Files Associated with this Product --> <#if downloadProductContentAndInfoList?has_content> <div id="download-files"> <div class="tableheadtext">${uiLabelMap.EcommerceDownloadFilesTitle}:</div> <#list downloadProductContentAndInfoList as downloadProductContentAndInfo> <div class="tabletext">${downloadProductContentAndInfo.contentName}<#if downloadProductContentAndInfo.description?has_content> - ${downloadProductContentAndInfo.description}</#if></div> </#list> </div> </#if> <#-- Long description of product --> <div id="long-description"> <div class="tabletext">${productContentWrapper.get("LONG_DESCRIPTION")?if_exists}</div> </div> <#-- Any attributes/etc may go here --> <#-- Product Reviews --> <div id="reviews"> <div class="tableheadtext">${uiLabelMap.EcommerceCustomerReviews}:</div> <#if averageRating?exists && (averageRating?double > 0) && numRatings?exists && (numRatings?double > 1)> <div class="tabletext">${uiLabelMap.EcommerceAverageRating}: ${averageRating} <#if numRatings?exists>(${uiLabelMap.CommonFrom} ${numRatings} ${uiLabelMap.EcommerceRatings})</#if></div> </#if> <tr><td colspan="2"><hr class="sepbar"/></td></tr> <#if productReviews?has_content> <#list productReviews as productReview> <#assign postedUserLogin = productReview.getRelatedOne("UserLogin")> <#assign postedPerson = postedUserLogin.getRelatedOne("Person")?if_exists> <table border="0" cellpadding="0" cellspacing="0"> <tr> <td> <div class="tabletext"><b>${uiLabelMap.CommonBy}: </b><#if productReview.postedAnonymous?default("N") == "Y"> ${uiLabelMap.EcommerceAnonymous}<#else> ${postedPerson.firstName} ${postedPerson.lastName} </#if></div> </td> <td> <div class="tabletext"><b>${uiLabelMap.CommonAt}: </b>${productReview.postedDateTime?if_exists} </div> </td> <td> <div class="tabletext"><b>${uiLabelMap.EcommerceRanking}: </b>${productReview.productRating?if_exists?string}</div> </td> </tr> <tr> <td colspan="3"> <div class="tabletext"> </div> </td> </tr> <tr> <td colspan="3"> <div class="tabletext">${productReview.productReview?if_exists}</div> </td> </tr> <tr><td colspan="3"><hr class="sepbar"/></td></tr> </table> </#list> <div> <a href="<@ofbizUrl>reviewProduct?category_id=${categoryId?if_exists}&product_id=${product.productId}</@ofbizUrl>" class="linktext">${uiLabelMap.ProductReviewThisProduct}!</a> </div> <#else> <div class="tabletext">${uiLabelMap.ProductProductNotReviewedYet}.</div> <div> <a href="<@ofbizUrl>reviewProduct?category_id=${categoryId?if_exists}&product_id=${product.productId}</@ofbizUrl>" class="linktext">${uiLabelMap.ProductBeTheFirstToReviewThisProduct}!</a> </div> </#if> </div><#-- Upgrades/Up-Sell/Cross-Sell --> <#macro associated assocProducts beforeName showName afterName formNamePrefix targetRequestName> <#assign targetRequest = "product"> <#if targetRequestName?has_content> <#assign targetRequest = targetRequestName> </#if> <#if assocProducts?has_content> <div class="head2">${beforeName?if_exists}<#if showName == "Y">${productValue.productName}</#if>${afterName?if_exists}</div> <div class="productsummary-container"> <#list assocProducts as productAssoc> <div class="tabletext"> <a href="<@ofbizUrl>${targetRequest}/<#if categoryId?exists>~category_id=${categoryId}/</#if>~product_id=${productAssoc.productIdTo?if_exists}</@ofbizUrl>" class="buttontext"> ${productAssoc.productIdTo?if_exists} </a> - <b>${productAssoc.reason?if_exists}</b> </div> ${setRequestAttribute("optProductId", productAssoc.productIdTo)} ${setRequestAttribute("listIndex", listIndex)} ${setRequestAttribute("formNamePrefix", formNamePrefix)} <#if targetRequestName?has_content> ${setRequestAttribute("targetRequestName", targetRequestName)} </#if> ${screens.render(productsummaryScreen)} <#local listIndex = listIndex + 1> </#list> </div> ${setRequestAttribute("optProductId", "")} ${setRequestAttribute("formNamePrefix", "")} ${setRequestAttribute("targetRequestName", "")} </#if></#macro><#assign productValue = product><#assign listIndex = 1>${setRequestAttribute("productValue", productValue)}<div id="associated-products"> <#-- obsolete --> <@associated assocProducts=obsoleteProducts beforeName="" showName="Y" afterName=" is made obsolete by these products:" formNamePrefix="obs" targetRequestName=""/> <#-- cross sell --> <@associated assocProducts=crossSellProducts beforeName="" showName="N" afterName="You might be interested in these as well:" formNamePrefix="cssl" targetRequestName="crosssell"/> <#-- up sell --> <@associated assocProducts=upSellProducts beforeName="Try these instead of " showName="Y" afterName=":" formNamePrefix="upsl" targetRequestName="upsell"/> <#-- obsolescence --> <@associated assocProducts=obsolenscenseProducts beforeName="" showName="Y" afterName=" makes these products obsolete:" formNamePrefix="obce" targetRequestName=""/></div><#-- special cross/up-sell area using commonFeatureResultIds (from common feature product search) --><#if commonFeatureResultIds?has_content> <div class="head2">Similar Products That Might Interest You...</div> <div class="productsummary-container"> <#list commonFeatureResultIds as commonFeatureResultId> ${setRequestAttribute("optProductId", commonFeatureResultId)} ${setRequestAttribute("listIndex", commonFeatureResultId_index)} ${setRequestAttribute("formNamePrefix", "cfeatcssl")} <#-- ${setRequestAttribute("targetRequestName", targetRequestName)} --> ${screens.render(productsummaryScreen)} </#list> </div></#if></div>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -