示例#1
0
 /**
  * @param ProductQuery $search
  * @param $searchTerm
  * @param $searchIn
  * @param $searchCriteria
  */
 public function doSearch(&$search, $searchTerm, $searchIn, $searchCriteria)
 {
     $search->_and();
     foreach ($searchIn as $index => $searchInElement) {
         if ($index > 0) {
             $search->_or();
         }
         switch ($searchInElement) {
             case "ref":
                 $search->filterByRef($searchTerm, $searchCriteria);
                 break;
             case "title":
                 $search->where("CASE WHEN NOT ISNULL(`requested_locale_i18n`.ID) THEN `requested_locale_i18n`.`TITLE` ELSE `default_locale_i18n`.`TITLE` END " . $searchCriteria . " ?", $searchTerm, \PDO::PARAM_STR);
                 break;
         }
     }
 }
示例#2
0
 /**
  * @param ProductQuery $search
  * @param string[] $feature_values
  */
 protected function manageFeatureValue(&$search, $feature_values)
 {
     if (null !== $feature_values) {
         foreach ($feature_values as $feature => $feature_choice) {
             foreach ($feature_choice['values'] as $feature_value) {
                 $featureAlias = 'fv_' . $feature;
                 if ($feature_value != '*') {
                     $featureAlias .= '_' . $feature_value;
                 }
                 $search->joinFeatureProduct($featureAlias, Criteria::LEFT_JOIN)->addJoinCondition($featureAlias, "`{$featureAlias}`.FEATURE_ID = ?", $feature, null, \PDO::PARAM_INT);
                 if ($feature_value != '*') {
                     $search->addJoinCondition($featureAlias, "`{$featureAlias}`.FREE_TEXT_VALUE = ?", $feature_value, null, \PDO::PARAM_STR);
                 }
             }
             /* format for mysql */
             $sqlWhereString = $feature_choice['expression'];
             if ($sqlWhereString == '*') {
                 $sqlWhereString = 'NOT ISNULL(`fv_' . $feature . '`.ID)';
             } else {
                 $sqlWhereString = preg_replace('#([a-zA-Z0-9_\\-]+)#', 'NOT ISNULL(`fv_' . $feature . '_' . '\\1`.ID)', $sqlWhereString);
                 $sqlWhereString = str_replace('&', ' AND ', $sqlWhereString);
                 $sqlWhereString = str_replace('|', ' OR ', $sqlWhereString);
             }
             $search->where("(" . $sqlWhereString . ")");
         }
     }
 }