Hallo ich hab mir ne kleine AJAX Live Search zusammengebaut, was soweit auch funktioniert, nur leider nicht wenn man sich in Kategorien oder auf Content Seiten befindet.
Hier mal der Code: ( die Datei liegt in out/template/src/ )
function searchFor(suchbegriff) {
var xmlHttp = null;
// Mozilla, Opera, Safari sowie Internet Explorer 7
if (typeof XMLHttpRequest != 'undefined') {
xmlHttp = new XMLHttpRequest();
}
if (!xmlHttp) {
// Internet Explorer 6 und älter
try {
xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
} catch (e) {
xmlHttp = null;
}
}
}
// Wenn das Objekt erfolgreich erzeugt wurde
if (xmlHttp) {
var url = "ajaxlivesearch.php";
var params = "suchbegriff=" + suchbegriff;
xmlHttp.open("POST", url, true);
// Headerinformationen für den POST Request
xmlHttp.setRequestHeader("Content-type",
"application/x-www-form-urlencoded");
xmlHttp.setRequestHeader("Content-length", params.length);
xmlHttp.setRequestHeader("Connection", "close");
xmlHttp.onreadystatechange = function() {
if (xmlHttp.readyState == 4) {
// Zurückgeliefertes Ergebnis wird in den DIV "ergebnis"
// geschrieben
if (xmlHttp.responseText.length > 2) {
document.getElementById("ergebnis").style.visibility = "visible";
document.getElementById("ergebnis").innerHTML = xmlHttp.responseText;
} else {
document.getElementById("ergebnis").style.visibility = "hidden";
}
}
};
xmlHttp.send(params);
}
}
Ich habe da ja var = ajaxlivesearch.php
das klappt auch wenn ich auf der Startseite bin aber wenn ich zum Beispiel in einer Kategorie bin kommt folgendes:
Die angeforderte Seite ‘DVD-oxid/ajaxlivesearch.php/’ konnte nicht gefunden werden.
Wie umgeh ich diesen Fehler??
Danke schon mal für Hilfe…
du musst den fixen urlpfad angeben. also “http://meinshop.de/ajaxlivesearch.php”. sollte aber auch “/ajaxlivesearch.php” gehen. Und übrigens: Bei oxid ist Jquery dabei, da ist der ajax request vllt ein 5zeiler
Nun habe ich ja noch eine PHP Datei dazu für den Datenbank Zugriff…klappt auch soweit, nur wie komm ich an die URL der Produkte ? kann ja mit der datei nicht auf die oxarticle Klasse zugreifen und mir die ausspucken lassen…
// Server Verbindung herstellen
mysql_connect($db['server'], $db['user'], $db['pass']) or
die ("Keine Verbindung moeglich");
// Datenbank Verbidung
mysql_select_db($db['name']) or
die ("Die Datenbank existiert nicht");
$tabelle = "oxarticles";
$searchString = explode(" ", $_POST['suchbegriff']);
$sWhere = "";
foreach($searchString as $s) {
if($sWhere != "") {
$sWhere .= " AND ";
}
$sWhere .= " OXTITLE LIKE ('%".mysql_real_escape_string(utf8_decode($s))."%') ";
}
$sql = "SELECT * FROM ".$tabelle." WHERE ".$sWhere." LIMIT 0,5";
$result = mysql_query($sql);
echo "<strong>Sie suchten nach: ".$_POST["suchbegriff"]."</strong><br/><br/>";
while($row = mysql_fetch_object($result)){
echo utf8_encode($row->OXTITLE);
echo "<br/>";
}
mach doch nen eigenen view dafür. nennste highknee_ajaxlivesearch.php und nutzt dann folgende url:
/index.php?cl=highknee_ajaxlivesearch.
die klasse hat nix ausser ne render methode und gibt direkt einfach das xml aus. was übrigens für eine livesuche die viele daten zurückliefern kann einen enormen overhead produziert, was die suche unnötig langsam machen wird.
[QUOTE=csimon;29172]Und übrigens: Bei oxid ist Jquery dabei, da ist der ajax request vllt ein 5zeiler ;)[/QUOTE]
Ist mir auch schon aufgefallen…
Konnte aber bisher noch keine Stelle im Shop finden, wo das auch verwendet wird…
Habe ich da was übersehen?
Aber die integrierte Version jQuery 1.2.6 ist eh’ schon so überaltert, dass sie stinkt…
Die aktuelle jQuery-Version 1.4.1 hat einige funktionelle Verbesserungen und (teilweise dramatische) Geschwindigkeitsverbesserungen zu bieten, man sollte also auf jeden Fall die aktuellen Versionen verwenden.
[QUOTE=csimon;29184]mach doch nen eigenen view dafür. nennste highknee_ajaxlivesearch.php und nutzt dann folgende url:
/index.php?cl=highknee_ajaxlivesearch.
die klasse hat nix ausser ne render methode und gibt direkt einfach das xml aus. was übrigens für eine livesuche die viele daten zurückliefern kann einen enormen overhead produziert, was die suche unnötig langsam machen wird.[/QUOTE]
Warum soll er seine php durch die index.php und alles dranhängende pipen? Besser ist es, die eine php direkt anzusprechen, ohne den Umweg über Oxid.
Warum soll er seine php durch die index.php und alles dranhängende pipen? Besser ist es, die eine php direkt anzusprechen, ohne den Umweg über OXID.
Weil er dann entweder das framework so initialisieren müsste, was denselben effekt hat wies gleich in einem view zu machen oder er alle querys etc selber schreiben müsste und den ganzen kram unabhängig vom shop würde warten müssen. und so kann er die oxid funktionen nutzen, ohne das framework zu initialisieren würd er sich da doppelte arbeit machen.
Übrigens: Ich würde das nicht über ein template machen sondern so:
public function render() {
// deine abfrage etc.pp
header('Content-type: text/xml');
echo $xml;
exit;
}
[QUOTE=csimon;29237]Weil er dann entweder das framework so initialisieren müsste, was denselben effekt hat wies gleich in einem view zu machen oder er alle querys etc selber schreiben müsste und den ganzen kram unabhängig vom shop würde warten müssen. [/QUOTE]
Ich hatte es so verstanden, dass es um die Population einer Vorschlagsliste für das Suchfeld geht. Das muß ja auch fix gehen, da ist ein direkter Zugriff auf mySQL einfach schneller, und die ganzen Framework-Komponenten brauchts ja nicht, wenn zB nur nach OXARTNUM, OXTITLE, OXSEARCHKEYS etc. geschaut werden soll.
Gebe zu, daß man sich dann noch um die Umschaltung auf OXTITEL_X usw. kümmern müßte, sofern man in den anderen Sprachen auch andere Daten hierfür hat.
Bis das Oxid-Framework eine Antwort liefert, vergehen für wirkliche Live-Search mMn zuviele Millisekunden.
Gruß,
Achim
PS: Bin aber gespannt, ob es auch mit Eurem Ansatz geht.
Ja nur komm ich dann ja irgendwie nicht auf die OXSEO Url für die Artikel die gefunden werden…was ja schon recht hilfreich ist Außer ich bau die ganze seo encoder geschichte nach…
Aber bisher funktioniert das leider nicht mit der View
Ich hab auch nicht wirklich das gefühl dass er die funktion render() in dem Fall aufruft, weil einfach die Startseite nochmal aufgebaut wird in dem DIV…
[QUOTE=highknee88;29241]Ja nur komm ich dann ja irgendwie nicht auf die OXSEO Url für die Artikel die gefunden werden…was ja schon recht hilfreich ist Außer ich bau die ganze seo encoder geschichte nach([/QUOTE]
[QUOTE=highknee88;29232]
Wenn ich jetzt den link kommt auch genau der Inhalt.
Aber bei meiner Live Search baut er eine komplette Seite quasi in dem Div auf also nicht nur
Wodran könnte das liegen ?[/QUOTE]
Das dürfte daran liegen dass per Ajax nicht derselbe Link aufgerufen wird. Im Fehlerfall lädt Oxid immer die Startseite.