Wie binde ich eine eingene HTML-Datei aus dem Ordner "..\templates\EyeCandy\module\mbr_dingsbumms.html" updatesicher ins System um sie dann z.B. in der "...\templates\EyeCandy\module\product_info\standard.html" mit {$MBR_DINGSBUMMS} einzubinden? Ich denk mal hier geht´s los - oooder? ...\user_classes\overloads\ProductInfoContentView\MBr_ProductInfoContentView.inc.php
ja Manfred, zu dieser Frage hätte ich auch sehr gerne mal ein paar Infos.., Du warst jedoch schneller als ich Für mich stellen sich da echt einige Fragen....auch ich habe zum Teil extrem viele Änderungen am eigentlichen Code getätigt und würde diese Files (html/php) sehr gerne updatesicher bekommen, so dass ich nicht bei jedem Update 20-30 Files mergen muss... .
Das ist ganz easy..... (Ungetestet.) folgenden Code als "user_classes\overloads\ProductInfoContentView\MBr_ProductInfoContentView.inc.php" kopieren PHP: class MBr_ProductInfoContentView extends MBr_ProductInfoContentView_parent{ function MBr_ProductInfoContentView($p_template = 'default') { $html=file_get_contents(DIR_FS_CATALOG.'templates/'.CURRENT_TEMPLATE.'/module/mbr_dingsbumms.html'); $this->set_content_data('MBR_DINGSBUMMS', $html); parent::ProductInfoContentView($p_template); }} Cache löschen nicht vergessen...
So weit .. so toll! Nur erfolgt keine Ausgabe der "mbr_dingsbumms.html"!? Aufruf in der "...\templates\EyeCandy\module\product_info\standard.html" mit {$mbr_dingsbumms.html} zeigt keinerlei Wirkung?!
Ich sollte einfach zu einer derartig unchristlichen Morgenstunde nix am Kombuder machen! <PEINLICH> Und auch dies funktioniert: PHP: function MBr_ProductInfoContentView($p_template = 'default') { $html=file_get_contents(DIR_FS_CATALOG.'templates/'.CURRENT_TEMPLATE.'/mbr_module/mbr_dingsbumms.html'); $this->set_content_data('MBR_DINGSBUMMS', $html); $html=file_get_contents(DIR_FS_CATALOG.'templates/'.CURRENT_TEMPLATE.'/mbr_module/mbr_dingsda.html'); $this->set_content_data('MBR_DINGSDA', $html); parent::ProductInfoContentView($p_template); }/PHP]Meine eigenen Ergüsse in einem eigenen Ordner ... und weitere EigenProductionen!So lamsam kann ich Geschmack an den Klassen Geraffel finden! :)Dir Avenger ein dickes Dankeschön für die Nachhilfe!
EDIT: Im Prinzip kann man natürlich auch html mit Smarty-Variablen verwenden und die erst rendern und einbinden.... Ist etwas komplizierter, aber nur wenig...
Ich glaube Smarty mag die eigene "mbr_dingsbumms.html" nicht! Dies {load_language_text section="product_info"} wird als Text ausgegeben! Auch die CCS´s findet er nicht!?
Wenn Du da noch Smarty-Variablen einbauen willst, dann mach das ganz anders... Einfach im Smarty-Template einfügen: PHP: {include file="EyeCandy/mbr_module/mbr_dinsgbums.html"} Dann wird das Template von Smarty auch aufgelöst.
Danke Kann man dies nicht so machen, dass autom. alle Files im Ordner /mbr_module/ included werden -- statt jede einzelne?
Ist mir gerade erst aufgefallen.... Standardmäßig geht das nicht, weil in Smarty nicht vorgesehen. Und da "include" auch kein Smarty-Plugin, sondern eine in Smarty eingebaute Funktion ist, kann man das auch nicht so einfach ändern, sondern müsste dazu normaler Weise den Smarty-Quellcode ändern.... Allerdings kann man jetzt ja auch die "Smarty"-Klasse überladen, und hat somit das Handwerkzeug, um Smarty das (updatesicher) beizubringen. Ist auch ein schönes Beispiel, wie man Klassen, die nicht eigentlich zum Shop gehören, überladen kann.... PHP: function _smarty_include($params) { $directory=$params['smarty_include_vars']['directory']; if (isset($directory)) { $template_dir=$this->template_dir.DIRECTORY_SEPARATOR; $tpl_files=$template_dir.$directory; if (strrpos($directory,'.html')===false) { $tpl_files.=DIRECTORY_SEPARATOR.'*.html'; } $tpl_files=glob($tpl_files); if ($tpl_files && sizeof($tpl_files)>0) { $template_dir_len=strlen($template_dir); foreach ($tpl_files as $tpl_file) { $tpl_file=str_replace($template_dir,'',$tpl_file); $params['smarty_include_tpl_file']=$tpl_file; parent::_smarty_include($params); } } } else { parent::_smarty_include($params); } } Ab jetzt kann man folgendes in einer Template-Datei verwenden: PHP: {include file="" directory="EyeCandy/module/mein_verzeichnis/"} (Der Pseudeo-Paramter 'file=""' wird benötigt, weil Smarty sonst einen Kompilierungsfehler meldet...) Man kann auch so etwas machen: PHP: {include file="" directory="EyeCandy/module/mein_verzeichnis/irgendwas*.html"} oder PHP: {include file="" directory="EyeCandy/module/mein_verzeichnis/*irgendwas.html"} Damit werden nur die Template-Dateien geladen, die mit "irgendwas" beginnen (bzw: enden), so dass man nicht immer alle (aber mehrere) Templates aus dem Verzeichnis laden kann. Wichtig: Dem aufrufenden Template müssen auch schon alle Template-Variablen übergeben werden, die in den eingebundenen Templates ersetzt werden sollen.
Ein anderer "heißer" Kandidat für das Überladen ist "class.phpmailer.php", um bei der Bestellbestätigungs-Email automatisch die AGB und die Widerrufsbelehrung als PDF-Datei an die Mail anzuhängen... Folgenden Code in "user_classes\overloads\PHPMailer\pt_PHPMailer.php" speichern: PHP: <?php/* -------------------------------------------------------------- class.phpmailer.php 2011-09-02 mb Gambio GmbH http://www.gambio.de Copyright (c) 2011 Gambio GmbH Copyright (c) 2012 Avenger, entwicklung@powertemplate.de Subclass to automatically add PDF-versions auf terms & conditions and revocation-info to order info emails Required filenames: English: general_terms_and_conditions.pdf right_of_withdrawal_conditions.pdf German: agb.pdf widerrufsrecht.pdf Store as: "user_classes\overloads\PHPMailer\pt_PHPMailer.php" Released under the GNU General Public License (Version 2) [http://www.gnu.org/licenses/gpl-2.0.html] --------------------------------------------------------------*/class pt_PHPMailer extends pt_PHPMailer_parent{ var $additional_attachment_files=array(); var $pdf='.pdf'; function AddAttachmentFiles() { $this->lang_subdir='lang/'.$_SESSION['language'].'/'; $this->template_lang_subdir='templates/'.CURRENT_TEMPLATE.'/'.$this->lang_subdir; $this->lang_dir=$this->template_lang_subdir; //Try template first $search_terms=array('Show ',' einsehen', ' '); $replace_terms=array('','','_'); $t_and_c_file=strtolower(str_replace($search_terms,$replace_terms,GM_CONFIRMATION_CONDITIONS)).$this->pdf; if (!is_dir($this->lang_dir) || !is_file($this->lang_dir.$t_and_c_file)) { $this->lang_dir=$this->lang_subdir; } $t_and_c_file=$this->lang_dir.$t_and_c_file; if (is_file($t_and_c_file)) { $this->additional_attachment_files[]=$t_and_c_file; } $revocation_file=strtolower(str_replace($search_terms,$replace_terms,GM_CONFIRMATION_WITHDRAWAL)).$this->pdf; $revocation_file=$this->lang_dir.$revocation_file; if (is_file($revocation_file)) { $this->additional_attachment_files[]=$revocation_file; } } function AddAttachment($path, $name = "", $encoding = "base64", $type = "application/octet-stream") { parent::AddAttachment($path, $name, $encoding, $type); if (basename($_SERVER['PHP_SELF'])==FILENAME_CHECKOUT_PROCESS) { $this->AddAttachmentFiles(); foreach ($this->additional_attachment_files as $additional_attachment_file) { parent::AddAttachment($additional_attachment_file, "", $encoding, $type); } } return true; }}?> Erwartet werden folgende Dateien: English: general_terms_and_conditions.pdf right_of_withdrawal_conditions.pdf German: agb.pdf widerrufsrecht.pdf Entweder im Verzeichnis "templates/EyeCandy/lang/german/", oder in "lang/german/". Wobei das erste Verzeichnis zuerst geprüft wird.... Wenn man dann noch weitere Attachments anfügen will, dann kann man einfach ein weiteres "Overload"-Modul erstellen, das die "function AddAttachmentFiles()" überlädt.... Das könnte z.B. so aussehen: PHP: <?phpclass xyz_PHPMailer extends xyz_PHPMailer_parent{ function AddAttachmentFiles() { parent::AddAttachmentFiles(); $my_file=$this->lang_dir.'my_file.pdf'; if (is_file($my_file)) { $this->additional_attachment_files[]=$my_file; } }} ?> So kann man (updatesicher!) verschiedenste Attachments an die Mail hängen, ohne sich in die Quere zu kommen... Ist das nicht schön?