/** * @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 . ")"); } } }