X-Cart: shopping cart software

X-Cart forums (https://forum.x-cart.com/index.php)
-   Dev Questions (https://forum.x-cart.com/forumdisplay.php?f=20)
-   -   Improved Search Function (https://forum.x-cart.com/showthread.php?t=4415)

Courage 12-28-2003 12:34 PM

Any info for 3.5.1 ?

ylenyon 01-23-2004 04:39 AM

Improved search for version 3.5.x
 
I've put in a request for quote for improved search functionality on version 3.5.3. Meaning the ability to put in more than one word, and to get back a reasonable result. Anyone interested in joining in? I'm awaiting word back from X-Cart on cost. If interested, I will post here.
thx,
YLenyon

adpboss 01-23-2004 04:42 AM

They should just fix it free of charge. Obviously enough people have complained about it.

Sorry, I would kick in for new functions but not modified functions that should be naturally improved over the growth of the program.

ylenyon 01-23-2004 05:10 AM

I agree, but it's costing me money not having it. I need it now. They brought back a quote for $25. I'm going ahead with it. I'll request they put it in the next version. Hopefully they will. thx,
YLenyon

NuAlpha 02-27-2004 06:25 AM

In search.php, what is the purpose of the following?

Code:

$tmp=strstr($QUERY_STRING, "$XCART_SESSION_NAME=");
if (!empty($tmp)) 
        $QUERY_STRING=ereg_replace("$XCART_SESSION_NAME=([0-9a-zA-Z]*)", "", $QUERY_STRING);


Zinje 03-02-2004 07:10 PM

Does anyone have a code that will work with version 3.5.3?

funkydunk 03-02-2004 10:30 PM

here you go:

Code:

<?php
/*****************************************************************************\
+-----------------------------------------------------------------------------+
| X-Cart                                                                      |
| Copyright (c) 2001-2003 Ruslan R. Fazliev <rrf@rrf.ru>                      |
| All rights reserved.                                                        |
+-----------------------------------------------------------------------------+
| PLEASE READ  THE FULL TEXT OF SOFTWARE LICENSE AGREEMENT IN THE "COPYRIGHT" |
| FILE PROVIDED WITH THIS DISTRIBUTION. THE AGREEMENT TEXT IS ALSO AVAILABLE  |
| AT THE FOLLOWING URL: http://www.x-cart.com/license.php                    |
|                                                                            |
| THIS  AGREEMENT  EXPRESSES  THE  TERMS  AND CONDITIONS ON WHICH YOU MAY USE |
| THIS SOFTWARE  PROGRAM  AND  ASSOCIATED  DOCUMENTATION  THAT  RUSLAN  R. |
| FAZLIEV (hereinafter  referred to as "THE AUTHOR") IS FURNISHING  OR MAKING |
| AVAILABLE TO YOU WITH  THIS  AGREEMENT  (COLLECTIVELY,  THE  "SOFTWARE").  |
| PLEASE  REVIEW  THE  TERMS  AND  CONDITIONS  OF  THIS  LICENSE AGREEMENT |
| CAREFULLY  BEFORE  INSTALLING  OR  USING  THE  SOFTWARE.  BY INSTALLING, |
| COPYING  OR  OTHERWISE  USING  THE  SOFTWARE,  YOU  AND  YOUR  COMPANY |
| (COLLECTIVELY,  "YOU")  ARE  ACCEPTING  AND AGREEING  TO  THE TERMS OF THIS |
| LICENSE  AGREEMENT.  IF  YOU    ARE  NOT  WILLING  TO  BE  BOUND BY THIS |
| AGREEMENT, DO  NOT INSTALL OR USE THE SOFTWARE.  VARIOUS  COPYRIGHTS  AND |
| OTHER  INTELLECTUAL  PROPERTY  RIGHTS    PROTECT  THE  SOFTWARE.  THIS |
| AGREEMENT IS A LICENSE AGREEMENT THAT GIVES  YOU  LIMITED  RIGHTS  TO  USE |
| THE  SOFTWARE  AND  NOT  AN  AGREEMENT  FOR SALE OR FOR  TRANSFER OF TITLE.|
| THE AUTHOR RETAINS ALL RIGHTS NOT EXPRESSLY GRANTED BY THIS AGREEMENT.      |
|                                                                            |
| The Initial Developer of the Original Code is Ruslan R. Fazliev            |
| Portions created by Ruslan R. Fazliev are Copyright (C) 2001-2003          |
| Ruslan R. Fazliev. All Rights Reserved.                                    |
+-----------------------------------------------------------------------------+
\*****************************************************************************/

#
# $Id: search.php,v 1.50 2003/11/12 14:42:07 svowl Exp $
#

require "./auth.php";
require $xcart_dir."/include/categories.php";

$tmp=strstr($QUERY_STRING, "$XCART_SESSION_NAME=");
if (!empty($tmp)) 
        $QUERY_STRING=ereg_replace("$XCART_SESSION_NAME=([0-9a-zA-Z]*)", "", $QUERY_STRING);

if(!empty($QUERY_STRING)) {
#
# Perform SQL search query
#

        $substring = trim($substring);

// LOOK HERE
// new bit to split search string into separate words
  $con = ""; $substr = "";
  $and="AND";
 
if(!$substring) { $substring=" "; }
  if(!empty($substring)){
 
  // code to strip last s from search string
        $substring = trim($substring);
        $start = (strlen($substring)-1);
        // echo $start;
        // echo "
";
        if ((substr($substring,$start,1)=="s")||(substr($substring,$start,1)=="S")){
        $substring = substr($substring,0,$start);
        // echo $substring;
        }
        // end of new funkydunk bit
 
      $ss = split(" ",$substring);
      foreach($ss as $s)
          // nfc - we add support for other fields to search
        $con[] = "(".$sql_tbl[products].".product like '%".$s."%'"." OR ".
                  $sql_tbl[products].".productcode like '%".$s."%'"." OR ".
                                  $sql_tbl[products].".param00 like '%".$s."%'"." OR ".
                                  $sql_tbl[products].".descr like '%".$s."%'"." OR ".
                  $sql_tbl[products].".fulldescr like '%".$s."%'"." OR ".
                  $sql_tbl[products].".productid like '%".$s."%'".")";
        //$substr .= "&substring=".urlencode($substring);
  }
   
  if(empty($and))$and = "OR";
  $substring_query = (!empty($con)) ? " AND (".join(" ".$and." ",$con).") " :" 1 ";

// end of new bit

  $price_condition = $price_search_1?" AND $sql_tbl[pricing].price>='$price_search_1'":"";
  $price_condition .= $price_search_2?" AND $sql_tbl[pricing].price<='$price_search_2'":"";

  $price_substring = $price_search_1?"&price_search_1=".urlencode($price_search_1):"";
  $price_substring .= $price_search_2?"&price_search_2=".urlencode($price_search_2):"";

  if ($price_condition)
      $sort_by_price = "price";
   
  if ($in_category) {
      $search_category = addslashes(array_pop(func_query_first("select category from $sql_tbl[categories] where categoryid='$in_category'")));
      $search_categories = func_query("select categoryid from $sql_tbl[categories] where $sql_tbl[categories].category like '$search_category%'");
      if(is_array($search_categories)) {
        $category_condition=" in ( ";
        foreach($search_categories as $k=>$v)
            $category_condition .= "'$v[categoryid]', ";
        $category_condition = ereg_replace(", $", ")", $category_condition);
        $category_condition=" ($sql_tbl[products].categoryid $category_condition or $sql_tbl[products].categoryid1 $category_condition or $sql_tbl[products].categoryid2 $category_condition or $sql_tbl[products].categoryid3 $category_condition) ";
      }
  }
  else
      $category_condition = "1";
   
  $membership_condition = " AND ($sql_tbl[categories].membership='". $user_account['membership']."' OR $sql_tbl[categories].membership='') ";

  if ($store_language != $config["default_customer_language"] && $substring) {
        // LOOK HERE
  // nfc - always using default language so this case will never happen
  }
  else {
// LOOK HERE
// nfc - removed $substring_query =.....
      $search_query_count = "select count(*) from $sql_tbl[products], $sql_tbl[pricing], $sql_tbl[categories] where $sql_tbl[pricing].productid=$sql_tbl[products].productid and $sql_tbl[pricing].quantity=1 and $sql_tbl[products].categoryid=$sql_tbl[categories].categoryid $membership_condition and ($sql_tbl[pricing].membership='". $user_account['membership']."' or $sql_tbl[pricing].membership='')
AND $category_condition and $sql_tbl[products].forsale='Y' and $sql_tbl[categories].avail='Y' $price_condition $substring_query group by $sql_tbl[products].productid";
  }
   
  $search_query = "$category_condition and $sql_tbl[categories].avail='Y' and $sql_tbl[products].forsale='Y' $price_condition $substring_query ";

   
  $total_products_in_search =  count(func_query($search_query_count));


// put in so that you can find out what the sql query was by adding &test=1 to the end of the search string
if ($test){
        echo $search_query_count . "
";
}
// end

#
# Navigation code
#
        $objects_per_page = $config["Appearance"]["products_per_page"];

        $total_nav_pages = ceil($total_products_in_search/$objects_per_page)+1;
        require $xcart_dir."/include/navigation.php";

        $smarty->assign("products",func_search_products($search_query, @$user_account['membership'],$first_page,$total_products_in_search, 0, @$sort_by_price));

        $smarty->assign("navigation_script","search.php?substring=".urlencode($substring)."&in_category=".@$in_category."".$price_substring);

        $HTTP_GET_VARS["substring"] = stripslashes($HTTP_GET_VARS["substring"]);

        $smarty->assign("main","search");

}
else {
        $smarty->assign("main","advanced_search");
}

$smarty->display("customer/home.tpl");
?>

[/code]

Zinje 03-03-2004 06:13 PM

THANKS!!!!!!! I will give it a try and let you know.

preston 03-04-2004 06:57 PM

I just tried funkydunk's search.php on 3.5.4 and it seems to work great.

Thanks a bunch...

funkydunk 03-04-2004 10:01 PM

btw I forgot to mention that it had another small tweak in there in that it will strip an 's' from the end of the search term so that if they search for:

toasters it will come back with results for toaster.

Just a quick mod but you are welcome to it. :)


All times are GMT -8. The time now is 05:48 AM.

Powered by vBulletin Version 3.5.4
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.