Hi, ich habe bereits eine ProductViewOverload-Klasse, um Tabs zu manipulieren. Zusätzlich möchte ich einen weiteren Tab mit der Bezeichnung "Grundlegendes" einfügen, der die Beschreibung der Kategorie ausgibt, in der sich das Produkt befindet. Am besten aber den Text aller übergeordneten Kategorien. Der Tab ist nun vorhanden, aber weiß jemand wie ich an den Inhalt komme? Danke, Michael
Bin der Sache ein Stück näher gekommen: Code: protected function _getCategoryDescription() { $query = 'SELECT categories_description FROM categories_description AS c INNER JOIN products_to_categories AS pc ON c.categories_id=pc.categories_id INNER JOIN products AS p ON pc.products_id=p.products_id WHERE p.products_id = ' . (int)$this->product->data['products_id']; $groups = array(); $result = xtc_db_query($query); while($row = xtc_db_fetch_array($result)) { $groups[] = $row["categories_description"]; } return ($groups[0]); } ...... Code: protected function _assignDescription() { /* @var GMTabTokenizer $tabTokenizer */ ... ... ... ... ... $tab_grundlegendes = $this->_getCategoryDescription(); if ($tab_grundlegendes) { $tabs[] = array( 'title' => 'Grundlegendes', 'content' => $this->_getCategoryDescription() ); } $this->set_content_data('tabs', $tabs); } Also hiermit wird zumindest die Kategoriebeschreibung angezeigt, in der sich das Produkt befindet. Rekursiv nicht, und l18n-fähig ist's auch noch nicht... Das alles geht doch bestimmt einfacher, oder? Gruß, Michael
Hi Schleifer, also die jeweils passende Sprache solltest Du hinbekommen, indem Du die Session-Variable ausliest. Dort gibt es ein Feld namens 'languages_id'. Die ID sollte der Sprach-ID im Table categories_description entsprechen. Die könntest Du in deiner where-clause verbauen. Getestet habe ich das aber nicht. Gruß
Code: WHERE p.products_id=' . (int)$this->product->data['products_id'] . ' AND c.language_id=' . (int)$this->languageId; Danke.
Hi, es zieht mal wieder einen Rattenschwanz nach sich. Heute mittag ist mir aufgefallen, dass mein Konzept nicht aufgeht, weil die Suche nicht in der Kategoriebeschreibung sucht, und somit werden entsprechende Artikel schlechter gefunden. Also habe ich (zumindest) die Ajax-Suche so manipuliert, dass nun auch Kategorien gefunden und angezeigt werden: /GXUserComponents/overloads/LiveSearchAjaxHandler/SearchHandlerOverload.inc.php PHP: class SearchHandlerOverload extends SearchHandlerOverload_parent{ function proceed() {// ..... den originalen Code der Methode proceed() bis zum Ausgabeblock dupliziert ..... if (SEARCH_IN_DESC == 'true') { $t_group_check_from = ''; $t_group_check_where = ''; if (GROUP_CHECK == 'true') { $t_group_check_from = " INNER JOIN categories AS c USING (categories_id) "; $t_group_check_where = " AND c.group_permission_".(int)$_SESSION['customers_status']['customers_status_id']."=1 "; } $result = xtc_db_query(' SELECT DISTINCT cd.categories_id AS categories_id, cd.categories_name AS categories_name, cd.categories_description AS categories_description FROM categories_description AS cd ' . $t_group_check_from . ' WHERE categories_description LIKE ("%'.$c_needle.'%") AND cd.language_id = "' . (int)$_SESSION['languages_id'] . '" ' . $t_group_check_where . ' ORDER BY categories_name LIMIT 0,5 '); while(($row = xtc_db_fetch_array($result) )) { $module_content[] = array( 'PRODUCTS_URL' => xtc_href_link(FILENAME_PRODUCT_INFO, xtc_category_link($row['categories_id'], $row['categories_name'])), 'PRODUCTS_NAME' => $row['categories_name'], 'PRODUCTS_IMAGE' => '/images/search_cat.png' ); } }// .... ab hier wieder original .... if(count($module_content)) { $view = MainFactory::create('ContentView'); $view->set_content_template('module/gm_live_search.html'); $view->set_flat_assigns(true); $view->set_content_data('module_content', $module_content); $this->v_output_buffer = $view->get_html(); } return true; }} Das funktioniert, und damit bin ich schon ganz zufrieden. Allerdings will ich den duplizierten Code aus dem Overload raus haben. Der Versuch, die originale proceed() wie folgt auszuführen schlug fehl: PHP: class SearchHandlerOverload extends SearchHandlerOverload_parent{ function proceed() { parent::proceed(); // ..... // ..... }} Falls jemand weiß, wie ich das besser machen kann, bitte her damit. Ich tu mir da relativ schwer, weil ich kein Programmierer bin. Ich fuchs mich nur in die Sache rein, so gut es geht. Und wenn niemand was weiß, oder Lust hat, kanns ja vielleicht immerhin jemand brauchen. Anonsten würde mich noch interessieren, ob das Ganze seospezifische Nachteile hat. Danke, Michael.
Je mehr Du von der Suche durchsuchen lässt, um so mehr kannst Du dir den Shop damit lahm legen. Zumindest wenn Du keinen eigenen Server mit richtig Power hast. Bei einem Shared-Hosting kann schon die suche in Eigenschaften / Attributen zu viel sein.
Oh, meine zweite Datenbankabfrage pro Sucheingabe fand ich schon etwas unvorteilhaft, aber dass selbst die Standardsuchoptionen einen Server schon soweit in die Knie zwingen, hätte ich nun nicht gedacht. Der Shop wird diesen Monat auf nem Medium-Hostingpaket bei DF in Betrieb gehen. Gut, wenn alle Stricke reißen, gibt es ein leistungsfähigeres Paket, oder nen Umzug auf nen anderen Server. Das sollte nicht das Problem sein. Mal im Auge behalten... Gibts da ein Tool für? Sowas wie z.B. den Befehl "uptime", welcher die Serverlast im Zeitverlauf anzeigt. Am liebsten wäre es mir, wenn ich's per SSH auslesen und dann auswerten kann. Danke.