Kategoriebeschreibung in ProductViewOverload

Thema wurde von Anonymous, 28. Januar 2019 erstellt.

  1. Anonymous

    Anonymous Mitglied

    Registriert seit:
    31. August 2018
    Beiträge:
    20
    Danke erhalten:
    3
    Danke vergeben:
    8
    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
     
  2. Anonymous

    Anonymous Mitglied

    Registriert seit:
    31. August 2018
    Beiträge:
    20
    Danke erhalten:
    3
    Danke vergeben:
    8
    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
     
  3. Anonymous

    Anonymous Erfahrener Benutzer

    Registriert seit:
    17. Juli 2018
    Beiträge:
    49
    Danke erhalten:
    8
    Danke vergeben:
    11
    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ß
     
  4. Anonymous

    Anonymous Mitglied

    Registriert seit:
    31. August 2018
    Beiträge:
    20
    Danke erhalten:
    3
    Danke vergeben:
    8
    Code:
    WHERE p.products_id=' . (int)$this->product->data['products_id'] . ' AND c.language_id=' . (int)$this->languageId;
    Danke.
     
  5. Anonymous

    Anonymous Mitglied

    Registriert seit:
    31. August 2018
    Beiträge:
    20
    Danke erhalten:
    3
    Danke vergeben:
    8
    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.
     
  6. barbara

    barbara G-WARD 2014-2020

    Registriert seit:
    14. August 2011
    Beiträge:
    35.352
    Danke erhalten:
    11.198
    Danke vergeben:
    1.601
    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.
     
  7. Anonymous

    Anonymous Mitglied

    Registriert seit:
    31. August 2018
    Beiträge:
    20
    Danke erhalten:
    3
    Danke vergeben:
    8
    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. :confused:

    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.