Well I think this thread started out by being a mod for changing the exact phrase search to multiple word search before it deviated somewhat before anybody had posted any code for v4.x so I've had to have a pop myself...
This seems to work for me, although I don't use Extra Fields so I've not tested it with that... I'm on 4.0.7.
Change:
Code:
# Search for substring in some fields...
if (!empty($data["by_title"]))
$condition[] = "$sql_tbl[products].product LIKE '%".$data["substring"]."%'";
if (!empty($data["by_shortdescr"]))
$condition[] = "$sql_tbl[products].descr LIKE '%".$data["substring"]."%'";
if (!empty($data["by_fulldescr"]))
$condition[] = "$sql_tbl[products].fulldescr LIKE '%".$data["substring"]."%'";
if (!empty($data["extra_fields"]) && $active_modules['Extra_Fields']) {
foreach($data["extra_fields"] as $k => $v)
$condition[] = "($sql_tbl[extra_field_values].value LIKE '%".$data["substring"]."%' AND $sql_tbl[extra_fields].fieldid = '$k')";
$join['extra_field_values'] = "$sql_tbl[products].productid = $sql_tbl[extra_field_values].productid";
$join['extra_fields'] = "$sql_tbl[extra_field_values].fieldid = $sql_tbl[extra_fields].fieldid AND $sql_tbl[extra_fields].active = 'Y'";
}
if (!empty($condition))
$search_condition .= " AND (".implode(" OR ", $condition).")";
To:
Code:
$ss = split(" ",$data["substring"]);
$ss_condition = "";
foreach($ss as $s)
{
# Search for substring in some fields...
$condition = array();
if (!empty($data["by_title"]))
$condition[] = "$sql_tbl[products].product LIKE '%".$s."%'";
if (!empty($data["by_shortdescr"]))
$condition[] = "$sql_tbl[products].descr LIKE '%".$s."%'";
if (!empty($data["by_fulldescr"]))
$condition[] = "$sql_tbl[products].fulldescr LIKE '%".$s."%'";
if (!empty($data["extra_fields"]) && $active_modules['Extra_Fields']) {
foreach($data["extra_fields"] as $k => $v)
$condition[] = "($sql_tbl[extra_field_values].value LIKE '%".$s."%' AND $sql_tbl[extra_fields].fieldid = '$k')";
$join['extra_field_values'] = "$sql_tbl[products].productid = $sql_tbl[extra_field_values].productid";
$join['extra_fields'] = "$sql_tbl[extra_field_values].fieldid = $sql_tbl[extra_fields].fieldid AND $sql_tbl[extra_fields].active = 'Y'";
}
if (!empty($condition))
$ss_condition .= " AND (".implode(" OR ", $condition).")";
}
$search_condition .= $ss_condition;