Esempio n. 1
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 . ")");
         }
     }
 }