*
* Die Klasse wird mit folgenden Parametern initialisiert: * * Folgende Einstellungen lassen sich vornehmen (optional): * * Anwendungsbeispiel:
*
 * $pid = 2345;
 * $campaign = 123;
 *
 * $r = new Rechner($pid, $campaign, 'kredit'); // anlegen
 * $r->htmlWrap(true); // ...
 * $r->to_encoding('ISO-8859-1'); // Kodierung
 * $r->expand(true); // ausgeklappt?
 * $r->smallLayout(true); // schmales Layout?
 * $r->visibleResults(10);  // Anzahl sichtbarer Ergebnisse
 * $r->hideProducts(array('produkt_1', 'produkt_2'));  // nicht sichtbare Fremdprodukte
 * $r->defaultValues(array('formularfeldname_1' => 'wert_1', 'formularfeldname_2' => 'wert_2'));  // default-Werte für Formularfelder
 *
 * $r->render(); // Ausgabe
 * 
* * @version 2010-11-29 */ class Rechner { /** * @var integer Partner-ID (intern genutzt) */ private $pid; /** * @var integer ID der Rechner-Konfiguration (intern genutzt) */ private $campaign; /** * @var string Basis-Domain der Schnittstelle (intern verwendet) */ public $domain; /** * @var boolean Ausgabe eines HTML-Rahmens um den Rechner? */ private $htmlWrap; /** * @var boolean Darstellung in schmalem oder breitem Layout? */ private $smallLayout; /** * @var boolean Darstellung in auf- oder zugeklapptem Zustand? */ private $expand = false; /** * @var integer Anzahl der per default sichtbaren Ergebnisse */ private $visibleResults = 10; /** * @var string Encoding der Ziel-Seite */ private $to_encoding = 'UTF-8'; /** * @var array Nicht sichtbare Produkte */ private $hideProducts = array(); /** * @var array Default-Werte für die Formularfelder */ private $defaultValues = array(); /** * @var array Assoziatives Array mit Einstellungen für alle Rechnertypen */ private $config = array( 'kredit' => array( 'url' => "http://kx.affiliando.de/kreditrechner/vergleich/(request)/xml/(pid)/" ), 'tagesgeld' => array( 'url' => "http://tx.affiliando.de/tagesgeld/vergleich/(request)/xml/(pid)/" ), 'depot' => array( 'url' => "http://dx.affiliando.de/depot/vergleich/(request)/xml/(pid)/" ), 'girokonto' => array( 'url' => "http://gx.affiliando.de/girokonto/vergleich/(request)/xml/(pid)/" ), 'festgeld' => array( 'url' => "http://fx.affiliando.de/festgeld/vergleich/(request)/xml/(pid)/" ) ); /** * Konstruktor * * @param integer $pid Prozess-ID * @param integer $campaign Kampagnen-ID * @param string $rechner Rechnertyp, mögliche Werte: 'kredit', 'tagesgeld', 'depot', 'girokonto', 'festgeld' */ public function __construct($pid, $campaign, $rechner) { $rechner = strtolower($rechner); if(!in_array($rechner, array_keys($this->config))) { throw new Exception('Unbekannter Rechnertyp (mögliche Werte: kredit, tagesgeld, depot, girokonto, festgeld)') ; } $this->pid = $pid; $this->campaign = $campaign; $this->rechner = $rechner; $this->domain = 'http://' . parse_url($this->config[$this->rechner]['url'], PHP_URL_HOST); } /** * Stellt ein, ob der Rechner per default auf- oder zugeklappt sein soll. * * @param boolean $arg Neuer Wert * @return boolean Wert der Einstellung "expand", wenn arg == NULL */ public function expand($arg = null) { if($arg == null) { return $this->expand; } else { $this->expand = $arg === true; } } /** * Stellt ein, ob das breite oder schmale Layout des Rechners dargestellt werden soll * * @param boolean $arg Neuer Wert * @return boolean Wert der Einstellung "smallLayout", wenn arg == NULL */ public function smallLayout($arg = null) { if($arg == null) { return $this->smallLayout; } else { $this->smallLayout = $arg === true; } } /** * Stellt ein, wie viele Ergebniszeilen per default sichtbar sein sollen. Weitere * Zeilen werden ausgeblendet und sind per JavaScript am Tabellenende einblendbar. * * @param integer $arg Neuer Wert * @return integer Wert der Einstellung "visibleResults", wenn arg == NULL */ public function visibleResults($arg = null) { if($arg == null) { return $this->visibleResults; } else { $this->visibleResults = (int) $arg; } } /** * Stellt ein, ob um den Rechner auch ein HTML-Rahmen mit HEAD und BODY ausgegeben * werden soll. * * @param boolean $arg Neuer Wert * @return boolean Wert der Einstellung "htmlWrap", wenn arg == NULL */ public function htmlWrap($arg = null) { if($arg == null) { return $this->htmlWrap; } else { $this->htmlWrap = $arg === true; } } /** * Stellt das Encoding der Zielseite ein. * * @param string $arg Neuer Wert * @return string Wert der Einstellung "to_encoding", wenn arg == NULL */ public function to_encoding($arg = null) { if($arg == null) { return $this->to_encoding; } else { $this->to_encoding = $arg; } } /** * Stellt ausblendbare Produkte in der Ergebnisliste auf unsichtbar. * * @param array $arg Neuer Wert * @return array Wert der Einstellung "hideProducts", wenn arg == NULL */ public function hideProducts($arg = null) { if($arg == null) { return $this->hideProducts; } else { $this->hideProducts = $arg; } } /** * Setzt Default-Werte für die Formularfelder * * @param array $arg Neuer Wert * @return array Wert der Einstellung "defaultValues", wenn arg == NULL */ public function defaultValues($arg = null) { if($arg == null) { return $this->defaultValues; } else { $this->defaultValues = $arg; } } /** * Ruft die XML-Ergebnisliste mit Hilfe von cURL ab. * * @param string $url Diezu holende URL * @param integer $timeout Timeout für Connect und Abruf in Sekunden, default ist 10 * @return string Inhalt der abgerufenen Seite */ private function fetchXml($url, $timeout = 10) { $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_HEADER, false); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout); curl_setopt($ch, CURLOPT_TIMEOUT, $timeout); $data = curl_exec($ch); $error = curl_error($ch); curl_close($ch); if($error == '') { return $data; } else { return 'Leider konnten keine Daten geladen werden.
' . $error; } } private function convert_entities($data) { $data = str_replace('€', '€', $data); if(function_exists('mb_convert_encoding')) { return mb_convert_encoding($data, $this->to_encoding(), 'UTF8'); } else { return utf8_decode($data); } } /* =========================================================================================== */ /** * Gibt den Rechner aus. */ public function render() { if(empty($_POST)) { foreach($this->defaultValues() as $key => $value) { $_POST[$key] = $value; } } $_REQUEST = array_merge($_GET, $_POST); $querystring = ''; foreach($_REQUEST as $key => $value) $querystring .= urlencode($key) .'='. urlencode($value) .'&'; $xmlstring = $this->fetchXml( $this->config[$this->rechner]['url'] . $this->pid . '/(campaign)/' . $this->campaign .'?'. $querystring ); if (substr ( $xmlstring, 0, 5 ) == 'config; $values = array(); foreach($c->defaultValues->children() as $fieldName => $defaultValue) { if(array_key_exists($fieldName, $_REQUEST) && $_REQUEST[$fieldName]) { $values[$fieldName] = $_REQUEST[$fieldName]; } else { $values[$fieldName] = (string) $defaultValue; } } ob_start(); ?> htmlWrap()): ?> Expertenrechner resultColumns->children() as $name => $column) { $sorterMap = array('Number' => 'digit', 'CaseInsensitiveString' => 'text'); if($this->smallLayout() && ($name == 'award' || $name == 'name')) continue; if (isset($column->sort)) { $sortJS[] = $nr.': { sorter: "'. $sorterMap[(string) $column->sort] .'" }'; } else { $sortJS[] = $nr.': { sorter: false }'; } $nr++; } $sortJS[] = $nr.': { sorter: false }'; $sortFields = '{'. implode(", ", $sortJS) .'}'; ?> additionalJavascriptFile)) : ?> additionalJavascriptFile as $filename) : ?>
rechtshinweis): ?>
rechtshinweis) ?>
  • toolbar) ?>
    • rechnerToolbarFields->children() as $name => $field) { if($this->smallLayout() && $field->hideOnSmallLayout) $field->type = 'hidden'; if($field->type == 'hidden') { ?>
    • smallLayout() ? '
      ' : ''?> type == 'text'): ?> maxlength) echo 'maxlength="'.$field->maxlength.'"';?> value="" class="default-input-text void" onfocus="save=this.value;this.value='';" onblur="if (save) this.value=save;" onchange="save=this.value;" />unit ? ' '. $field->unit : ''?>  type == 'select') : ?>
  • DETAILS
  • toolbar) ?>
  • rechnerStandardHeadline->arg as $name) $args[] = $values[(string)$name]; vprintf($c->rechnerStandardHeadline->format, $args); ?>
  • DETAILS
  • rechnerStandardFields->children() as $name => $field) { if($field->type == 'headline') { ?>

    value)?>

    type == 'text') { ?> maxlength) echo 'maxlength="'.$field->maxlength.'"'?> size) echo 'size="'.$field->size.'"'?> value="" class="default-input-text rechner-detail-input" onfocus="save=this.value;this.value='';" onblur="if (save) this.value=save;" onchange="save=this.value;" /> type == 'radio') { ?> option as $option) { ?> value)?' checked="checked"':''?> /> children) { foreach($field->children->children() as $childName => $childField) { ?>
    type == 'text') { ?> maxlength) echo 'maxlength="'.$childField->maxlength.'"'?> size) echo 'size="'.$childField->size.'"'?> value="" class="default-input-text rechner-detail-input" onfocus="save=this.value;this.value='';" onblur="if (save) this.value=save;" onchange="save=this.value;" /> type == 'select') { ?>
    type == 'select') { ?>
  • rechnerStandardFields->children() as $name => $field): ?> type != 'headline'): ?>
error != '' ) : ?>
error; ?>
resultColumns->children() as $name => $column) { if($this->smallLayout() && ($name == 'award' || $name == 'name')) continue; $nr++; $first = isset($column->first_column) && $column->first_column == true; $sortable = isset($column->sort) && $column->sort != 'none'; ?> products->product) > $this->visibleResults) { ?> products->product as $product ) { $attributes = $product->attributes(); if($attributes['own'] == '0' && in_array($attributes['short_name'], $this->hideProducts())) { continue; } $attributes ['link'] .= $link_suffix; $nr++; ?> resultColumns->children() as $name => $column) { if($this->smallLayout() && ($name == 'award' || $name == 'name')) continue; $first = isset($column->first_column) && $column->first_column == true; ?>
label)?> Online-Antrag
Alle Ergebnisse einblenden »
hasPopup) echo ' onclick="showHideInfoBox($(\'infobox_container_'. $nr .'\'));"'?>> hasLink) echo ''; if($name == 'bank') { ?> smallLayout() ? '
'. Rechner::convert_entities($attributes ['name']) : ($column->showName ? Rechner::convert_entities($attributes['name']) : '')?> productaward) { ?>

aufklappenProduktbeschreibung:

infos->div->asXML());?>
infos->bankawards) { ?>

aufklappenAuszeichnungen

    infos->bankawards as $bankaward ) { ?>
  • bankaward) ?>
Bewertung:
hasLink) echo '';?>
Zum Antrag »

resultNotice)?>

tracking)) { ?>pid, $c->tracking); ?>" height="1" width="1" border="0" />
htmlWrap()) { ?>