Hallo,
vielleicht bin ich einfach zu doof es zu verstehen oder ich mache grundlegende Fehler, oder auch beides
Folgende Situation:
Ich habe eine Klasse die aufgerufen wird um Daten aus einer Datenbank abzufragen und an ein festes Backend weiterzugeben -> funktioniert prima
Innerhalb dieser Klasse gibt es zwei "große" Methoden, eine zum anzeigen von Einstellungsparametern (letztendlich auch nur eine Datenbankabfrage und Umwandlung in Checkboxen, Dropdowns etc.) und eine die aus den Daten (abhängig von den Einstellungen) ein PDF erstellt.
Beide Methoden funktionieren an sich so wie ich mir das gewünscht habe.
Nun zur Problematik:
Die Funktionen sollen jeweils NUR aufgerufen werden, wenn sie durch einen Buttonklick gestartet werden.
Die Funktionen zum darstellen der Daten soll automatisch beim laden der Klasse aufgerufen werden (Daten werden angezeigt, durch Buttonklick Einstellungen laden und anzeigen, weiterer Buttonklick-> PDF erstellen)
Wenn ich jetzt allerdings meine Klasse in das Backend lade werden auch nur die Daten angezeigt, ansonsten passiert nichts. Klicke ich auf den ersten Button werden sämtliche andere Methoden aufgerufen.
Hier Auszüge aus dem Quelltext:
Methoden um Daten anzuzeigen (funktioniert tadellos)
Methode um die Einstellungen anzuzeigen:
Methode um Einstellungen zu speichern (wird direkt ausgeführt, bis auf das JavascriptSTM am Ende)
Methode um das Dokument zu erzeugen (ich erzeuge hier erstmal ein Word-Dokument, da das mit dem PDF noch nicht so hinhaut, soll hier aber nicht Thema sein...Die Methode wird sofort ausgeführt, das Dokument korrekt erzeugt, das restliche Skript wird abgebrochen!)
Ich hoffe das ist jetzt hier nicht zuviel wirrwarr, wenn Fragen bestehen kann ich auch gerne noch etwas konkreter werden
Danke schonmal für etwaige Hilfe
vielleicht bin ich einfach zu doof es zu verstehen oder ich mache grundlegende Fehler, oder auch beides
Folgende Situation:
Ich habe eine Klasse die aufgerufen wird um Daten aus einer Datenbank abzufragen und an ein festes Backend weiterzugeben -> funktioniert prima
Innerhalb dieser Klasse gibt es zwei "große" Methoden, eine zum anzeigen von Einstellungsparametern (letztendlich auch nur eine Datenbankabfrage und Umwandlung in Checkboxen, Dropdowns etc.) und eine die aus den Daten (abhängig von den Einstellungen) ein PDF erstellt.
Beide Methoden funktionieren an sich so wie ich mir das gewünscht habe.
Nun zur Problematik:
Die Funktionen sollen jeweils NUR aufgerufen werden, wenn sie durch einen Buttonklick gestartet werden.
Die Funktionen zum darstellen der Daten soll automatisch beim laden der Klasse aufgerufen werden (Daten werden angezeigt, durch Buttonklick Einstellungen laden und anzeigen, weiterer Buttonklick-> PDF erstellen)
Wenn ich jetzt allerdings meine Klasse in das Backend lade werden auch nur die Daten angezeigt, ansonsten passiert nichts. Klicke ich auf den ersten Button werden sämtliche andere Methoden aufgerufen.
Hier Auszüge aus dem Quelltext:
Methoden um Daten anzuzeigen (funktioniert tadellos)
PHP-Code:
//Main DB-table
protected $_table = TABLE_ORDERS;
//Language table
protected $_table_lang = null;
//SEO table
protected $_table_seo = null;
//Master key
protected $_master_key = 'orders_id';
//Set default position for AI
function setPosition ($position)
{
$this->position = $position;
}
//Set parameters
function _getParams()
{
//Create array
$params = array();
/********************************/
/*******Create Userbuttons*******/
/********************************/
//Printbutton
//Initialize ExtJS
$extF = new ExtFunctions();
//ExtJS-Code
//adminHandler.php?load_section=xt_print_preview&plugin=xt_print_invoice&pg=overview
$u_js.= $extF->_RemoteWindow(TEXT_XT_PRINT_PREVIEW_HEADER,"Print Preview",_SRV_WEB_PLUGINS."xt_print_invoice/pages/print_preview.php", '', array(), 800, 600).' new_window.show();';
//Set UserButton options
$UserButtons['print'] = array('text' => 'TEXT_PRINT',
'style' => 'print',
'icon' => 'printer.png',
'acl' => 'edit',
'stm' => $u_js);
//Display Userbutton
$params['display_printBtn'] = true;
//Add all Userbuttons
$params['UserButtons'] = $UserButtons;
return $params;
}
function _get($ID=0)
{
global $xtPlugin,$db,$language,$language_content;
if($this->position != 'admin') return false;
..................................
$obj = new stdClass;
$obj->totalCount = count($data);
$obj->data = $data;
return $obj;
}
PHP-Code:
public function xt_print_preview_settings()
{
$sel_orders_id = $this->url_data['orders_id'];
//Globals
global $xtPlugin,$db,$language;
//Create Masterpanel
$settings_panel = new PhpExt_Panel();
//Settings of Masterpanel
$settings_panel
//No animation
->setAnimCollapse(false)
//Autoscroll
->setAutoScroll(true)
//Autowidth
->setAutoWidth(true)
//Set Border
->setBorder(true)
//Panel not collapsed
->setCollapsed(false)
//Button alignment
->setButtonAlign("PhpExt_Ext::EXT_HALIGN_CENTER")
//Panel not collapsible
->setCollapsible(false)
//Panel not draggable
->setDraggable(false)
//Title of Panel
->setTitle(__define("TEXT_XT_PRINT_INVOICE_SETTINGS_HEADER"));
//Get Config from DB
$query = "SELECT * FROM xt_print_invoice_config ORDER BY conf_id ASC";
//Execute query
$rs = $db->Execute($query);
//If returned more than "0" Recordsets
if($rs->RecordCount() > 0)
{
//Create array for config
$conf = array();
//Create array for errors
$err = array();
//Read whole table row by row
while (!$rs->EOF)
{
//Check Type of config
switch($rs->fields['conf_type'])
{
//Config type "textfield"
case 'textfield':
//conf_name was not set -> ERROR
if(strlen($rs->fields['conf_name']) <= 0)
{
$err[] = array($rs->fields['conf_id'] => "conf_name not set");
}
//conf_value_text was not set -> ERROR
elseif(strlen($rs->fields['conf_value_text']))
{
$err[] = array($rs->fields['conf_id'] => "conf_value_name not set");
}
//All required fields are set -> Writing to config-array
else
{
$conf[] = array('conf_id'=>$rs->fields['conf_id'],
'conf_name'=>$rs->fields['conf_name'],
'conf_value'=>$rs->fields['conf_value'],
'conf_value_text'=>$rs->fields['conf_value_text'],
'conf_type'=>$rs->fields['conf_type']);
}
break;
//Config type "text"
case 'text':
//conf_name was not set -> ERROR
if(strlen($rs->fields['conf_name']) <= 0)
{
$err[] = array($rs->fields['conf_id'] => "conf_name not set");
}
//conf_value_text was not set -> ERROR
elseif(strlen($rs->fields['conf_value_text']))
{
$err[] = array($rs->fields['conf_id'] => "conf_value_name not set");
}
//All required fields are set -> Writing to config-array
else
{
$conf[] = array('conf_id'=>$rs->fields['conf_id'],
'conf_name'=>$rs->fields['conf_name'],
'conf_value'=>$rs->fields['conf_value'],
'conf_value_text'=>$rs->fields['conf_value_text'],
'conf_type'=>$rs->fields['conf_type']);
}
break;
//Config type "text"
case 'checkbox':
//conf_name was not set -> ERROR
if(strlen($rs->fields['conf_name']) <= 0)
{
$err[] = array($rs->fields['conf_id'] => "conf_name not set");
}
//All required fields are set -> Writing to config-array
else
{
$conf[] = array('conf_id'=>$rs->fields['conf_id'],
'conf_name'=>$rs->fields['conf_name'],
'conf_value'=>$rs->fields['conf_value'],
'conf_value_text'=>$rs->fields['conf_value_text'],
'conf_type'=>$rs->fields['conf_type']);
//Create PhpExt-Checkbox
$tempChk = new PhpExt_Form_Checkbox();
$labelTxt = "TEXT_XT_PRINT_INVOICE_SETTINGS_LABEL_".strtoupper($rs->fields['conf_name']);
$tempChk
->setChecked($rs->fields['conf_value'])
->setBoxLabel(__define($labelTxt));
$settings_panel->addItem($tempChk);
}
break;
case 'dropdown':
//Config type "text"
//Not yet implemented
break;
}
$rs->MoveNext();
}
}
else
{
//Conf-Table is empty -> ERROR
}
//Create Save-Button
$button_save = new PhpExt_Button();
$button_save->setText(__define("TEXT_XT_PRINT_INVOICE_SETTINGS_SAVE_BUTTON"));
$button_save->setHandler(xt_print_invoice_save_settings::saveSettings($conf));
//Add Items to Masterpanel
$settings_panel->addButton($button_save);
//Set rendering target of Masterpanel if no Errors
if(empty($err))
{
$settings_panel->setRenderTo('print_settings_order_id-'.$sel_orders_id);
$return = "<script type='text/javascript'>";
//$return .= include(_SRV_WEB_ROOT . _SRV_WEB_PLUGINS . "xt_print_invoice/javascript/functions.js");//Include JS functions
$return .= PhpExt_Ext::OnReady($settings_panel->getJavascript(false, 'settings'));
$return .= "</script>";
$return .= "<div id='print_settings_order_id-".$sel_orders_id."'></div>";
return $return;
}
else
{
$return = "<h3>The following errors occured while loading settings:</h3>";
foreach($err as $err_id => $err_msg)
{
$return .= "Config ID: ".$err_id.", Message: ".$err_msg;
}
}
}
PHP-Code:
function saveSettings($conf_data)
{
global $db;
for($i=0;$i<count($conf_data);$i++)
{
$conf_id = $conf_data[$i]['conf_id'];
$conf_value = $conf_data[$i]['conf_value'];
$db->Execute("UPDATE xt_print_invoice_config SET conf_value = '$conf_value' WHERE conf_id = 'conf_id'");
}
$extF = new ExtFunctions();
$js = $extF->MsgAlert(__define('TEXT_XT_PRINT_INVOICE_SETTINGS_SAVE_OK'));
return new PhpExt_JavascriptStm("function(){".$js."}");
}
PHP-Code:
protected function xt_create_doc($settings)
{
global $db;
$order_id = $this->url_data['orders_id'];
$ADODB_FETCH_MODE = ADODB_FETCH_ASSOC;
$rs = $db->Execute("SELECT * FROM ".DB_PREFIX."_orders WHERE orders_id = '$order_id'");
if($rs->RecordCount()==0)
{
return 'false';
}
elseif($rs->RecordCount() > 0)
{
//create error variable
$err_xt_create = "";
//load all fields into data var
$order_data = $rs->fields;
//check if needed files exists
if(!file_exists(_SRV_WEBROOT . _SRV_WEB_PLUGINS . "xt_print_invoice/ext/VsTemplDocx.php"))
{
//File doesnt exist, log error variable
$err_xt_create .= 'File "VsTemplDocx.php" was not found at ../ext/VsTemplDocx.php<br />';
}
else
{
//file exists, load
require(_SRV_WEBROOT . _SRV_WEB_PLUGINS . "xt_print_invoice/ext/VsTemplDocx.php");
}
if(!file_exists(_SRV_WEBROOT . _SRV_WEB_PLUGINS . "xt_print_invoice/ext/zip/pclzip.lib.php"))
{
//File doesnt exist, log error variable
$err_xt_create .= 'File "pclzip.lib.php" was not found at ../ext/zip/pclzip.lib.php<br />';
}
//check if errors occured while loading files
if(empty($err_xt_create))
{
//no errors -> continue
//delete errorlog
unset($err_xt_create);
//recreate errorlog
$err_xt_create = "";
//get template
$tplroot = _SRV_WEBROOT . _SRV_WEB_PLUGINS . "xt_print_invoice/templates/";
//$tplSrc = XT_PRINT_INVOICE_DOCX_TPL;
$tplSrc = $tplroot."tpl.docx";
//set filename for output document
//$docOutName = XT_PRINT_INVOICE_CREATE_DOCUMENT_PREFIX . $this->url_data['orders_id'];
$docOutName = "Rechnung ".$this->url_data['orders_id'];
$assetsExtractDir = "./tmp/";
$tmpDoc = VsTemplDocx::create(array('templname'=>$tplSrc,'fileOutPut'=>$docOutName,'tmppatch'=>$assetsExtractDir));
//Get needed vars
$company_name = "...";
$company_street = "...";
$company_postcode = "...";
$company_city = "...";
$delivery_gender = "...";
$delivery_firstname = "...";
$delivery_lastname = "...";
$delivery_street_address = "...";
$delivery_postcode = "...";
$delivery_city = "...";
//Add vars
$tmpDoc->addParceDoc(array(
'company_name'=>$company_name,
'company_street'=>$company_street,
'company_postcode'=>$company_postcode,
'company_city'=>$company_city,
'delivery_gender'=>$delivery_gender,
'delivery_firstname'=>$delivery_firstname,
'delivery_lastname'=>$delivery_lastname,
'delivery_street_address'=>$delivery_street_address,
'delivery_postcode'=>$delivery_postcode,
'delivery_city'=>$delivery_city));
//$tmpDoc->createDoc();
}
elseif(!empty($err_xt_create))
{
//errors occured, print errors
echo "Errors occured during loading process of required libraries:<br />";
echo $err_xt_create;
}
elseif(!isset($err_xt_create))
{
//the error variable is not set
$err_xt_create = 'Fatal Error: Errorlog variable was not set!';
}
}
}
Danke schonmal für etwaige Hilfe
Kommentar