4images Forum & Community
4images Help / Hilfe => Bug Fixes & Patches => Topic started by: kai on January 05, 2011, 11:25:59 AM
-
In 4images 1.7.9 the search with more than one keyword, the use of operators (AND OR NOT) and two-word-keywords like "red car" is not working properly.
To fix this please apply this patch to the 3 files:
/includes/functions.php
/search.php
/includes/search_utils.php
The patched files are attached to this post (see below).
The fix will also be included in the next release of 4images.
Tip: If you want to search for a two-word-keyword like "red car", then you have to enter the ".
1.) search in /includes/functions.php:
foreach ($split_keywords as $key => $val) {
$keywords .= (($keywords != "" ) ? ", " : "")."<a href=\"".$site_sess->url(ROOT_PATH."search.php?search_keywords=".urlencode($val))."\">".format_text($val, 2)."</a>";
and replace with:
foreach ($split_keywords as $key => $val) {
$url_val = $val;
if (strpos($url_val, ' ') !== false) {
$url_val = '"' . $url_val . '"';
}
$keywords .= (($keywords != "" ) ? ", " : "")."<a href=\"".$site_sess->url(ROOT_PATH."search.php?search_keywords=".urlencode($url_val))."\">".format_text($val, 2)."</a>";
2.) search in /search.php:
$split_words = prepare_searchwords($search_keywords, true);
and replace with:
$split_words = prepare_searchwords_for_search($search_keywords);
3.) in /includes/search_utils.php:
search for
function prepare_searchwords($val, $for_search = false)
insert above:
function prepare_searchwords_for_search($val)
{
$val = strip_tags(trim(stripslashes($val)));
$val = convert_special($val);
$val = strtolower($val);
$val = str_replace(array('+', '-'), array(' and ', ' not '), $val);
$val = preg_replace('/\s+/', ' ', $val);
$tokens = array();
for ($nextToken = strtok($val, ' '); $nextToken !== false; $nextToken = strtok(' ')) {
if ($nextToken[0] == '"') {
$nextToken = $nextToken[strlen($nextToken)-1] == '"' ? substr($nextToken, 1, -1) : substr($nextToken, 1) . ' ' . strtok('"');
}
$tokens[] = $nextToken;
}
return $tokens;
}
search for
"#[\n\t\r^\$\(\)<>\"\|@\?%~\+\.\[\]{}:\/=!§\\\\]+#s"
and replace with
"#[\n\t\r^\$\(\)<>\"\|,@\?%~\+\.\[\]{}:\/=!§\\\\]+#s"
3.1) search:
function prepare_searchwords($val, $for_search = false)
{
insert below:
// Backwards compatibility
if ($for_search) {
return prepare_searchwords_for_search($val);
}
3.2) search:
if ($for_search) {
$search_array = array(
"/\s+\+/",
"/\s+\-/"
);
$replace_array = array(
" and ",
" not "
);
$val = preg_replace($search_array, $replace_array, $val);
} else {
$val = str_replace("*", "", $val);
}
and replace with:
$val = str_replace("*", "", $val);
3.3) search:
array_walk($split_words, 'trim_value');
and replace with:
$split_words = array_map('trim', $split_words);
$split_words = array_map('strip_tags', $split_words);
$split_words = array_map('convert_special', $split_words);
$split_words = array_map('strtolower', $split_words);
3.4) search:
if ($for_search && ($word == "and" || $word == "und" || $word == "or" || $word == "oder" || $word == "not")) {
$clean_words[] = $word;
and replace with:
if ($word == "and" || $word == "und" || $word == "or" || $word == "oder" || $word == "not") {
3.5) search and remove:
}
if ($for_search) {
// Add whole string for image_keyword search
$clean_words[] = implode(' ', $clean_words);
-
Hallo Kai,
3.3) search:
array_walk($split_words, 'trim_value');
and replace:
$split_words = array_map('trim', $split_words);
$split_words = array_map('strip_tags', $split_words);
$split_words = array_map('convert_special', $split_words);
$split_words = array_map('strtolower', $split_words);
hier stimmt was nicht ersteres ist nicht vorhanden und letzeres ist bereits vorhanden...!
Gruß Jens
-
....hier stimmt was nicht ersteres ist nicht vorhanden und letzeres ist bereits vorhanden...!
das ist vorhanden weil du schon einen fix eingespielt hast: http://www.4homepages.de/forum/index.php?topic=28430.msg153554#msg153554
wenn du dir die aktuelle version V.1.7.9 herunterladest wirst du sehen das diese zeilen vorhanden sind.
Alternativ kannst du dir die "search_utils.php" inkl. beider patches aus dem anhang herrunter laden.
mfg Andi
-
I downloaded the files above and replaced them on my server.
It seems "two word" searches in quotes do not work for me. AND searches do work.
For example - if I search for Green Lantern, I get everything with green plus everything with lantern. - the correct search results.
If I search Green AND Lantern I get only items with both works - the correct search results.
But if I search "Green Lantern" I get no results at all.
http://alrioart.com/search.php?search_keywords=%22green%20lantern%22
Terry
-
@comicart: the pictures on your site don't have any keywords. that's why ;)
-
the quotes only searches Keywords?
Oh - sorry :oops:
You're right - I don't use them. I was hoping that "green lantern" would return the same as Green AND Lantern.
Is there a mod for that?
:)
T
-
Hallo,
ich hab die aktuelle Version, habe aber trotzdem die 3 Anhänge hier bei mir aktualisiert......da meine Suchfunktion nicht so funktionierte wie sie sollte, aber
leider gehen trotz Schlüsselwörter die Funktionen AND und NOT nicht - auch nicht wenn
ich UND und NICHT eingebe :?
woran könnte das liegen?