📄 productdetail.bsh
字号:
facilityId = productStore.getString("inventoryFacilityId");
productFacility = delegator.findByPrimaryKeyCache("ProductFacility", UtilMisc.toMap("productId", productId, "facilityId", facilityId));
if (productFacility != null && productFacility.get("daysToShip") != null) {
context.put("daysToShip", productFacility.get("daysToShip"));
}
// Special Variant Code
if ("Y".equals(product.getString("isVirtual"))) {
featureMap = dispatcher.runSync("getProductFeatureSet", UtilMisc.toMap("productId", productId));
featureSet = featureMap.get("featureSet");
if (featureSet != null && featureSet.size() > 0) {
variantTreeMap = dispatcher.runSync("getProductVariantTree", UtilMisc.toMap("productId", productId, "featureOrder", featureSet, "productStoreId", productStoreId));
variantTree = variantTreeMap.get("variantTree");
imageMap = variantTreeMap.get("variantSample");
if (variantTree != null) {
request.setAttribute("variantTree", variantTree);
request.setAttribute("variantTreeSize", new Integer(variantTree.size()));
}
if (imageMap != null) {
request.setAttribute("variantSample", imageMap);
request.setAttribute("variantSampleKeys", imageMap.keySet());
request.setAttribute("variantSampleSize", new Integer(imageMap.size()));
}
request.setAttribute("featureSet", featureSet);
if (variantTree != null && variantTree.size() > 0) {
featureOrder = new LinkedList(featureSet);
foi = featureOrder.iterator();
while (foi.hasNext()) {
featureKey = foi.next();
featureValue = delegator.findByPrimaryKeyCache("ProductFeatureType", UtilMisc.toMap("productFeatureTypeId", featureKey));
fValue = featureValue.get("description") != null ? featureValue.getString("description") : featureValue.getString("productFeatureTypeId");
featureTypes.put(featureKey, fValue);
}
}
request.setAttribute("featureTypes", featureTypes);
request.setAttribute("featureOrder", featureOrder);
if (featureOrder.size() > 0) {
request.setAttribute("featureOrderFirst", featureOrder.get(0));
}
if (variantTree != null && imageMap != null) {
jsBuf = new StringBuffer();
jsBuf.append("<script language=\"JavaScript\">");
jsBuf.append("var DET = new Array(" + variantTree.size() + ");");
jsBuf.append("var IMG = new Array(" + variantTree.size() + ");");
jsBuf.append("var OPT = new Array(" + featureOrder.size() + ");");
jsBuf.append("var detailImageUrl = null;");
for (li = 0; li < featureOrder.size(); li++) {
jsBuf.append("OPT[" + li + "] = \"FT" + featureOrder.get(li) + "\";");
}
// build the top level
topLevelName = featureOrder.get(0);
jsBuf.append("function list" + topLevelName + "() {");
jsBuf.append("document.forms[\"addform\"].elements[\"FT" + topLevelName + "\"].options.length = 1;");
jsBuf.append("document.forms[\"addform\"].elements[\"FT" + topLevelName + "\"].options[0] = new Option(\"" + featureTypes.get(topLevelName) + "\",\"\",true,true);");
if (variantTree != null) {
vTreeKeySet = variantTree.keySet();
vti = vTreeKeySet.iterator();
firstDetailImage = null;
firstLargeImage = null;
counter = 0;
while (vti.hasNext()) {
key = vti.next();
value = variantTree.get(key);
opt = null;
if (featureOrder.size() == 1) {
opt = value.iterator().next();
} else {
opt = "" + counter;
}
// create the variant content wrapper
contentWrapper = new ProductContentWrapper(((GenericValue) imageMap.get(key)), request);
// get the default image
virtualDetailImage = productContentWrapper.get("DETAIL_IMAGE_URL");
virtualLargeImage = productContentWrapper.get("LARGE_IMAGE_URL");
// initial image paths
detailImage = contentWrapper.get("DETAIL_IMAGE_URL");
largeImage = contentWrapper.get("LARGE_IMAGE_URL");
if (detailImage == null || detailImage.length() == 0) {
detailImage = virtualDetailImage;
}
if (largeImage == null || largeImage.length() == 0) {
largeImage = virtualLargeImage;
}
// full image URLs
detailImageUrl = null;
largeImageUrl = null;
// append the content prefix
if (detailImage != null && detailImage.length() > 0) {
detailImageUrl = ContentUrlTag.getContentPrefix(request) + detailImage;
// base64 encode the image url for a little protection
detailImageUrl = URLEncoder.encode(Base64.base64Encode(detailImageUrl), "UTF-8");
}
if (largeImage != null && largeImage.length() > 0) {
largeImageUrl = ContentUrlTag.getContentPrefix(request) + largeImage;
}
jsBuf.append("document.forms[\"addform\"].elements[\"FT" + topLevelName + "\"].options[" + (counter+1) + "] = new Option(\"" + key + "\",\"" + opt + "\");");
jsBuf.append("DET[" + counter + "] = \"" + detailImageUrl +"\";");
jsBuf.append("IMG[" + counter + "] = \"" + largeImageUrl +"\";");
if (firstDetailImage == null || firstDetailImage.length() == 0) {
firstDetailImage = detailImageUrl;
}
if (firstLargeImage == null || firstLargeImage.length() == 0) {
firstLargeImage = largeImage;
}
counter++;
}
context.put("firstDetailImage", firstDetailImage);
context.put("firstLargeImage", firstLargeImage);
}
jsBuf.append("}");
// build dynamic lists
if (variantTree != null) {
topLevelKeys = variantTree.keySet();
tli = topLevelKeys.iterator();
topLevelKeysCt = 0;
while (tli.hasNext()) {
cnt = "" + topLevelKeysCt;
varTree = variantTree.get(tli.next());
if (varTree instanceof Map) {
jsBuf.append(buildNext(varTree, featureOrder, featureOrder.get(1), cnt, featureTypes));
}
topLevelKeysCt++;
}
}
// make a list of variant sku with requireAmount
variantsRes = dispatcher.runSync("getAssociatedProducts", UtilMisc.toMap("productId", productId, "type", "PRODUCT_VARIANT", "checkViewAllow", Boolean.TRUE, "prodCatalogId", currentCatalogId));
variants = variantsRes.get("assocProducts");
if (variants != null) {
amt = new StringBuffer();
amt.append("function checkAmtReq(sku) { ");
vari = variants.iterator();
while (vari.hasNext()) {
variantAssoc = vari.next();
variant = variantAssoc.getRelatedOne("AssocProduct");
amt.append(" if (sku == \"" + variant.get("productId") + "\") return \"" + (variant.get("requireAmount") != null ? variant.getString("requireAmount") : "N") + "\"; ");
}
amt.append(" } ");
}
jsBuf.append(amt.toString());
jsBuf.append("</script>");
request.setAttribute("virtualJavaScript", jsBuf.toString());
}
}
}
// get product associations
obsoleteProducts = dispatcher.runSync("getAssociatedProducts", UtilMisc.toMap("productId", productId, "type", "PRODUCT_OBSOLESCENCE", "checkViewAllow", Boolean.TRUE, "prodCatalogId", currentCatalogId));
request.setAttribute("obsoleteProducts", obsoleteProducts.get("assocProducts"));
crossSellProducts = dispatcher.runSync("getAssociatedProducts", UtilMisc.toMap("productId", productId, "type", "PRODUCT_COMPLEMENT", "checkViewAllow", Boolean.TRUE, "prodCatalogId", currentCatalogId));
request.setAttribute("crossSellProducts", crossSellProducts.get("assocProducts"));
upSellProducts = dispatcher.runSync("getAssociatedProducts", UtilMisc.toMap("productId", productId, "type", "PRODUCT_UPGRADE", "checkViewAllow", Boolean.TRUE, "prodCatalogId", currentCatalogId));
request.setAttribute("upSellProducts", upSellProducts.get("assocProducts"));
obsolenscenseProducts = dispatcher.runSync("getAssociatedProducts", UtilMisc.toMap("productIdTo", productId, "type", "PRODUCT_OBSOLESCENCE", "checkViewAllow", Boolean.TRUE, "prodCatalogId", currentCatalogId));
request.setAttribute("obsolenscenseProducts", obsolenscenseProducts.get("assocProducts"));
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -