Anleitung Content als TAB in Artikeldetails

Thema wurde von Avenger, 21. Mai 2012 erstellt.

  1. Avenger

    Avenger G-WARD 2012/13/14/15

    Registriert seit:
    26. April 2011
    Beiträge:
    4.771
    Danke erhalten:
    1.478
    Danke vergeben:
    89
    Da die Meisten wohl mit der Implementierung einer solchen Lösung leicht überfordert sind, und ich gerade so was auch gut brauchen kann, habe ich das mal implementiert....

    Folgenden Code als "includes\classes\Smarty\plugins\function.pt_load_cms_data.php" speichern:
    (Das ist das Smarty-Plugin zum Laden von CMS-Inhalten.)

    PHP:
    <?php
    /* --------------------------------------------------------------
    function.pt_load_cms_data.php 2011-10-25 Avenger

    Copyright (c) 2012 Avenger, entwicklung@powertemplate.de
    Smarty function to allow inclusion of CMS content into template

    Usage:

    {pt_load_cms_data coID=1234}

    with coID equal the group id of the page requested

    --------------------------------------------------------------
    */

    function smarty_function_pt_load_cms_data($params, &$smarty)
    {
      
    $content='';
      
    $coID=$params['coID'];
      if (
    $coID)
      {
        if (
    GROUP_CHECK == 'true')
        {
          
    $group_check "AND group_ids LIKE '%c_".$_SESSION['customers_status']['customers_status_id']."_group%'";
        }
        
    $dbQuery "
          SELECT
            content_title,
            content_text,
            content_file,
            gm_link
          FROM
            "
    .TABLE_CONTENT_MANAGER."
          WHERE
            content_group = '"
    .intval($coID)."' AND
            languages_id = '"
    .(int) $_SESSION['languages_id']."'
            "
    .$group_check;
        
    $dbQuery xtDBquery($dbQuery);
        
    $dbQuery xtc_db_fetch_array($dbQuery,true);
        if (
    $dbQuery)
        {
          
    $content_title=trim($dbQuery['content_title']);
          
    $content_file=trim($dbQuery['content_file']);
          if (
    $content_file)
          {
            
    $content_file='media/content/'.$content_file;
            
    $content_file_path=DIR_FS_CATALOG.$content_file;
            
    $have_direct_link=false;
            
    $is_file_content_file=is_file($content_file);
            if (
    $is_file_content_file)
            {
              if (
    strpos($content_file'.php'))
              {
                
    ob_start();
                include(
    $content_file);
                
    $content=ob_end_clean();
              }
              else
              {
                
    $content=file_get_contents($content_file_path);
                
    $is_text_file=strpos($content_file'.txt')!==false;
                if (
    $is_text_file)
                {
                  
    $content="<pre>".$content."</pre>";
                }
              }
            }
          }
          else
          {
            
    $content=$dbQuery['content_text'];
          }
          
    $content_smarty=new Smarty;
          while (
    strpos($content,'{')!==false)
          {
            
    $content=smarty_function_eval(array('var'=>$content), $content_smarty);
          }
        }
      }
      return 
    $content_title.'###'.$content;
    }
    ?>
    Das reicht aber leider noch nicht ganz, da der Gambio "TABTokenizer" kein Rendering der TAB-Inhalte durch Smarty erlaubt (was wir aber für die Einbindung unseres Smarty-Plugins unbedingt brauchen), so dass wir dem das auch noch beibringen müssen....
    (Kann man sicher auch für den reinen Ersatz von Smarty-Variablen in den TABs gut gebrauchen.)

    Dazu folgenden Code als "user_classes\overloads\GMTabTokenizer\pt_GMTabTokenizer.php" speichern (und Cache löschen!):

    PHP:
    <?php
    /* --------------------------------------------------------------
     pt_GMTabTokenizer.php 2010-05-25 gm
     Gambio GmbH
     http://www.gambio.de
     Copyright (c) 2010 Gambio GmbH

     Copyright (c) 2012 Avenger, entwicklung@powertemplate.de
     Extend TAB tokenizer to allow smarty-rendering of TAB content.

     Released under the GNU General Public License (Version 2)
     [http://www.gnu.org/licenses/gpl-2.0.html]
     --------------------------------------------------------------

     based on:
     (c) 2000-2001 The Exchange Project  (earlier name of osCommerce)
     (c) 2002-2003 osCommerce(boxes.php,v 1.32 2003/05/27); www.oscommerce.com
     (c) 2003     nextcommerce (boxes.php,v 1.11 2003/08/13); www.nextcommerce.org
     (c) 2003 XT-Commerce - community made shopping http://www.xt-commerce.com ($Id: boxes.php 899 2005-04-29 02:40:57Z hhgag $)

     Released under the GNU General Public License
     ---------------------------------------------------------------------------------------*/

    class pt_GMTabTokenizer extends pt_GMTabTokenizer_parent
    {
      var 
    $content_smarty;

      function 
    pt_GMTabTokenizer($content)
      {
        include_once(
    DIR_WS_CLASSES.'Smarty/plugins/function.eval.php');
        
    $this->content_smarty=new Smarty;
        
    parent::GMTabTokenizer($content);
      }

      function 
    get_prepared_output()
      {
        if(
    sizeof($this->panel_content) > 0)
        {
                for(
    $i=0$i<sizeof($this->panel_content); $i++)
          {
                    
    $panel_content=$this->panel_content[$i];
            if (
    strpos($panel_content,'}')!==false)
            {
              
    $panel_content=smarty_function_eval(array('var'=>$panel_content), $this->content_smarty);
              
    $panel_content_parts=explode('###',$panel_content);
              if (
    count($panel_content_parts)>1)
              {
                
    $this->tab_content[$i]=$panel_content_parts[0];
                
    $panel_content=$panel_content_parts[1];
              }
              
    $this->panel_content[$i]=$panel_content;
            }
                }
        }
        return 
    parent::get_prepared_output();
      }
    }
    ?>
    Mit diesen Modulen habe ich bei einem Artikel folgende TAB-Definition gemacht:

    PHP:
    [TAB:abcde]
    {
    pt_load_cms_data coID=6}
    (Der TAB-Name ist dabei belanglos, er wird durch den Titel der CMS-Seite ersetzt.)

    Damit erhalte ich dann den "Gutscheine"-Tab (coID=6) im Artikel (s. Bild).
     

    Anhänge:

  2. Rico

    Rico Erfahrener Benutzer

    Registriert seit:
    25. März 2013
    Beiträge:
    821
    Danke erhalten:
    67
    Danke vergeben:
    48
    Gibt es eine Lösung für Version 2.3.1.3, da der Tokenizer in Zeile 32 zu einer Fehlermeldung führt?
     
  3. Rico

    Rico Erfahrener Benutzer

    Registriert seit:
    25. März 2013
    Beiträge:
    821
    Danke erhalten:
    67
    Danke vergeben:
    48
    Ich schubs das Thema nochmal an. Ohne diese Funktion kann ich das Update leider nicht weiter testen. Die anderen Fehlermeldungen konnte ich beseitigen. Nur die Tab-Geschichte klappt nicht. @Avenger vielleicht hast du eine einfache Lösung?! :D
     
  4. Rico

    Rico Erfahrener Benutzer

    Registriert seit:
    25. März 2013
    Beiträge:
    821
    Danke erhalten:
    67
    Danke vergeben:
    48
    Keiner mag mir helfen *heul* ;-p

    Bei diesem Smarty-Thema habe ich absolut null Ahnung. Deswegen wäre es super, wenn es hierfür eine Lösung gäbe. Denn die Funktion nutzen bestimmt mehrere, die nach dem Update dann Schwierigkeiten haben.
     
  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
    Ein Lösung ja, aber einfach war die nicht....

    Die Probleme werden verursacht durch die neue Smarty-Engine Version 3.

    In Smarty 3 ist intern alles anders als bisher, so dass die bisher zum Rendern der CMS-Datei verwendete Vorgehensweise nicht mehr funktionierte.

    Insbesondere fehlt in Smarty v3 das Plugin "function.eval.php" (mit dem man bisher einen PHP-String mit Smarty rendern konnte), und die bisherige Variante funktioniert nicht mehr, da sich, wie gesagt, Smarty v3 intern völlig geändert hat.

    Nach einigem debuggen konnte ich dann aber ein neues Plugin "function.pt_eval.php" schaffen, mit dem man auch in Smarty v3 wieder einen PHP-String als Template rendern kann.

    (Das Plugin funktioniert auch noch mit Smarty Version 2.)

    Mit der im Anhang beigefügten Version konnte ich jetzt wieder mit der Version v2.3.1.5 (die SPs vermehren sich derzeit ja schneller als die Karnickel :)) CMS-Daten in einen TAB einbauen.

    PHP:
    {pt_load_cms_data coID=6}
    im letzten TAB ergibt jetzt wieder

    cms_tab.jpg

    Zur Installation den Inhalt des anhängenden Archivs in die Shop-Root kopieren.

    Wie immer gilt:

    • Anwendung auf das ausschließliche Risiko des Shopbetreibers.
    • Es gibt keinerlei Gewährleistung.
    • Erst in einem Testshop testen.
    P.S.:

    Smarty v3 ist zum jetzigen Zeitpunkt eine m.E. völlig überflüssige Änderung, da die neuen Smarty-Features überhaupt nicht verwendet werden, so dass man es derzeit nur mit einem aufgeblähten, völlig undurchsichtigen und Resourcen fressenden Moloch zu tun hat, der Vieles obsolet macht, was bisher prima funktionierte.
     

    Anhänge:

  6. Rico

    Rico Erfahrener Benutzer

    Registriert seit:
    25. März 2013
    Beiträge:
    821
    Danke erhalten:
    67
    Danke vergeben:
    48
    Super, vielen Dank schonmal. Jetzt kann ich weiter testen und die Karnickelvermehrung mitmachen. Ein Problemchen ist aufgetaucht, aber nicht bei jedem Artikel. Bei Artikeln, wo die Artikelbeschreibung im vorgegebenen Fenster im Backend steht, steht auf der Artikelseite "TEXT_TABS_DESCRIPTION" und darunter "NEW_LINE". Erst dann folgt die eigentliche Beschreibung. Habe ich die Artikelbeschreibung aber in einem Tab untergebracht (im Backend), dann ist im Frontend alles i.O. Ich bin der Meinung, dass dies schonmal nach einem Update so war und durch ein Patch behoben wurde ?!
     
  7. Avenger

    Avenger G-WARD 2012/13/14/15

    Registriert seit:
    26. April 2011
    Beiträge:
    4.771
    Danke erhalten:
    1.478
    Danke vergeben:
    89
    Das angefügte Archiv sollte dieses Problem lösen..

    WICHTIG:

    Die Datei "user_classes\overloads\GMTabTokenizer\pt_GMTabTokenizer.php" löschen, falls vorhanden!
     

    Anhänge:

  8. Rico

    Rico Erfahrener Benutzer

    Registriert seit:
    25. März 2013
    Beiträge:
    821
    Danke erhalten:
    67
    Danke vergeben:
    48
    klappt 1a... sooo, wo war ich stehen geblieben... achja... Update 2.3.1.6 ;)
     
  9. Anonymous

    Anonymous Erfahrener Benutzer

    Registriert seit:
    14. Juli 2011
    Beiträge:
    990
    Danke erhalten:
    69
    Danke vergeben:
    128
    Genau nach dem Update klappt das dann nicht mehr, oder? Habe aktuell das Problem das cms content in den tabs nicht mehr aufgelöst wird.
     
  10. Rico

    Rico Erfahrener Benutzer

    Registriert seit:
    25. März 2013
    Beiträge:
    821
    Danke erhalten:
    67
    Danke vergeben:
    48
    bei mir klappt es wunderbar und ich habe aktuell 2.3.3.1
     
  11. Christof

    Christof Mitglied

    Registriert seit:
    7. November 2014
    Beiträge:
    7
    Danke erhalten:
    0
    Danke vergeben:
    1
    Servus, ich habe das plugin in meinem Shop benutzt, hat einwandfrei funktioneiert. Habe allerdings nun auf Version 2.6.1 aktualisiert. Nun funzt es leider nicht mehr. Bin selbst leider nicht all zu fit um das Plugin um zu schreiben, kann mir da jemand zur Seite stehen bzw. hat das schon jemand für die neue Version angepasst? Danke schon Mal vorab für Feedback.
     
  12. Rico

    Rico Erfahrener Benutzer

    Registriert seit:
    25. März 2013
    Beiträge:
    821
    Danke erhalten:
    67
    Danke vergeben:
    48
    Hast du die erneuerte Variante der ersten Seite ganz unten eingespielt? Ich habe 2.6.1.0 und es klappt immernoch.
     
  13. Christof

    Christof Mitglied

    Registriert seit:
    7. November 2014
    Beiträge:
    7
    Danke erhalten:
    0
    Danke vergeben:
    1
    Danke für dein schnelles Feedback. Hab nun aber raus gefunden warum es nicht klappte. Lag letztendlich gar nicht an der Erweiterung von Avenger. Problem war, dass ich die Short description im template habe, diese wurde von Gambio auch als Tab gerendert, warum auch immer. Dadurch hat das Javascript für meine Tabs nicht gegriffen und somit wurde der Inhalt nicht geladen. Reiche die Short description nun nicht als Tab Objekt durch und nun klappt es.
     
  14. #14 SperlingC, 13. März 2016
    Zuletzt von einem Moderator bearbeitet: 20. März 2016
    Hallo,

    kann man solche Tabs auch in die Kategorien oder normale Content-Seiten einbauen, evtl. sogar so, dass diese wie Reiter, dann nur diesen jeweiligen Text-Bereich anzeigen und die anderen Texte ausgeblendet bleiben?

    Danke für einen Tipp.
     
  15. barbara

    barbara G-WARD 2014-2020

    Registriert seit:
    14. August 2011
    Beiträge:
    35.352
    Danke erhalten:
    11.198
    Danke vergeben:
    1.601
    Das ist für die Ausgabe im Artikel als Tab.
    Ausblenden der anderen Tabs wird aber nicht so einfach gehen.
     
  16. Hector

    Hector Erfahrener Benutzer

    Registriert seit:
    9. Januar 2013
    Beiträge:
    185
    Danke erhalten:
    35
    Danke vergeben:
    46
    Hallo,

    dieses Plugin ist klasse! Hat es schon jemand mit GX3/Honeygrid am laufen?

    Gruß,
    Marcus
     
  17. Dieter Thies

    Dieter Thies Aktives Mitglied

    Registriert seit:
    25. Dezember 2012
    Beiträge:
    25
    Danke erhalten:
    1
    Danke vergeben:
    8
  18. martinalbrecht

    martinalbrecht Neues Mitglied

    Registriert seit:
    17. Januar 2016
    Beiträge:
    4
    Danke erhalten:
    0
    Danke vergeben:
    1
    Hallo,

    ich habe leider von html im allg nicht viel Ahnung. Da war ich umso froher hier etwas gefunden zu haben damit ich das ewige Ändern bei jedem einzelnen Produkt abschaffen kann, indem ich nur etwas im Content Manager ändere.

    Die Module habe ich hochgeladen und Cache gelöscht.

    Nun möchte ich coID=15 bei den Artikeln anfügen. Aber wie genau mache ich das?
    Wenn ich einen neuen Tab erstelle und in diesen {pt_load_cms_data coID=15} als Quellcode einfüge erscheint bei dem Artikel der neue Tab mit dem Namen dem ich ihn gegeben habe aber als Inhalt wird nur {pt_load_cms_data coID=15} wiedergegeben, statt den Inhalt zu laden.

    Was muss ich da anders machen?
    Danke schonmal =)

    shop_version=v2.7.3.0
     
  19. also ich habe das mal in meinem Testshop 3.2.0.1 hochgeladen und es hat nach leeren des Caches über FTP sofort
    funktioniert. Hast du beim Erstellen des TAB im Artikel auch links oben auf Quell-Code umgeschaltet und dann {pt_load_cms_data coID=15} eingegeben?
     

    Anhänge:

  20. barbara

    barbara G-WARD 2014-2020

    Registriert seit:
    14. August 2011
    Beiträge:
    35.352
    Danke erhalten:
    11.198
    Danke vergeben:
    1.601
    Und was steht im Artikel-Tab?