Jump to content
xt:Commerce Community Forum

Problem beim Produkt Schlüssel generieren, Fragen zu $db->AutoExecute


bravo_papa

Recommended Posts

Hallo,

ich habe ein Problemchen beim generieren des Produktschlüssels (Hookpoint: class.cart.php:_genProductsKey_top) und Fragen zur Methode $db->AutoExecute().

Zunächst zu den Fragen. Sehe ich das richtig, das die Methode $db->AutoExecute() in Beispielsweise dieser Form:

$db->AutoExecute(TABLE_CUSTOMERS_BASKET, $record, 'INSERT');

Alle Elemente des Arrays $record zugeordnet nach den Array Schlüsseln in die Warenkorb Tabelle schreibt? Wenn bei dieser Abfrage ein Unterelement der ersten Ebene ein Arrays ist, wird dieses dann automatisch serialisiert?

Nun zum Problemchen. Der Produkt Schlüssel für den Warenkorb wird beim ersten Aufruf der Methode _genProductsKey() in der Klasse cart aus den zusammengeführten POST und GET Daten aus dem Form Handler korrekt generiert. D.h. $plugin_return_value enthält in der Methode _genProductsKey() die richtigen Werte. Die Methode _genProductsKey() wird allerdings 2 Mal durchlaufen. Der zweite Durchlauf, der wahrscheinlich für das Generieren des entgültigen Produktschlüssels verwendet wird, erhält nun die vorher verwendeten GET / POST Daten nichtmehr. Also wird ein xt:commerce standard Produkt Schlüssel generiert. Das Daten Arrays enthält in den Methoden _checkAddType() und _addToCart() in denen die Methode _genProductsKey() aufgerufen wird doch noch die POST / GET Daten? Weiß jemand wo der Fehler liegen könnte?

Ist es vorgesehen das ich $this->content[$data['products_key']] am Hookpoint class.cart.php:_addToCart_data um zusätzliche Felder erweitere und die Warenkorb Tabelle in der Datenbank anpasse um weitere Daten zu speichern?

EDIT:

Warum der Produkt Schlüssel nicht generiert wird ist mir inzwischen klar. Der Plugin Code bei class.cart.php:_genProductsKey_top wird nur beim ersten Aufruf der Methode ausgeführt. Beim zweiten Durchlauf wird der Code ignoriert. Hierbei handelt es sich meiner Ansicht nach um ein Fehler im Plugin System. Ich bitte um Korrektur falls das nicht stimmen sollte.

EDIT 2:

Habe inzwischen eine Workaround über die Plugin Schnittstelle implementiert. Die Klasse _SRV_WEBROOT._SRV_WEB_FRAMEWORK.'classes/class.upload.php' enthält ebenfalls einen Bug. Wenn der Dateinname der Datei die hochgeladen werden soll "0" ist ohne "" wird die Datei nicht hochgeladen. Die korrigierte Klasse die ich verwendet habe:


class builder_upload extends uploader {


	var $file = NULL;


	function uploadFile() {


		if ($this->file === NULL) {

			$this->error = ERROR_FILENAME_EMPTY;

			return false;

		}



		if (!is_writeable($this->upload_dir)) {

			$this->error = ERROR_DIR_NOT_WRITEABLE;

			return false;

		}


		$this->size = $_FILES[$this->file]['size'];

		$this->type = $_FILES[$this->file]['type'];

		$this->name = $_FILES[$this->file]['name'];

		$this->tmp_name = $_FILES[$this->file]['tmp_name'];

		$this->extension = $this->_getExtension($this->name);

		$this->errorNr = $_FILES[$this->file]["error"];


		if (!$this->overwrite && is_file($this->upload_dir.$this->name)) {

		    $this->error = ERROR_FILE_EXISTS;

		    return false;

		}



		if ($this->errorNr) {

		  $this->error = ERROR_FILE_ERROR_NUMBER.' '.$this->errorNr;

		}


		if (!$this->_isAllowedExtension()) {

		    $this->error = ERROR_FILE_NOT_ALLOWED;

		    return false;

		}


		if (!$this->_checkMimeType()) {

		    //$this->error = $this->type.'-'.$this->errorNr.'-'.ERROR_FILE_NOT_MIME_TYPES;

		    //return false;

		}


		// rename file ?

		if ($this->new_name!='') {

			$this->name = $this->_getNewName();

		}


		// upload file

		if (move_uploaded_file($this->tmp_name, $this->upload_dir.$this->name)) {

				chmod($this->upload_dir.$this->name , 0666);

			return true;

		} else {

			$this->error = ERROR_MOVE_UPLOAD;

			return false;


		}

	}

}

EDIT 3:

Die Fragen haben sich auch erledigt (Gott bin ich gut). AutoExecute() serialisiert keine Array Daten automatisch. Ich habe noch einen Vorschlag für einen Hookpoint. Im Warenkorb in der Methode _rewriteCart() sollte bei der Abarbeitung der SQL Abfragen Ergebnisse (in der while Schleife) ein Hookpoint gesetzt werden.

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.

×
  • Create New...