Archive for the ‘PHP’ Category.

einen Text kürzen, ohne mitten im Wort abzubrechen

Wie man eine Zeichenkette kürzt, ist denke ich hinlänglich bekannt. Möchte man aber einen Text kürzen, ohne mitten im Wort abzubrechen, dann hilft substr alleine nicht mehr weiter. Deshalb hab ich mir eine Funktion geschrieben, mit der ich meine Texte bequem kürzen kann:

  1. /**
  2.  * einen Text kürzen
  3.  * @param string $txt der zu kürzende Text
  4.  * @param int $length Anzahl der maximalen Zeichen
  5.  * @param boolean $dots Soll bei Kürzung am Ende ein "..." angehängt werden?
  6.  */
  7. function getShortText($txt,$length, $dots = true){
  8.  
  9.  //html tags entfernen.
  10.  $txt = preg_replace("/(<\/?)(\w+)([^>]*>)/e","",$txt);  
  11.  
  12.  //wordwrap.
  13.  $trenner = "~|~";
  14.  $tmp = explode($trenner,wordwrap($txt,$length,$trenner));
  15.  $str = $tmp[0];
  16.  
  17.  //für den Fall eines komplett geistesgestörten Eintrags ohne Leerzeichen...
  18.  if(strlen($str) > $length)
  19.    $str = substr($txt,0,$length);
  20.  
  21.  //wurde der Text tatsächlich verkürzt oder nicht?
  22.  if(strlen($str) < strlen($txt)){
  23.    if($dots)
  24.      $str.="...";
  25.  }
  26.  return $str;
  27. }

Das vorherige Entfernen von HTML tags brauchte ich für meine Funktion, da nicht gewährleistet war, dass im Text keine HTML tags vorkommen. Und mitten in einem Tag zu unterbrechen oder Text ohne schließende tags in eine Seite einzufügen war mir definitiv zu unsauber und zu riskant. Deshalb werden zuerst alle tags entfernt.

PHP und Reguläre Ausdrücke

Reguläre Ausdrücke sind nicht meine Stärke. Und deshalb muss ich jedes mal wieder auf die Suche gehen, wenn ich was ersetzen will. Von daher werd ich mir jetzt mal notieren, wie das mit dem Ersetzen von Text innerhalb eines html-tags geht:

  1. $text = preg_replace("/<style>(.*?)<\/style>/", "", $text)

leert alle <style> tags.

PDF Formular über PHP ausfüllen mit FDF

Weil ich es immer wieder brauche, hier mal ne kurze Anleitung wie es geht, PDF Formulare mit PHP auszufüllen. Man kann die Anleitung auch ncohmal genauer durchlesen unter http://koivi.com/fill-pdf-form-fields/

1. Formular erstellen (oder woher die Daten auch sonst kommen mögen)

Wie man ein HTML Formular erstellt, sollte allgemein bekannt sein.

2.  PDF Vorlage erstellen

Man erstelle sein PDF mit Adobe Acrobat. Am besten nimmt man sich das unausgefüllte Formular so wie's im PDF aussehen soll als "page" des PDFs das man erstellt. In die Seite fügt man dann die Formularfelder ein, die man haben möchte (z.b. Tools -> Advanced Editing -> Text Field Tool) und gibt ihnen aussagekräftige Namen.

Formular im Acrobat erstellen

3. Script

Man fügt die Funktion createFDF seinem Dokument hinzu:

  1. function createFDF($file,$info){
  2.  $data="%FDF-1.2\n%âãÏÓ\n1 0 obj\n<< \n/FDF << /Fields [ ";
  3.  foreach($info as $field => $val){
  4.  if(is_array($val)){
  5.  $data.='<</T('.$field.')/V[';
  6.  foreach($val as $opt)
  7.  $data.='('.trim($opt).')';
  8.  $data.=']>>';
  9.  }else{
  10.  $data.='<</T('.$field.')/V('.trim($val).')>>';
  11.  }
  12.  }
  13.  $data.="] \n/F (".$file.") /ID [ <".md5(time()).">\n] >>".
  14.  " \n>> \nendobj\ntrailer\n".
  15.  "<<\n/Root 1 0 R \n\n>>\n%%EOF\n";
  16.  return $data;
  17. }

4. Aufruf

Dann übergibt man am einfachsten die POST Daten (dabei müssen allerdings die Felder des HTML Formulars so heißen wie die Felder des PDF Formulars):

  1. $pdf_file='http://'.$_SERVER['HTTP_HOST'].'/media/vorlage.pdf';
  2. $fdf_file=dirname(__FILE__).'/../media/posted.fdf';
  3. $fdf=createFDF($pdf_file,$_POST);
  4.  
  5. // Create a file for later use
  6. if($fp=fopen($fdf_file,'w')){
  7.  fwrite($fp,$fdf,strlen($fdf));
  8.  $CREATED=TRUE;
  9. }else{
  10.  echo 'Unable to create file: '.$fdf_file;
  11.  $CREATED=FALSE;
  12. }
  13. fclose($fp);
  14. return "posted.fdf";

EQDKP Portalmodul – Youloot Ranking

Weil mir langweilig war und weil ein Gildenmitglied das vorgeschlagen hat, hab ich mal ein kleines Portalmodul geschrieben, mit dem man sich auf der Gildenseite das Item Ranking (Daten kommen von Youloot) der Gilde oder des Servers anzeigen lassen kann. Ich denke das ist zu simpel um es bei Eqdkp zu posten, außerdem gibts das bestimmt schon, aber wer's möchte kann es sich hier runterladen:

>>> Download <<<

Updatewünsche? Immer her damit.  Das Modul in Aktion sehen kann man auf der Ultimate Illusion Gildenhomepage.

phpBB3 und Templates

Aus gegebenem Anlass beschäftige ich mich derzeit n bißchen mit phpBB3. Die meisten kennen es denke ich als gängistes Forenscript, und grundsätzlich is das auch wirklich ne nette Sache. Das Problem ist nur, dass die meisten Änderungen damit beginnen, dass man an einem Template herumfummeln muss. Kaum jemand macht sich die Mühe, gleich ein komplettes Template neu zu erstellen, nur wird sich der ein oder andere gewundert haben, warum trotz Änderungen der entsprechenden html oder CSS Dateien nichts funktioniert. Änderungen machen sich dank dem caching nicht bemerkbar, es sei denn man sucht sich in der Datei includes/template.php die Zeile 211 und nimmt in der Funktion _tpl_load folgende Änderung vor:

  1. //$recompile = (($config['load_tplcompile'] &amp;&amp; @filemtime($filename) < filemtime($this->files[$handle])) || !file_exists($filename) || @filesize($filename) === 0) ? true : false;
  2.  
  3. $recompile = true;

Man kommentiert Zeile 211 vorübergehend aus und setzt $recompile auf true. Dann machen sich Änderungen auch bemerkbar. Nur nicht vergessen, das hinterher wieder zurückzusetzen.