Kevin Walsh wrote:
Tom Tucker <suppressed> wrote:Mac OS X 10.4.10 Interchange 5.4.0 (Tried with both Low and High Traffic settings) Perl 5.8.6 threaded (PERL_SIGNALS="unsafe" set in the ENV) MySQL 5.0.27-standardNever had a problem starting daemon and no other odd behavior that I have seen.I have implemented the following Custom SearchOp according to the instructions in the list and docs (I think ):I need to be able to search on three fields, prod_group, model and category. When I use a search of the form: http://www.mydomain.com/scan/co=yes/fi=products/sf=prod_group/se=Mustang/op=eq/sf=model/se=68/op=modelyr/sf=category/se=RADIO/op=eq/tf=category,descriptionI get some products returned, but not the list I would expect. I added the ::logDebug statement but don't get any output in the debug.log file. In fact when I deliberately put in an error in SearchOp perl routine, I don't even get an error message on catalog restart.## Custom search op for model years. Takes a comma ## separated list of individual 2 digit model years ## or a range, ex: 55,63,65-68,70-73 and will ## determine if the search expression matches ## specifically or falls within the range. CodeDef modelyr SearchOp CodeDef modelyr Routine <<EOR sub modelyr { my ($self, $i, $pat) = @_; ::logDebug("modelyr: testing $self against $pat"); return sub { my $this = shift; my @pat = split(/,/, $pat); #print " subtesting $this "; foreach my $that ( @pat ) { # Check to see if matches in a range of model years if ( $that =~ /-/) { my ($strt, $end) = split(/-/, $that); #print "against $strt thru $end\n"; return 1 if ($this >= $strt && $this <= $end); } # Check to see if matches a single model year #print "against $that\n"; return $this == $that; } }; } EOR Any assistance greatly appreciated.The only thing I can see from my quick glance at your code is the line that looks like this: return $this == $that; That would appear to be returning true or false, for the first non-range value, and thereby ignoring the rest of the list. You could try changing the end of your code to look a little more like this: # Check to see if matches a single model year return 1 if $this == $that; } return 0; }; } EOR You shouldn't really use $this as a variable name. Although the name isn't reserved, it is confusing when used outside of its usual context. I'm trying my best not to make any anti-Mac or anti-BSD comments. :-)
Thanks for the response.I appreciate your restraint almost as much as I appreciate your knowledge. I have been using Interchange in production since 4.8.3 and your posts along with Ed's, Racke's and of course Mike's are gospel and have answered many, many questions. I genuflect before the Four Horsemen of eCommerce.
I made the changes as described (including the replacement of my favorite interim variable names) but to no effect. The SearchOp perl code works as expected outside of Interchange. A little more detail:
I am using "Mike Heins' modified foundation demo" from 2003. Added a column for model to the products table (VARCHAR 64). The abridged dataset I am searching through looks like this:
sku model prod_group Category --------- ----- ---------- --------
MRD_CD5 65-73 Mustang RADIO MRD_CD6 65-73 Mustang RADIO M_5482A 65-66 Mustang RADIO MRD_103 65-66 Mustang RADIO MRD_105CD 65-66 Mustang RADIO MRD_1601 65-66 Mustang RADIO MRD_1501 65-66 Mustang RADIO MRD_12000 65-66 Mustang RADIO MRD_105 65-66 Mustang RADIO MRD_106 65-66 Mustang RADIO MRD_106CD 65-66 Mustang RADIO MRD_S06 65-73 Mustang RADIO MRD_101 65-66 Mustang RADIO MRD_107 65-66 Mustang RADIO MRD_107CD 65-66 Mustang RADIO MRD_108 65-66 Mustang RADIO M_5482C 65-73 Mustang RADIO MRD_S11 65-68 Mustang RADIO MRD_S12 65-73 Mustang RADIO M_5486A 65-67 Mustang RADIO MRD_CD 65-73 Mustang RADIO But the scan only returns the following skus: MRD_101 MRD_103 MRD_105 MRD_105CD MRD_106 MRD_106CD MRD_107 MRD_107CD MRD_108 MRD_12000 MRD_1501 MRD_1601 M_5482AWhen I look at the mysql log, I see that an "active != 1" is added to the query (select * from products WHERE inactive != 1 AND prod_group = 'Mustang' AND category = 'RADIO') and then 15 iterative selects over the 13 skus returned getting the additional product, pricing and inventory data.
Noting in the VENDROOT error.log nor debug.log and nothing in the CATROOT error.log. Curious that a ::logDebug in the SearchOp shows nothing in the VENDROOT debug.log.
Sorry to be so verbose, but the function of the SearchOp is critical path the to the autoparts catalog I am building. And the scan is only for testing the search form using the custom SearchOp that I need which returns exactly the same results.
As always, the assistance is greatly appreciated. Tom _______________________________________________ interchange-users mailing list suppressed http://www.icdevgroup.org/mailman/listinfo/interchange-users
Mail converted by mhonarc 2.6.15
This archive provided courtesy of JSW4.NET, Internet Hosting Services for Small Business.