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 AvengerCopyright (c) 2012 Avenger, entwicklung@powertemplate.deSmarty function to allow inclusion of CMS content into templateUsage:{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).
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?!
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.
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 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.
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 ?!
Das angefügte Archiv sollte dieses Problem lösen.. WICHTIG: Die Datei "user_classes\overloads\GMTabTokenizer\pt_GMTabTokenizer.php" löschen, falls vorhanden!
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.
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.
Hast du die erneuerte Variante der ersten Seite ganz unten eingespielt? Ich habe 2.6.1.0 und es klappt immernoch.
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.
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.
Das ist für die Ausgabe im Artikel als Tab. Ausblenden der anderen Tabs wird aber nicht so einfach gehen.
Hallo Avenger, ich möchte die Tabs mit Versand und Zahlungsmodalitäten aus dem Kontenbereich bei den Artikeln integrieren. Shop-Version GX3 Honeygrid siehe https://www.delife.eu/haengeleuchte-xendy-13x97-cm-weiss-mit-leuchtmittel/a-9748/ Gruß Dieter Thies
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
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?