|
ECB SEO SHOP SOFTWARE - IMEDES SOFTWARE DOWNLOADS
*****************************************
* *
* INSTALLATION-GUIDE *
* *
*****************************************
* @package Search Suggest *
* @compatible SP2.1 *
*****************************************
--------------
NEW FILES:
--------------
images/product_images/thumbnail_images/noimage.jpg
includes/classes/thumbnail.inc.php
templates/xtc4/img/heading_suggest_bg.jpg
templates/xtc4/img/suggest_over_bg.jpg
templates/xtc4/javascript/ajaxsuggest.js
--------------
NEW DIRS:
--------------
imedes_library
--------------
CHANGED FILES:
--------------
includes/classes/class.inputfilter.php
includes/header.php
lang/english/admin/configuration.php
lang/english/english.php
lang/german/admin/configuration.php
lang/german/german.php
templates/xtc4/boxes/box_search.html
templates/xtc4/index.html
templates/xtc4/source/boxes/search.php
templates/xtc4/stylesheet.css
xajax.functions.php
-------------
FEATURE-LIST:
-------------
Nach erfolgreicher Installation kann die Formatierung der Suggest Ausgabe über die Styleheest Datei den persönlichen Bedürfnissen angepasst werden.
Beim erstmaligen Aufruf der Suggest Funktion kann es zu kurzen Verzögerungen kommen, da die Vorschaubilder erst beim Aufruf im Hintergrund generiert werden, dann
aber gespeichert werden, so dass bei einem erneuten Aufruf die Vorschlagsliste deutlich schneller angezeigt wird. Generell hängt die
Geschwindigkeit der Anzeige von der Performance des Servers, bzw. in Kombination von der Menge der Artikel ab.
Im Auslieferungszustand wird nach Eingabe von mind. 2 Buchstaben eine Vorschlagsliste generiert. Diese Wert kann erhöht und auch verringert werden, jedoch erhöht eine
weitere Reduzierung der Mindesteingabe die Serverlast, so dass sich die Anzeige bei jeder Änderung der Eingabe ändert, was subjektiv
als unangenehm empfunden werden kann.
Die Änderung des Wertes erfolt über die search.php im Ordner templates/dein_template/source/boxes/. Suchen Sie dort nach der Zeile 109
und ändern den entsprechenden Wert unter
if (strlen($suchtext)>2) {
Im Administrationsbereich findet sich außerdem unter dem Menüpunkt >>Such Optionen<< eine neue Einstellungsmöglichkeit, womit die Anzahl
der Vorschläge eingestellt werden kann.
Anzumerken ist, dass die eigentliche suchfunktion der Box_Search mit dem Einbau der AJAX Suggest Funktion nicht mehr vorhanden ist. Der sonst beistehende Such Button, sollte deshalb wie
beschrieben im Template entfernt werden.
-------------
INSTALLATION:
-------------
1. Xajax Framework installieren
2. ADOdb installieren
3. Datenkbankerweiterungen durchführen
INSERT INTO `configuration` VALUES ('', 'count_result_suggest', '20', 22, 3, NULL, '0000-00-00 00:00:00', NULL, NULL)
4. new_files kopieren.
5. changed_files kopieren, oder bei nicht standard-version folgende änderungen durchführen:
-includes/classes/class.inputfilter.php
---------------------------------------------------------------------------------------------------
finde folgendes:
foreach ($source as $key => $value)
// filter element for XSS and other 'bad' code etc.
$tmp_key = $key;
und füge danach ein:
if ($key != 'xajaxargs')
---------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------
-includes/header.php
---------------------------------------------------------------------------------------------------
finde folgendes:
<link rel="stylesheet" type="text/css" href="<?php echo 'templates/'.CURRENT_TEMPLATE.'/stylesheet.css'; ?>" />
und füge danach ein:
<script src="<?php echo 'templates/'.CURRENT_TEMPLATE.'/javascript/ajaxsuggest.js'; ?>" type="text/javascript"></script>
---------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------
-lang/english/admin/configuration.php
---------------------------------------------------------------------------------------------------
finde folgendes:
?>
und füge davor ein:
define('COUNT_RESULT_SUGGEST_TITLE','Number of results for the suggestsearch');
define('COUNT_RESULT_SUGGEST_DESC','Please fill in the number of results for the suggestsearch.');
---------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------
-lang/english/english.php
---------------------------------------------------------------------------------------------------
finde folgendes:
?>
und füge davor ein:
define('AUTOSUGGEST_CLOSE', 'Close window');
define('MORE_RESULTS', '...more results');
define('AUTOSUGGEST_NO_PRODUCTS', 'No products found');
define('AUTOSUGGEST_INTRO', 'We suggest this products for your keyword:');
define('AUTOSUGGEST_BOX_TEXT', 'Keyword or article nr');
---------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------
-lang/german/admin/configuration.php
---------------------------------------------------------------------------------------------------
finde folgendes:
?>
und füge davor ein:
define('COUNT_RESULT_SUGGEST_TITLE','Anzahl der Ergebnisse bei der Suggest Suche');
define('COUNT_RESULT_SUGGEST_DESC','Geben SIe hier an, wieviele Ergebnisse bei der Suggest-Suche zu sehen sein sollen.');
---------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------
-lang/german/german.php
---------------------------------------------------------------------------------------------------
finde folgendes:
?>
und füge davor ein:
define('AUTOSUGGEST_CLOSE', 'Fenster schliessen');
define('MORE_RESULTS', '...mehr Resultate');
define('AUTOSUGGEST_NO_PRODUCTS', 'Keine Produkte gefunden');
define('AUTOSUGGEST_INTRO', 'Zu diesem Suchbegriff empfehlen wir:');
define('AUTOSUGGEST_BOX_TEXT', 'Begriff oder Artikelnr.');
---------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------
-templates/xtc4/boxes/box_search.html
---------------------------------------------------------------------------------------------------
finde folgendes:
<table width="100%" border="0" cellpadding="2" cellspacing="0">
<tr>
<td class="infoBoxHeading"><table width="100%" border="0" cellpadding="0" cellspacing="0">
<tr>
<td class="infoBoxHeading">{#heading_search#} </td>
<td></td>
</tr>
</table></td>
</tr>
<tr>
<td class="infoBox" align="left"><table width="95%" border="0" cellpadding="2" cellspacing="0">
<tr>
<td class="boxText">
<table width="100%" border="0" cellpadding="2" cellspacing="0">
<tr>
<td valign="middle">{$INPUT_SEARCH}</td>
<td valign="middle">{$BUTTON_SUBMIT}</td>
</tr>
</table>
<br />
<a href="{$LINK_ADVANCED}">{#text_advanced_search#}</a> </td>
</tr>
</table></td>
und ersetze es mit:
<table border="0" cellpadding="0" cellspacing="0" align="center">
<tr>
<td valign="middle">{$INPUT_SEARCH}</td>
<!--<td valign="middle">{$ENTRY_CATEGORIES}</td>-->
<td valign="middle"> {$BUTTON_SUBMIT}</td>
<td valign="middle"> <a href="{$LINK_ADVANCED}">{#text_advanced_search#}</a></td>
---------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------
-templates/xtc4/index.html
---------------------------------------------------------------------------------------------------
finde folgendes:
<td class="main">{$navtrail}</td>
<td align="right" class="main">{if $account}{php} if (isset($_SESSION['customer_id'])) { {/php}<a href="{$logoff}">{#link_logoff#}</a> | {php} } {/php}{/if}{if $account}<a href="{$account}">{#link_account#}</a> | {/if}<a href="{$cart}">{#link_cart#}</a> | <a href="{$checkout}">{#link_checkout#}</a></td>
</tr>
und füge danach ein:
<tr>
<td colspan="2" bgcolor="#EDD4A8" class="main">{$box_SEARCH}</td>
</tr>
---------------------------------------------------------------------------------------------------
finde folgendes:
<td>{$box_CATEGORIES}{$box_ADD_QUICKIE}{$box_CONTENT}{$box_INFORMATION}{$box_LAST_VIEWED}{$box_REVIEWS}{$box_SEARCH}{$box_SPECIALS}{$box_WHATSNEW}</td>
und ersetze es mit:
<td>{$box_CATEGORIES}{$box_ADD_QUICKIE}{$box_CONTENT}{$box_INFORMATION}{$box_LAST_VIEWED}{$box_REVIEWS}{$box_SPECIALS}{$box_WHATSNEW}</td>
---------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------
-templates/xtc4/source/boxes/search.php
---------------------------------------------------------------------------------------------------
finde folgendes:
$box_smarty->assign('INPUT_SEARCH', xtc_draw_input_field('keywords', '', 'size="20" maxlength="30"'));
und ersetze es mit:
$box_smarty->assign('INPUT_SEARCH', '<div>'.xtc_draw_input_field('txtSearch', '', 'id="txtSearch" value="'.AUTOSUGGEST_BOX_TEXT.'" onclick="if(this.value==this.defaultValue) this.value=\'\';return false" onblur="if( this.value.replace(/\s/g, \'\') == \'\' ) this.value=this.defaultValue; return false" onkeyup="auto_suggest();" autocomplete="off" style="width: ' . (BOX_WIDTH-30) . 'px"').'</div><div id="search_suggest" name="search_suggest"></div>');
---------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------
-templates/xtc4/stylesheet.css
---------------------------------------------------------------------------------------------------
Am Ende einfügen:
.suggest_link {
display:block;
background-color: #ffffff;
padding: 2px 6px 2px 6px;
height:36px;
min-height:36px;
border-bottom:1px solid #CCCCCC;
color:#000000;
}
.suggest_link_over {
color: black;
background-image:url("img/suggest_over_bg.jpg");
background-repeat:repeat-x;
padding: 2px 6px 2px 6px;
cursor:pointer;
border-bottom:1px solid #CCCCCC;
height:36px;
min-height:36px;
}
#search_suggest {
position:absolute;
margin-left: -90px;
text-align: left;
border: 1px solid #000000;
background-color:#ffffff;
display: none;
z-index: 1000;
height:450px;
width:350px;
overflow:auto;
}
.autosuggest_intro {
height:22px;
padding-top:3px;
padding-left:5px;
background-image:url("img/heading_suggest_bg.jpg");
background-repeat:repeat-x;
padding-right:5px;
border-bottom:1px solid #CCCCCC;
}
.suggestclose_link {
font-weight:bold;
color:#000000;
display:block;
background-image:url("img/heading_suggest_bg.jpg");
background-repeat:repeat-x;
height:21px;
padding-top:4px;
padding-right:5px;
border-bottom:1px solid #CCCCCC;
}
.suggestclose_link:hover {
text-decoration:none;
cursor:pointer;
color:#000000
}
#suggestmore_link {
font-weight:bold;
color:#000000;
display:block;
background-image:url("img/heading_suggest_bg.jpg");
background-repeat:repeat-x;
height:21px;
padding-top:4px;
padding-right:5px;
border-bottom:1px solid #CCCCCC;
}
#suggestmore_link:hover {
text-decoration:none;
cursor:pointer;
color:#000000;
}
#suggest_image {
width:44px;
max-width:44px;
background-color:#ffffff;
text-align:center;
border:1px solid #CCCCCC;
}
.suggest_image {
width:44px;
float:left ;
}
.suggestwidth {
width:320px;
height:35px;
}
.suggest_productsname {
width:200px;
float:left;
padding-left:5px;
font-weight:bold;
}
.suggest_products_price {
white-space:nowrap;
float:right;
text-align:left;
}
.autosuggest_no_products {
height:22px;
padding-top:3px;
padding-left:5px;
background-image:url("img/heading_suggest_bg.jpg");
background-repeat:repeat-x;
padding-right:5px;
border-bottom:1px solid #CCCCCC;
color:#000000;
}
-xajax.functions.php
---------------------------------------------------------------------------------------------------
finde folgendes:
$xajax = new xajax();
und füge davor ein:
require_once (DIR_FS_INC.'xtc_parse_search_string.inc.php');
---------------------------------------------------------------------------------------------------
finde folgendes:
########################################################
##Ab hier können Funkrionen für Xajax definiert werden##
########################################################
und füge danach ein:
$xajax->registerFunction("search");
---------------------------------------------------------------------------------------------------
finde folgendes:
########################################################
##Ab hier können Funkrionen für Xajax eingefügt werden##
########################################################
und füge danach ein:
function search($suchtext) {
$suchtext = urldecode(zeichen_ersetzen($suchtext));
if (strlen($suchtext) > 0) {
if (!xtc_parse_search_string(stripslashes($suchtext), $search_keywords)) {
$errorno += 10000000;
$error = 1;
$keyerror = 1;
}
}
// define additional filters //
//fsk18 lock
if ($_SESSION['customers_status']['customers_fsk18_display'] == '0') {
$fsk_lock = " AND p.products_fsk18 != '1' ";
} else {
unset ($fsk_lock);
}
//group check
if (GROUP_CHECK == 'true') {
$group_check = " AND p.group_permission_".$_SESSION['customers_status']['customers_status_id']."=1 ";
} else {
unset ($group_check);
}
include('imedes_library/search_1.php');
//go for keywords... this is the main search process
if (isset ($suchtext) && xtc_not_null($suchtext)) {
if (xtc_parse_search_string(stripslashes($suchtext), $search_keywords)) {
$where_str .= " AND ( ";
for ($i = 0, $n = sizeof($search_keywords); $i < $n; $i ++) {
switch ($search_keywords[$i]) {
case '(' :
case ')' :
case 'and' :
case 'or' :
$where_str .= " ".$search_keywords[$i]." ";
break;
default :
$where_str .= " ( ";
$where_str .= "pd.products_keywords LIKE ('%".html_entity_decode(addslashes($search_keywords[$i]))."%') ";
if (SEARCH_IN_DESC == 'true') {
$where_str .= "OR pd.products_description LIKE ('%".html_entity_decode(addslashes($search_keywords[$i]))."%') ";
$where_str .= "OR pd.products_short_description LIKE ('%".html_entity_decode(addslashes($search_keywords[$i]))."%') ";
}
$where_str .= "OR pd.products_name LIKE ('%".html_entity_decode(addslashes($search_keywords[$i]))."%') ";
$where_str .= "OR p.products_model LIKE ('%".html_entity_decode(addslashes($search_keywords[$i]))."%') ";
if (SEARCH_IN_ATTR == 'true') {
$where_str .= "OR (pov.products_options_values_name LIKE ('%".html_entity_decode(addslashes($search_keywords[$i]))."%') ";
$where_str .= "AND pov.language_id = '".(int) $_SESSION['languages_id']."')";
}
$where_str .= " ) ";
break;
}
}
$where_str .= " ) GROUP BY p.products_id ORDER BY p.products_id";
}
}
//glue together
$sql = $select_str.$from_str.$where_str;
$xtPrice = new xtcPrice($_SESSION['currency'], $_SESSION['customers_status']['customers_status_id']);
$result = "";
$objResponse = new xajaxResponse();
if (strlen($suchtext)>1) {
include_once(DIR_WS_CLASSES.'thumbnail.inc.php');
$result .= "<div class='autosuggest_intro' style='color:#000000'><div><strong>" . AUTOSUGGEST_INTRO . "</strong></div></div>";
$product_query = xtc_db_query($sql);
$counter = 0;
$more_result = 'false';
while($product_array = xtc_db_fetch_array($product_query)) {
$counter++;
if ($counter <= count_result_suggest-1)
{
$image = '';
if ($product_array['products_image'] == '')
$product_array['products_image'] = 'noimage.jpg';
if ($product_array['products_image'] != '' && file_exists(DIR_WS_THUMBNAIL_IMAGES.$product_array['products_image'])) {
if (!file_exists(DIR_WS_THUMBNAIL_IMAGES.'search_'.$product_array['products_image'])) {
$thumb = new Thumbnail(DIR_WS_THUMBNAIL_IMAGES.$product_array['products_image']);
$thumb->resize('',30);
$thumb->save(DIR_WS_THUMBNAIL_IMAGES.'search_'.$product_array['products_image']);
}
$image = DIR_WS_THUMBNAIL_IMAGES.'search_'.$product_array['products_image'];
$image = '<div id="suggest_image"><img style="max-width:30px;" src="'.$image.'" /></div>';
}
$products_price = $xtPrice->xtcGetPrice($product_array['products_id'], $format = true, 1, $product_array['products_tax_class_id'], $product_array['products_price'], 1);
$result .= "<div title='". htmlentities($product_array['products_name']) . "' onmouseover='javascript:suggest_over(this);'";
$result .= " onmouseout='javascript:suggest_out(this);'";
$result .= " onclick='javascript:set_search(\"".$product_array['products_id']."\");' class='suggest_link'>";
$result .= "<div class='suggestwidth'><div class='suggest_image' align=\"left\">" . $image . "</div><div class='suggest_productsname'>" . htmlentities($product_array['products_name']) . "</div><div class='suggest_products_price' align=\"right\">" . $products_price['formated'] . "</div></div>";
$result .= "</div>";
} else {
$more_result = 'true';
}
}
if ($counter == 0) {
$result = "<div style='color:#000000' class='autosuggest_no_products'>" . AUTOSUGGEST_NO_PRODUCTS . "</div>";
$objResponse->addAssign("search_suggest", "style.height", '65px');
} else {
if ($counter < 12) {
$objResponse->addAssign("search_suggest", "style.height", (($counter*36)+95).'px');
} else {
$objResponse->addAssign("search_suggest", "style.height", '450px');
}
}
$result .= '<div align="right"><a onFocus="if(this.blur)this.blur()" onclick="suggestClose(this);return false" style="color:#000000;cursor:pointer" class="suggestclose_link">'.AUTOSUGGEST_CLOSE.'</a></div>';
if($more_result == 'true') {
$result .= '<div align="right"><a onFocus="if(this.blur)this.blur()"';
$result .= " onclick='javascript:more_result(\"".$suchtext."\");' style='color:#000000;cursor:pointer' id='suggestmore_link'>";
$result .= ''.MORE_RESULTS.'</a></div>';
}
$objResponse->addAssign("search_suggest", "style.display", 'block');
$objResponse->addAssign("search_suggest", "innerHTML", $result);
}
else
{
$objResponse->addAssign("search_suggest", "style.display", 'none');
}
return $objResponse;
}
function zeichen_ersetzen($string) {
$string = str_replace('%E4', "ä", $string);
$string = str_replace('%FC', "ü", $string);
$string = str_replace('%F6', "ö", $string);
$string = str_replace('%DF', "ß", $string);
return $string;
}
---------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------
|