Modul 2. Kategoriebeschreibung für GX2 ab V2.1.0.0

Thema wurde von Steffen (indiv-style.de), 16. Februar 2015 erstellt.

  1. Anonymous
    Anonymous Erfahrener Benutzer
    Registriert seit:
    14. Juli 2011
    Beiträge:
    1.004
    Danke erhalten:
    74
    Danke vergeben:
    132
    müsste man dafür nicht einfach nur CategoryListingContentView.inc.php überschreiben?
     
  2. Steffen (indiv-style.de)
    Steffen (indiv-style.de) G-WARD 2013/14/15/16
    Registriert seit:
    30. Juni 2011
    Beiträge:
    5.143
    Danke erhalten:
    1.466
    Danke vergeben:
    452
    Beruf:
    Systemadmin, Webentwickler bei Indiv-Style
    Ort:
    PhpStorm
    So einfach ist das nicht! Richtig ist das bei Unterkatekorien das CatListing greift und auch hier funktioniert das mit dem [2KAT2]!!! ABER...
    Gewünscht ist folgrnde Reihenfolge:
    1. Katbeschreibung 1. Teil
    2. Unterkategorien
    3. Artikel
    4. Katbeschreibung Teil 2

    Anzeigen tut er:
    1. Katbeschreibung 1. Teil
    2. Unterkategorien
    3. Katbeschreibung Teil 2
    4. Artikel

    Ich habe das gelöst indem ich gewisse Abfragen imolementiert habe wo auch die Session eine Rolle spielt.

    Beispiel:

    http://www.1a-gebrauchte-drucker.de/Gebrauchte-Laserdrucker/
     
  3. Anonymous
    Anonymous Erfahrener Benutzer
    Registriert seit:
    14. Juli 2011
    Beiträge:
    1.004
    Danke erhalten:
    74
    Danke vergeben:
    132
    CategoryListingContentView lässt sich nicht sauber überladen. Das prepare_data greift nicht weil die gesamte logic in get_html() steckt.
     
  4. Anonymous
    Anonymous Erfahrener Benutzer
    Registriert seit:
    14. Juli 2011
    Beiträge:
    1.004
    Danke erhalten:
    74
    Danke vergeben:
    132
    Hier stellt sich wieder mal die grundsätzliche Frage:

    Was ist updatesicherer:
    1. Anpassung von CategoryListingContentView
    2. Erstellen einer Sub-Klasse / kopieren der gesamten get_html() inkl. der eigenen Änderungen!

    Beides ziemlich schrottig
     
  5. Avenger
    Avenger G-WARD 2012/13/14/15
    Registriert seit:
    26. April 2011
    Beiträge:
    4.771
    Danke erhalten:
    1.478
    Danke vergeben:
    89
  6. Avenger
    Avenger G-WARD 2012/13/14/15
    Registriert seit:
    26. April 2011
    Beiträge:
    4.771
    Danke erhalten:
    1.478
    Danke vergeben:
    89
    In solchen Fällen (also wenn man Template-Daten aus einem Overload in einem anderen Template braucht) habe ich diese Daten in "$_POST" abgespeichert...

    Denn mit "$smarty.post" komme ich in dem anderen Template an diese Daten heran...

    Die "Katbeschreibung Teil 2" würde ich daher in ein "$_POST" legen.

    Nicht sehr schön, aber einfach und wirkungsvoll.
     
  7. Anonymous
    Anonymous Erfahrener Benutzer
    Registriert seit:
    14. Juli 2011
    Beiträge:
    1.004
    Danke erhalten:
    74
    Danke vergeben:
    132
    Aus unerklärlichen gründen funktioniert das bei mir nicht:

    Beispiel:

    wenn ich in meiner überladenen ProductsListingContentView folgendes mache:

    Code:
    	    $_POST['dasisteintest'] = 'true';
    	    var_dump($_POST);
    dann zeigt mir var_dump, dass der wert korrekt gesetzt ist.

    Versuche ich den Wert nun in categorie_listing mittels smarty auszugeben:

    Code:
    product listing: {$smarty.post.dasisteintest}
    Dann ist der Wert leer!
     
  8. Steffen (indiv-style.de)
    Steffen (indiv-style.de) G-WARD 2013/14/15/16
    Registriert seit:
    30. Juni 2011
    Beiträge:
    5.143
    Danke erhalten:
    1.466
    Danke vergeben:
    452
    Beruf:
    Systemadmin, Webentwickler bei Indiv-Style
    Ort:
    PhpStorm
    #28 Steffen (indiv-style.de), 26. April 2015
    Zuletzt bearbeitet: 26. April 2015
    Hier meine Lösung für die 2. Kategoriebeschreibung für GX2 ab V2.1.0.0

    Ich hab das über die $_SESSION gelößt! Das ist zwar genau so "unschön" aber das funzt.... ;)

    1 . in /user_classes/overloads/ den Ordner CategoryListingContentView anlegen und die angehängte AS_VategoryDescriptionTwo.php reinkopieren.


    2 . in /user_classes/overloads/ den Ordner ProductListingContentView anlegen und die angehängte AS_VategoryDescriptionTwo.inc.php reinkopieren.


    3 . in /templates/EyeCandy/module/categorie_listing/ die angehängte categorie_listing-USERMOD.html reinkopieren.


    4 . in /templates/EyeCandy/module/product_listing/ die angehängte product_listing_v1-USERMOD-USERMOD.html reinkopieren.

    5. Im Kat-Text das mit [2KAT2] die Trennung der Katbeschreibung setzen.

    Ich habe fertig........ ;) ;) ;)
     

    Anhänge:

  9. Anonymous
    Anonymous Erfahrener Benutzer
    Registriert seit:
    14. Juli 2011
    Beiträge:
    1.004
    Danke erhalten:
    74
    Danke vergeben:
    132
    Danke! Aber schön ist die Lösung wirklich nicht. :) - Ich würde das am liebsten ohne Session hinbekommen. Aber fürs erste genügt mir das
     
  10. Steffen (indiv-style.de)
    Steffen (indiv-style.de) G-WARD 2013/14/15/16
    Registriert seit:
    30. Juni 2011
    Beiträge:
    5.143
    Danke erhalten:
    1.466
    Danke vergeben:
    452
    Beruf:
    Systemadmin, Webentwickler bei Indiv-Style
    Ort:
    PhpStorm
    So richtig sauber wird es erst wenn man die 2.Kat´beschreibung trennt von der 1. Das heist das man im Admin wie im Frontend beides trennt.
     
  11. Anonymous
    Anonymous Erfahrener Benutzer
    Registriert seit:
    14. Juli 2011
    Beiträge:
    1.004
    Danke erhalten:
    74
    Danke vergeben:
    132
    Ich sehe gerade dass die Lösung nicht vollständig ist! D.h. wenn man innerhalb von einer Kategorie nur Unterkategorien (und keine Artikel!) anzeigt, dann wird auch die 2. Kategoriebeschreibung nicht angezeigt. Und genau dass ist ja die Schwierigkeit. Deine Lösung lässt sich auch mit Hilfe von $_POST wie von Avenger beschrieben ohne Verwendung der Session realisieren.
     
  12. Steffen (indiv-style.de)
    Steffen (indiv-style.de) G-WARD 2013/14/15/16
    Registriert seit:
    30. Juni 2011
    Beiträge:
    5.143
    Danke erhalten:
    1.466
    Danke vergeben:
    452
    Beruf:
    Systemadmin, Webentwickler bei Indiv-Style
    Ort:
    PhpStorm
    Dann frag doch ab ob die Artikel mit angezeigt werden, wenn Unterkats da sind! Das sind doch Parameter die vorhanden sind und wenn keine Artikel angezeigt werden übergibst du die 2. KB eben dem Categorie_listing und nicht dem product_listing....

    Ich sehe da kein wirkliches Problem das zu machen!
     
  13. Moritz (Gambio)
    Moritz (Gambio) Administrator
    Registriert seit:
    26. April 2011
    Beiträge:
    5.786
    Danke erhalten:
    2.694
    Danke vergeben:
    903
    Hallo,

    das ganze kann auch eleganter mit einem Smarty-Plugin gelöst werden:

    PHP:
    <?php
    /* --------------------------------------------------------------
       modifier.get_part.php 2015-04-26 mb
       Gambio GmbH
       http://www.gambio.de
       Copyright (c) 2015 Gambio GmbH
       Released under the GNU General Public License (Version 2)
       [http://www.gnu.org/licenses/gpl-2.0.html]
       --------------------------------------------------------------
    */

    /**
     * Smarty plugin
     * @package    Smarty
     * @subpackage plugins
     */

    /**
     * Smarty get_part modifier plugin
     *
     * Type:     modifier<br>
     * Name:     get_part<br>
     * Purpose:  explode string by given delimiter and return requested part
     *
     * @param string $p_string
     * @param string $p_explodeDelimiter 
     * @param int    $p_returnPart 1 = first part, 2 = second part, ...
     *
     * @return string
     */
    function smarty_modifier_get_part($p_string$p_explodeDelimiter$p_returnPart 1)
    {
        
    $string = (string)$p_string;
        
    $delimiter = (string)$p_explodeDelimiter;
        
    $part = (int)$p_returnPart 1;
        
        if(
    $string !== '' && $delimiter !== '')
        {
            
    $explodedString explode($delimiter$string);
            if(
    array_key_exists($part$explodedString))
            {
                
    $string $explodedString[$part];
            }
            elseif(
    $part !== 0)
            {
                
    $string '';
            }
        }
        
        return 
    $string;
    }
    Im Template kommt man so an den ersten und zweiten Teil:
    Code:
    {$CATEGORIES_DESCRIPTION|get_part:"[2KAT2]":1}
    
    {$CATEGORIES_DESCRIPTION|get_part:"[2KAT2]":2}
    Damit spart man sich das Überladen von PHP-Code.

    Viel Spaß damit :).
     

    Anhänge:

  14. Anonymous
    Anonymous Erfahrener Benutzer
    Registriert seit:
    14. Juli 2011
    Beiträge:
    1.004
    Danke erhalten:
    74
    Danke vergeben:
    132
    Habs jetzt meine eigene Logik implementiert:

    Die Schwierigkeit war es zu ermitteln ob in
    HTML:
    categorie_listing.html
    lediglich Subkategorien anzeigt werden, oder zusätzlich auch Produkte. In der Überladenen CategoryListingContentView einfach eine neue Smarty Variable setzen:

    Code:
    $this->set_content_data('SHOW_SUB_PRODUCTS', $category['show_sub_products']);
    und in der categories_listing.html eintsprechend abfragen.

    Code:
    {if (isset($smarty.post.CATEGORIES_DESCRIPTION_SECOND) && !($SHOW_SUB_PRODUCTS))}
                {$smarty.post.CATEGORIES_DESCRIPTION_SECOND}          
            {/if}     
    Damit bin ich glücklich. Die SESSION wird nicht angerührt
     
  15. Steffen (indiv-style.de)
    Steffen (indiv-style.de) G-WARD 2013/14/15/16
    Registriert seit:
    30. Juni 2011
    Beiträge:
    5.143
    Danke erhalten:
    1.466
    Danke vergeben:
    452
    Beruf:
    Systemadmin, Webentwickler bei Indiv-Style
    Ort:
    PhpStorm
    Diese Möglichkeit hab ich gar nicht in Betracht gezogen! Das ermöglicht überall das splitten von Smartyvariablen! Klasse!!!!
     
  16. Martina Korte
    Martina Korte Erfahrener Benutzer
    Registriert seit:
    11. September 2012
    Beiträge:
    97
    Danke erhalten:
    0
    Danke vergeben:
    4
    Hi Steffen,

    kann es sein, daß Du Dich oben verschrieben hast?

    Punkt 1: in /user_classes/overloads/ den Ordner CategoryListingContentView anlegen und die angehängte AS_VategoryDescriptionTwo.php reinkopieren. - Die Datei hängt gar nicht dran - da soll wohl die AS_categoryDescriptionTwo.inc.php rein, oder????

    Punkt2! ....in /user_classes/overloads/ den Ordner ProductListingContentView anlegen und die angehängte AS_VategoryDescriptionTwo.inc.php reinkopieren??? Soll da vielleicht die IS_ProductListingContentView.inc.php rein???

    Gestern hatte ichs schon mal probiert, da hats nicht gefunzt, aber da hing auch iwie eine Datei weniger dran, kann das sein?

    lg
    Martina
     
  17. Martina Korte
    Martina Korte Erfahrener Benutzer
    Registriert seit:
    11. September 2012
    Beiträge:
    97
    Danke erhalten:
    0
    Danke vergeben:
    4
    hm... jetzt nochmal probiert - geht aber iwie nicht...

    lg
     
  18. barbara
    barbara G-WARD 2014-2020
    Registriert seit:
    14. August 2011
    Beiträge:
    35.657
    Danke erhalten:
    11.371
    Danke vergeben:
    1.616
    Hallo Martina,
    ich habe das jetzt zwar icht getestet, aber ich denke es müsste so gehen:

    lege in /user_classes/overloads/ den Ordner CategoryListingContentView an und lade da die
    AS_CategoryDescriptionTwo.inc.php hineien.

    lege dann in /user_classes/overloads/ den Ordner ProductListingContentView an und lade da die
    IS_ProductListingContentView.inc.php‎ hinein.

    Und dann kannst Du die anderen Änderungen wie in der Anleitung beschreiben machen.
    Cache leeren nicht vergessen :)
     
  19. Martina Korte
    Martina Korte Erfahrener Benutzer
    Registriert seit:
    11. September 2012
    Beiträge:
    97
    Danke erhalten:
    0
    Danke vergeben:
    4
    jepp, genau so hatte ich mir das auch erschlossen, erschien mir logisch - waren ja nicht mehr Dateien zur Auswahl da! Funktioniert aber irgendwie nicht.... In der Kategorienbeschreibung steht jetzt einfach [2KAT2] :-(
     
  20. barbara
    barbara G-WARD 2014-2020
    Registriert seit:
    14. August 2011
    Beiträge:
    35.657
    Danke erhalten:
    11.371
    Danke vergeben:
    1.616
    Und Seine Shopversion ist 2.2.0, bzw. 2.1.x?