Eigenes html-Modul updatesicher einbinden!

Thema wurde von Manni_HB, 25. April 2012 erstellt.

  1. Manni_HB

    Manni_HB G-WARD 2012/13/14/15

    Registriert seit:
    26. April 2011
    Beiträge:
    9.098
    Danke erhalten:
    1.540
    Danke vergeben:
    909
    Ort:
    Bremen
    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
     
  2. Danny

    Danny Erfahrener Benutzer

    Registriert seit:
    17. Juni 2011
    Beiträge:
    1.398
    Danke erhalten:
    179
    Danke vergeben:
    213
    ja Manfred, zu dieser Frage hätte ich auch sehr gerne mal ein paar Infos.., Du warst jedoch schneller als ich:D

    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... .
     
  3. 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 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...
     
  4. Manni_HB

    Manni_HB G-WARD 2012/13/14/15

    Registriert seit:
    26. April 2011
    Beiträge:
    9.098
    Danke erhalten:
    1.540
    Danke vergeben:
    909
    Ort:
    Bremen
    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?!
     
  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
    Du wolltest ja "{$MBR_DINGSBUMMS}" haben....
     
  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
    Du wolltest ja "{$MBR_DINGSBUMMS}" haben....
     
  7. Manni_HB

    Manni_HB G-WARD 2012/13/14/15

    Registriert seit:
    26. April 2011
    Beiträge:
    9.098
    Danke erhalten:
    1.540
    Danke vergeben:
    909
    Ort:
    Bremen
    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!
     
  8. Avenger

    Avenger G-WARD 2012/13/14/15

    Registriert seit:
    26. April 2011
    Beiträge:
    4.771
    Danke erhalten:
    1.478
    Danke vergeben:
    89
     
  9. Avenger

    Avenger G-WARD 2012/13/14/15

    Registriert seit:
    26. April 2011
    Beiträge:
    4.771
    Danke erhalten:
    1.478
    Danke vergeben:
    89
    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...
     
  10. Manni_HB

    Manni_HB G-WARD 2012/13/14/15

    Registriert seit:
    26. April 2011
    Beiträge:
    9.098
    Danke erhalten:
    1.540
    Danke vergeben:
    909
    Ort:
    Bremen
    Saugut .. kann´s nicht anders sagen!
     
  11. Manni_HB

    Manni_HB G-WARD 2012/13/14/15

    Registriert seit:
    26. April 2011
    Beiträge:
    9.098
    Danke erhalten:
    1.540
    Danke vergeben:
    909
    Ort:
    Bremen
    #11 Manni_HB, 26. April 2012
    Zuletzt bearbeitet: 26. April 2012
    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!?
     
  12. Avenger

    Avenger G-WARD 2012/13/14/15

    Registriert seit:
    26. April 2011
    Beiträge:
    4.771
    Danke erhalten:
    1.478
    Danke vergeben:
    89
    Du musst natürlich die "mbr_dingsbumms.html" vorher selbst rendern lassen, bevor Du sie einbaust...
     
  13. Manni_HB

    Manni_HB G-WARD 2012/13/14/15

    Registriert seit:
    26. April 2011
    Beiträge:
    9.098
    Danke erhalten:
    1.540
    Danke vergeben:
    909
    Ort:
    Bremen
    Sehr schön .. haste mir da eine NormalUserÜbersetzung zu? :)
     
  14. Manni_HB

    Manni_HB G-WARD 2012/13/14/15

    Registriert seit:
    26. April 2011
    Beiträge:
    9.098
    Danke erhalten:
    1.540
    Danke vergeben:
    909
    Ort:
    Bremen
    Könntest Du mir bitte noch kurz damit auf die Sprünge helfen - wie geht das? [AufDemSchlauchSteh ON]
     
  15. Avenger

    Avenger G-WARD 2012/13/14/15

    Registriert seit:
    26. April 2011
    Beiträge:
    4.771
    Danke erhalten:
    1.478
    Danke vergeben:
    89
    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.
     
  16. Manni_HB

    Manni_HB G-WARD 2012/13/14/15

    Registriert seit:
    26. April 2011
    Beiträge:
    9.098
    Danke erhalten:
    1.540
    Danke vergeben:
    909
    Ort:
    Bremen
    Danke
    Kann man dies nicht so machen, dass autom. alle Files im Ordner /mbr_module/ included werden -- statt jede einzelne?
     
  17. Avenger

    Avenger G-WARD 2012/13/14/15

    Registriert seit:
    26. April 2011
    Beiträge:
    4.771
    Danke erhalten:
    1.478
    Danke vergeben:
    89
    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.
     
  18. 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 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:
    <?php
    class 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?
     
  19. Manni_HB

    Manni_HB G-WARD 2012/13/14/15

    Registriert seit:
    26. April 2011
    Beiträge:
    9.098
    Danke erhalten:
    1.540
    Danke vergeben:
    909
    Ort:
    Bremen
    NEIN ... das ist OberMegaGigantonomisch!!!
    Nur gut, dass ich heute sonst nix vorhatte! :)