Daniel: FPDF footer

Ahoi alle,

ich hab da mit FPDF gerade ein kleines problem und zwr gehts um den footer, ich möchte die footer function nutzen. bis jetzt hab ich:

  
function Footer()  
{  
  $this->SetFont('Arial','',10);  
  $this->SetFillColor( 225 ) ;  
  $this->SetY(-30);  
  $this->SetX(150);  
  $akt_datum = date("d.m.Y");  
  $this->Cell(0,4,"$akt_datum",0,0,'L',1);  
  $this->SetY(-20);  
  $this->SetX(150);  
  $this->Cell(0,4,'User: '.$username ,0,0,'L',1);  
}  

ich bekomme den usernamen nicht hin :( den hol ich mir per sql in
meinem eigentlichen script. dann kommt das "class PDF extends FPDF"
mit der Fooret funktion. aber er übernimmt die variable anscheinend
nicht. warum? wie kann ich das beheben?

MfG

--
Alle Angaben wie immer ohne Gewähr
PPPS: ich trinke gerne ab und an mal eine tote Tante.
  1. Hallo Daniel,

    ich hab da mit FPDF gerade ein kleines problem und zwr gehts um den footer, ich möchte die footer function nutzen. bis jetzt hab ich:

    nein, Du hast kein Problem mit FPDF!

    function Footer()
    {
      $this->SetFont('Arial','',10);
      $this->SetFillColor( 225 ) ;
      $this->SetY(-30);
      $this->SetX(150);
      $akt_datum = date("d.m.Y");

    Hier führst Du die Variable $akt_datum ein

    $this->Cell(0,4,"$akt_datum",0,0,'L',1);
      $this->SetY(-20);
      $this->SetX(150);
      $this->Cell(0,4,'User: '.$username ,0,0,'L',1);

    Hier führst Du die Variable $username ein. Was passiert mit neuen Variablen? Was steht da drin?

    }

    
    >   
    > ich bekomme den usernamen nicht hin :( den hol ich mir per sql in  
    > meinem eigentlichen script. dann kommt das "class PDF extends FPDF"  
    > mit der Fooret funktion. aber er übernimmt die variable anscheinend  
    > nicht. warum? wie kann ich das beheben?  
      
    Warum sollte er eine irgendwo x-beliebig vorhandene Variable nutzen, die den gleichen Namen trägt? Übergebe Deiner Funktion diese Variable.  
      
    Wenn die Variable global sein sollte (grausam), dann stelle sie mit dem Schlüsselwort  
      
        global  
      
    innerhalb der Funktion zur Verfügung.  
      
      
    Freundliche Grüße  
      
    Vinzenz
    
    1. Ahoi Vinzenz Mai,

      Hier führst Du die Variable $username ein. Was passiert mit neuen Variablen? Was steht da drin?

      nein ich habe:

        
      $sql = "SELECT blablabla";  
      ...  
      $username = daten['username'];  
      echo $username;  
      // das gitb den usernamen korrekt aus.  
      require('hidden/fpdf153/fpdf.php');  
      class PDF extends FPDF  
      {  
        function Footer()  
        {  
          // die footer daten  
        }  
      }  
      
      

      Wenn die Variable global sein sollte (grausam), dann stelle sie mit dem Schlüsselwort

      global

      innerhalb der Funktion zur Verfügung.

      also wenn ich bei Footer for $username global schreibe hab ichs? hab ich das richtig verstanden?

      MfG

      --
      Alle Angaben wie immer ohne Gewähr
      PPPS: ich trinke gerne ab und an mal eine tote Tante.
      1. Moin!

        also wenn ich bei Footer for $username global schreibe hab ichs? hab ich das richtig verstanden?

        Tu dir einen Gefallen und mach das nicht. Globale Variablen aus Funktionen und Klassen heraus zu verwenden ist ganz mieser Programmierstil. Natürlich funktioniert sowas im konkreten Fall - aber wenn du deine Footer-Funktion später mal woanders wiederverwenden willst, mußt du zwingend auch im Hauptprogramm die identischen Variablennamen verwenden, und das nervt und hindert dich, die Wiederverwendbarkeit des Codes auszunutzen.

        - Sven Rautenberg

  2. Moin!

    ich hab da mit FPDF gerade ein kleines problem und zwr gehts um den footer, ich möchte die footer function nutzen.

    Die Klassenmethode Footer() der Klasse FPDF wird intern vom Seitenmechanismus aufgerufen, ist aber leer. Durch das Überschreiben dieser Methode in deiner eigenen Klasse kannst du einen Seitenfuß hinzufügen, mußt dabei aber natürlich die Grenzen beachten, die für die Datenübergabe in Klassen oder aus Klassen heraus gelten.

    $username ist wahrscheinlich eine globale Variable. Die Methode Footer() darf nicht auf globale Variablen zugreifen, man muß ihr den Inhalt in passender Form hineinreichen.

    Ein möglicher Weg wäre, den Usernamen als Parameter anzuhängen:

      
    function Footer($username = "Demouser")  
    {  
    ...  
       $this->Cell(0,4,'User: '.$username ,0,0,'L',1);  
    }  
    
    

    Das funktioniert aber nur, wenn der Aufruf der Footer-Methode dann auch den Usernamen enthält - dieser Aufruf ist aber innerhalb der FPDF-Klasse, du müßtest also noch wesentlich mehr Code umändern, was sich nicht wirklich lohnt.

    Es gibt einen schöneren Weg:

    Du legst in deiner neuen Klasse eine neue Variable als property an, greifst im Footer auf diese property zu, und versiehst diese Property einfach am Anfang der PDF-Erstellung mit dem passenden Wert:

      
    class PDF extends FPDF  
    {  
      var $uname; // Username für den Footer  
      //...  
      function Footer()  
      {  
      //...  
         $this->Cell(0,4,'User: '.$this->uname ,0,0,'L',1);  
      }  
    }  
      
    $pdf = new PDF;  
    $pdf->uname = $username // Übertragen des Benutzernamens in die Klasse.  
    
    

    Man könnte sich noch streiten, ob der Zugriff direkt auf eine Property so hinreichend elegant ist, oder ob man dafür nicht eine eigene set-Methode schreiben sollte, aber sowas ist nur relevant, wenn du evtl. planst, die internen Variablen der Klasse vielleicht mal zu verändern.

    Statt "uname" kann die Property natürlich beliebig heißen - ich wollte nur nicht den Eindruck erwecken, sie müsse zwingend auch "username" heißen, weil die globale Variable schon so heißt - sie kann es aber durchaus.

    - Sven Rautenberg

    1. Ahoi Sven Rautenberg,

      Man könnte sich noch streiten, ob der Zugriff direkt auf eine Property so hinreichend elegant ist, oder ob man dafür nicht eine eigene set-Methode schreiben sollte, aber sowas ist nur relevant, wenn du evtl. planst, die internen Variablen der Klasse vielleicht mal zu verändern.

      ich änder nix an FPDF.

      Statt "uname" kann die Property natürlich beliebig heißen - ich wollte nur nicht den Eindruck erwecken, sie müsse zwingend auch "username" heißen, weil die globale Variable schon so heißt - sie kann es aber durchaus.

      noch gibt es die globale variable nicht, und da variablennamen i.d.R.
      variabel, sprich frei wählbar sind, hab ich mir fast gedacht das ich
      dem einen beliebigen namen verpassen kann.

      MfG

      --
      Alle Angaben wie immer ohne Gewähr
      PPPS: ich trinke gerne ab und an mal eine tote Tante.