Author: jonesde
Date: Mon Feb 19 03:36:08 2007 New Revision: 509164 URL: http://svn.apache.org/viewvc?view=rev&rev=509164 Log: A few misc cleanups for layout, etc; made ProductSearchSession URL parameters more flexible and added a method to turn search constraints and sort order into a parameter string, which is now used in the catalog manager search results page to make it easy to reproduce the search constraints Modified: ofbiz/trunk/applications/product/entitydef/entitymodel.xml ofbiz/trunk/applications/product/src/org/ofbiz/product/product/ProductSearchSession.java ofbiz/trunk/applications/product/webapp/catalog/find/keywordsearch.ftl ofbiz/trunk/applications/product/webapp/catalog/find/keywordsearchbox.ftl Modified: ofbiz/trunk/applications/product/entitydef/entitymodel.xml URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/product/entitydef/entitymodel.xml?view=diff&rev=509164&r1=509163&r2=509164 ============================================================================== --- ofbiz/trunk/applications/product/entitydef/entitymodel.xml (original) +++ ofbiz/trunk/applications/product/entitydef/entitymodel.xml Mon Feb 19 03:36:08 2007 @@ -322,7 +322,7 @@ <field name="sequenceNum" type="numeric"><description>This field is used to sort the links. The linkSeqId field is not used because it is part of the primary key and cannot be changed.</description></field> <field name="titleText" type="description"></field> <field name="detailText" type="very-long"></field> - <field name="imageUrl" type="description"></field> + <field name="imageUrl" type="url"></field> <field name="linkTypeEnumId" type="id"></field> <field name="linkInfo" type="long-varchar"></field> <field name="detailSubScreen" type="long-varchar"><description>This is optional. If not specified a default should be used by the category detail template.</description></field> Modified: ofbiz/trunk/applications/product/src/org/ofbiz/product/product/ProductSearchSession.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/product/src/org/ofbiz/product/product/ProductSearchSession.java?view=diff&rev=509164&r1=509163&r2=509164 ============================================================================== --- ofbiz/trunk/applications/product/src/org/ofbiz/product/product/ProductSearchSession.java (original) +++ ofbiz/trunk/applications/product/src/org/ofbiz/product/product/ProductSearchSession.java Mon Feb 19 03:36:08 2007 @@ -24,7 +24,6 @@ import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; -import java.util.LinkedList; import java.util.List; import java.util.Locale; import java.util.Map; @@ -77,7 +76,8 @@ /** Basic copy constructor */ public ProductSearchOptions(ProductSearchOptions productSearchOptions) { - this.constraintList = new LinkedList(productSearchOptions.constraintList); + this.constraintList = FastList.newInstance(); + this.constraintList.addAll(productSearchOptions.constraintList); this.resultSortOrder = productSearchOptions.resultSortOrder; this.viewIndex = productSearchOptions.viewIndex; this.viewSize = productSearchOptions.viewSize; @@ -196,7 +196,7 @@ public static List getSearchOptionsHistoryList(HttpSession session) { List optionsHistoryList = (List) session.getAttribute("_PRODUCT_SEARCH_OPTIONS_HISTORY_"); if (optionsHistoryList == null) { - optionsHistoryList = new LinkedList(); + optionsHistoryList = FastList.newInstance(); session.setAttribute("_PRODUCT_SEARCH_OPTIONS_HISTORY_", optionsHistoryList); } return optionsHistoryList; @@ -426,25 +426,18 @@ searchAddConstraint(new ProductSearch.CategoryConstraint(searchCategoryId, !"N".equals(searchSubCategories)), session); constraintsChanged = true; } - if (UtilValidate.isNotEmpty((String) parameters.get("SEARCH_CATEGORY_ID2"))) { - String searchCategoryId = (String) parameters.get("SEARCH_CATEGORY_ID2"); - String searchSubCategories = (String) parameters.get("SEARCH_SUB_CATEGORIES2"); - searchAddConstraint(new ProductSearch.CategoryConstraint(searchCategoryId, !"N".equals(searchSubCategories)), session); - constraintsChanged = true; - } - if (UtilValidate.isNotEmpty((String) parameters.get("SEARCH_CATEGORY_ID3"))) { - String searchCategoryId = (String) parameters.get("SEARCH_CATEGORY_ID3"); - String searchSubCategories = (String) parameters.get("SEARCH_SUB_CATEGORIES3"); - searchAddConstraint(new ProductSearch.CategoryConstraint(searchCategoryId, !"N".equals(searchSubCategories)), session); - constraintsChanged = true; + + for (int catNum = 1; catNum < 10; catNum++) { + if (UtilValidate.isNotEmpty((String) parameters.get("SEARCH_CATEGORY_ID" + catNum))) { + String searchCategoryId = (String) parameters.get("SEARCH_CATEGORY_ID" + catNum); + String searchSubCategories = (String) parameters.get("SEARCH_SUB_CATEGORIES" + catNum); + searchAddConstraint(new ProductSearch.CategoryConstraint(searchCategoryId, !"N".equals(searchSubCategories)), session); + constraintsChanged = true; + } } - // if there is any category selected try to use catalog and add a constraint for it - if (UtilValidate.isEmpty((String) parameters.get("SEARCH_CATEGORY_ID")) && - UtilValidate.isEmpty((String) parameters.get("SEARCH_CATEGORY_ID2")) && - UtilValidate.isEmpty((String) parameters.get("SEARCH_CATEGORY_ID3"))) { - + if (UtilValidate.isNotEmpty((String) parameters.get("SEARCH_CATALOG_ID"))) { String searchCatalogId = (String) parameters.get("SEARCH_CATALOG_ID"); if (searchCatalogId != null && !searchCatalogId.equalsIgnoreCase("")) { List categories = CategoryWorker.getRelatedCategoriesRet(request, "topLevelList", CatalogWorker.getCatalogTopCategoryId(request, searchCatalogId), true); @@ -462,21 +455,16 @@ searchAddConstraint(new ProductSearch.KeywordConstraint(keywordString, anyPrefixSuffix, anyPrefixSuffix, null, "AND".equals(searchOperator)), session); constraintsChanged = true; } - if (UtilValidate.isNotEmpty((String) parameters.get("SEARCH_STRING2"))) { - String keywordString = (String) parameters.get("SEARCH_STRING2"); - String searchOperator = (String) parameters.get("SEARCH_OPERATOR2"); - // defaults to true/Y, ie anything but N is true/Y - boolean anyPrefixSuffix = !"N".equals((String) parameters.get("SEARCH_ANYPRESUF2")); - searchAddConstraint(new ProductSearch.KeywordConstraint(keywordString, anyPrefixSuffix, anyPrefixSuffix, null, "AND".equals(searchOperator)), session); - constraintsChanged = true; - } - if (UtilValidate.isNotEmpty((String) parameters.get("SEARCH_STRING3"))) { - String keywordString = (String) parameters.get("SEARCH_STRING3"); - String searchOperator = (String) parameters.get("SEARCH_OPERATOR3"); - // defaults to true/Y, ie anything but N is true/Y - boolean anyPrefixSuffix = !"N".equals((String) parameters.get("SEARCH_ANYPRESUF3")); - searchAddConstraint(new ProductSearch.KeywordConstraint(keywordString, anyPrefixSuffix, anyPrefixSuffix, null, "AND".equals(searchOperator)), session); - constraintsChanged = true; + + for (int kwNum = 1; kwNum < 10; kwNum++) { + if (UtilValidate.isNotEmpty((String) parameters.get("SEARCH_STRING" + kwNum))) { + String keywordString = (String) parameters.get("SEARCH_STRING" + kwNum); + String searchOperator = (String) parameters.get("SEARCH_OPERATOR" + kwNum); + // defaults to true/Y, ie anything but N is true/Y + boolean anyPrefixSuffix = !"N".equals((String) parameters.get("SEARCH_ANYPRESUF" + kwNum)); + searchAddConstraint(new ProductSearch.KeywordConstraint(keywordString, anyPrefixSuffix, anyPrefixSuffix, null, "AND".equals(searchOperator)), session); + constraintsChanged = true; + } } // if features were specified by ID add a constraint for each @@ -629,5 +617,100 @@ result.put("searchSortOrderString", searchSortOrderString); return result; + } + + public static String makeSearchParametersString(HttpSession session) { + return makeSearchParametersString(getProductSearchOptions(session)); + } + public static String makeSearchParametersString(ProductSearchOptions productSearchOptions) { + StringBuffer searchParamString = new StringBuffer(); + + List constraintList = productSearchOptions.getConstraintList(); + Iterator constraintIter = constraintList.iterator(); + int categoriesCount = 0; + int featuresCount = 0; + int keywordsCount = 0; + boolean isNotFirst = false; + while (constraintIter.hasNext()) { + ProductSearchConstraint psc = (ProductSearchConstraint) constraintIter.next(); + if (psc instanceof ProductSearch.CategoryConstraint) { + ProductSearch.CategoryConstraint cc = (ProductSearch.CategoryConstraint) psc; + categoriesCount++; + if (isNotFirst) { + searchParamString.append("&"); + } else { + isNotFirst = true; + } + searchParamString.append("SEARCH_CATEGORY_ID"); + searchParamString.append(categoriesCount); + searchParamString.append("="); + searchParamString.append(cc.productCategoryId); + searchParamString.append("&SEARCH_SUB_CATEGORIES"); + searchParamString.append(categoriesCount); + searchParamString.append("="); + searchParamString.append(cc.includeSubCategories ? "Y" : "N"); + } else if (psc instanceof ProductSearch.FeatureConstraint) { + ProductSearch.FeatureConstraint fc = (ProductSearch.FeatureConstraint) psc; + featuresCount++; + if (isNotFirst) { + searchParamString.append("&"); + } else { + isNotFirst = true; + } + searchParamString.append("SEARCH_FEAT"); + searchParamString.append(featuresCount); + searchParamString.append("="); + searchParamString.append(fc.productFeatureId); + /* No way to specify parameters for these right now, so table until later + } else if (psc instanceof ProductSearch.FeatureSetConstraint) { + ProductSearch.FeatureSetConstraint fsc = (ProductSearch.FeatureSetConstraint) psc; + */ + } else if (psc instanceof ProductSearch.KeywordConstraint) { + ProductSearch.KeywordConstraint kc = (ProductSearch.KeywordConstraint) psc; + keywordsCount++; + if (isNotFirst) { + searchParamString.append("&"); + } else { + isNotFirst = true; + } + searchParamString.append("SEARCH_STRING"); + searchParamString.append(keywordsCount); + searchParamString.append("="); + searchParamString.append(UtilHttp.encodeBlanks(kc.keywordsString)); + searchParamString.append("&SEARCH_OPERATOR"); + searchParamString.append(keywordsCount); + searchParamString.append("="); + searchParamString.append(kc.isAnd ? "AND" : "OR"); + searchParamString.append("&SEARCH_ANYPRESUF"); + searchParamString.append(keywordsCount); + searchParamString.append("="); + searchParamString.append(kc.anyPrefix | kc.anySuffix ? "Y" : "N"); + + /* No way to specify parameters for these right now, so table until later + } else if (psc instanceof ProductSearch.ListPriceRangeConstraint) { + ProductSearch.ListPriceRangeConstraint lprc = (ProductSearch.ListPriceRangeConstraint) psc; + */ + } + } + + ResultSortOrder resultSortOrder = productSearchOptions.getResultSortOrder(); + if (resultSortOrder != null) { + if (resultSortOrder instanceof ProductSearch.SortKeywordRelevancy) { + //ProductSearch.SortKeywordRelevancy skr = (ProductSearch.SortKeywordRelevancy) resultSortOrder; + searchParamString.append("&sortOrder=SortKeywordRelevancy"); + } else if (resultSortOrder instanceof ProductSearch.SortProductField) { + ProductSearch.SortProductField spf = (ProductSearch.SortProductField) resultSortOrder; + searchParamString.append("&sortOrder=SortProductField:"); + searchParamString.append(spf.fieldName); + } else if (resultSortOrder instanceof ProductSearch.SortProductPrice) { + ProductSearch.SortProductPrice spp = (ProductSearch.SortProductPrice) resultSortOrder; + searchParamString.append("&sortOrder=SortProductPrice:"); + searchParamString.append(spp.productPriceTypeId); + } + searchParamString.append("&sortAscending="); + searchParamString.append(resultSortOrder.isAscending() ? "Y" : "N"); + } + + return searchParamString.toString(); } } Modified: ofbiz/trunk/applications/product/webapp/catalog/find/keywordsearch.ftl URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/product/webapp/catalog/find/keywordsearch.ftl?view=diff&rev=509164&r1=509163&r2=509164 ============================================================================== --- ofbiz/trunk/applications/product/webapp/catalog/find/keywordsearch.ftl (original) +++ ofbiz/trunk/applications/product/webapp/catalog/find/keywordsearch.ftl Mon Feb 19 03:36:08 2007 @@ -19,10 +19,10 @@ <div class="head1">${uiLabelMap.ProductSearchProducts}, <span class="head2">${uiLabelMap.ProductSearchFor}:</span></div> <#list searchConstraintStrings as searchConstraintString> - <div class="tabletext"> <a href="<@ofbizUrl>keywordsearch?removeConstraint=${searchConstraintString_index}&clearSearch=N</@ofbizUrl>" class="buttontext">[X]</a> ${searchConstraintString}</div> + <div class="tabletext"> <a href="<@ofbizUrl>keywordsearch?removeConstraint=${searchConstraintString_index}&clearSearch=N</@ofbizUrl>" class="buttontext">X</a> ${searchConstraintString}</div> </#list> <div class="tabletext">${uiLabelMap.CommonSortedBy}: ${searchSortOrderString}</div> -<div class="tabletext"><a href="<@ofbizUrl>advancedsearch?SEARCH_CATEGORY_ID=${(requestParameters.SEARCH_CATEGORY_ID)?if_exists}</@ofbizUrl>" class="buttontext">[${uiLabelMap.CommonRefine} ${uiLabelMap.CommonSearch}]</a></div> +<div class="tabletext"><a href="<@ofbizUrl>advancedsearch?SEARCH_CATEGORY_ID=${(requestParameters.SEARCH_CATEGORY_ID)?if_exists}</@ofbizUrl>" class="buttontext">${uiLabelMap.CommonRefine} ${uiLabelMap.CommonSearch}</a></div> <#if !productIds?has_content> <br/><div class="head2"> ${uiLabelMap.ProductNoResultsFound}.</div> @@ -34,13 +34,13 @@ <td align="right"> <b> <#if 0 < viewIndex?int> - <a href="<@ofbizUrl>keywordsearch/~VIEW_INDEX=${viewIndex-1}/~VIEW_SIZE=${viewSize}/~clearSearch=N</@ofbizUrl>" class="buttontext">[${uiLabelMap.CommonPrevious}]</a> | + <a href="<@ofbizUrl>keywordsearch/~VIEW_INDEX=${viewIndex-1}/~VIEW_SIZE=${viewSize}/~clearSearch=N</@ofbizUrl>" class="buttontext">${uiLabelMap.CommonPrevious}</a> | </#if> <#if 0 < listSize?int> <span class="tabletext">${lowIndex+1} - ${highIndex} ${uiLabelMap.CommonOf} ${listSize}</span> </#if> <#if highIndex?int < listSize?int> - | <a href="<@ofbizUrl>keywordsearch/~VIEW_INDEX=${viewIndex+1}/~VIEW_SIZE=${viewSize}/~clearSearch=N</@ofbizUrl>" class="buttontext">[${uiLabelMap.CommonNext}]</a> + | <a href="<@ofbizUrl>keywordsearch/~VIEW_INDEX=${viewIndex+1}/~VIEW_SIZE=${viewSize}/~clearSearch=N</@ofbizUrl>" class="buttontext">${uiLabelMap.CommonNext}</a> </#if> </b> </td> @@ -175,7 +175,6 @@ </div> <hr class="sepbar"/> - <div class="tabletext"> <form method="post" action="<@ofbizUrl>searchRemoveFeature</@ofbizUrl>" name="searchRemoveFeature"> <b>${uiLabelMap.ProductRemoveFeatureFromResults}:</b><br/> @@ -184,6 +183,17 @@ <input type="submit" value="${uiLabelMap.ProductRemoveFeature}" class="smallSubmit"><br/> </form> </div> + +<hr class="sepbar"/> +<div class="tabletext"> +<form method="post" action="" name="searchShowParams"> + <#assign searchParams = Static["org.ofbiz.product.product.ProductSearchSession"].makeSearchParametersString(session)> + <b>Plain Search Parameters:</b><input type="text" size="60" name="searchParameters" value="${searchParams}" class="inputBox"> + <b>HTML Search Parameters:</b><input type="text" size="60" name="searchParameters" value="${searchParams?html}" class="inputBox"> + <input type="hidden" name="clearSearch" value="N"> +</form> +</div> + <hr class="sepbar"/> <div class="tabletext"> <form method="post" action="<@ofbizUrl>searchExportProductList</@ofbizUrl>" name="searchRemoveFeature"> Modified: ofbiz/trunk/applications/product/webapp/catalog/find/keywordsearchbox.ftl URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/product/webapp/catalog/find/keywordsearchbox.ftl?view=diff&rev=509164&r1=509163&r2=509164 ============================================================================== --- ofbiz/trunk/applications/product/webapp/catalog/find/keywordsearchbox.ftl (original) +++ ofbiz/trunk/applications/product/webapp/catalog/find/keywordsearchbox.ftl Mon Feb 19 03:36:08 2007 @@ -49,8 +49,7 @@ <div class="tabletext">${uiLabelMap.ProductKeywords}: <input type="text" class="inputBox" name="SEARCH_STRING" size="20" maxlength="50" value="${requestParameters.SEARCH_STRING?if_exists}"/></div> <div class="tabletext"> ${uiLabelMap.ProductCategoryId}: - <input type="text" class="inputBox" name="SEARCH_CATEGORY_ID" size="18" maxlength="20" value="${requestParameters.SEARCH_CATEGORY_ID?if_exists}"/> - <a href="javascript:call_fieldlookup2(document.keywordsearchform.SEARCH_CATEGORY_ID,'LookupProductCategory');"><img src='/images/fieldlookup.gif' width='15' height='14' border='0' alt='Click here For Field Lookup'/></a> + <input type="text" class="inputBox" name="SEARCH_CATEGORY_ID" size="15" maxlength="20" value="${requestParameters.SEARCH_CATEGORY_ID?if_exists}"/><a href="javascript:call_fieldlookup2(document.keywordsearchform.SEARCH_CATEGORY_ID,'LookupProductCategory');"><img src='/images/fieldlookup.gif' width='15' height='14' border='0' alt='Click here For Field Lookup'/></a> </div> <div class="tabletext"> ${uiLabelMap.CommonNoContains}<input type="checkbox" name="SEARCH_CONTAINS" value="N" <#if requestParameters.SEARCH_CONTAINS?if_exists == "N">checked="checked"</#if>/> @@ -64,8 +63,7 @@ <form name="advancedsearchform" method="post" action="<@ofbizUrl>advancedsearch</@ofbizUrl>" style="margin: 0;"> <div class="tabletext"> ${uiLabelMap.ProductCategoryId}: - <input type="text" class="inputBox" name="SEARCH_CATEGORY_ID" size="18" maxlength="20" value="${requestParameters.SEARCH_CATEGORY_ID?if_exists}"/> - <a href="javascript:call_fieldlookup2(document.advancedsearchform.SEARCH_CATEGORY_ID,'LookupProductCategory');"><img src='/images/fieldlookup.gif' width='15' height='14' border='0' alt='Click here For Field Lookup'/></a> + <input type="text" class="inputBox" name="SEARCH_CATEGORY_ID" size="15" maxlength="20" value="${requestParameters.SEARCH_CATEGORY_ID?if_exists}"/><a href="javascript:call_fieldlookup2(document.advancedsearchform.SEARCH_CATEGORY_ID,'LookupProductCategory');"><img src='/images/fieldlookup.gif' width='15' height='14' border='0' alt='Click here For Field Lookup'/></a> </div> <div class="tabletext"> <a href="javascript:document.advancedsearchform.submit()" class="buttontext">${uiLabelMap.ProductAdvancedSearch}</a> |
Free forum by Nabble | Edit this page |