Jump to content
xt:Commerce Community Forum

Ersten Buchstaben in Adressen immer groß


Staubsauger2

Recommended Posts

Ich bin Webentwickler und setze für das Unternhemen für welches ich arbeite einen Onlineshop auf. Die Entscheidung viel letztes Jahr im Juni auf Veyton. Da wir den Shop nur als kleinen Teil unseres Onlineangebotes betreiben und noch wesentlich mehr darum herum entwickeln, musste ich mich ziemlich intensiv mit Veyton und dessen Kern beschäftigen. Zur Zeit habe ich drei eigene Plugins am laufen in denen ich an die dreizig Hooks benutze. Hauptsächlich übergebe ich an die Templates Informationen, die mir normalerweise dort nicht zur Verfügung stehen. Darüberhinaus habe ich aber auch einige Backendmodule entwickelt, z.B. eine konfortabele Möglichkeit an die ausgehenden Emails Anhänge zu setzen und das ganze schön über das Backend konfigurierbar. Die Artikelansicht abe ich durch weitere Attribute und Einstellmöglichkeiten erweitert sowie den Login/Registrierungsbereich von Veyton komplett abgeschaltet. Das Login sowie die Registrierung geschen über unsere Webseite und die Kundne werden von dort automatisch über ein Single Sign On an Veyton angemeldet wenn sie dem entsprechenden Link folegen. Anders herum werden die Kunden an das Login der Webseite weitergeleitet wenn sie sich im Shop befinden und sich einloggen müssen.

Und noch ettliche Änderungen mehr.

Bis zum start des Shops wird es allerdings noch ein weilchen dauern, da die Rahmenbedingen noch nicht fertig entwickelt sind.

LG

Link to comment
Share on other sites

Ach ja....

Ich möchte beim Alter prüfen, ob das angegebene Alter mindesten 18Jahre ist...

Der Hook...


class.customer.php:_CustomerAddressData_check
[/PHP]

[PHP]
require_once _SRV_WEBROOT._SRV_WEB_PLUGINS.'mt_manage_adress/classes/class.age_verification.php';

$age = _checkAge($data['customers_dob']);
if ($age == true) {
$data['customers_dob'] = $data['customers_dob'];
} else {
$data['customers_dob'] = ($data['customers_dob'], ERROR_AGE_SYNTAX);
}
[/PHP]

Die Classe...

[PHP]
class age_verification {
public function _checkAge($check) {
$required_age = '18';
$min_age = strtotime($required_age);
if ($min_age !== false || $min_age !== '-1') {
if ($check !== '') {
$new_check = substr($check, 0, 9);
$array = explode('-', $new_check);
$dob = mktime(0, 0, 0, $array[1], $array[0], $array[2]);
if($min_age >= $dob) {
$age = true;
} else {
$age = false;
}
return $age;
}
}
}
}
[/PHP]

Aber nicht schlagen....

Gruß

Link to comment
Share on other sites

Ist doch soweit ganz gut.

Ein kleiner Fehler hat sich eingeschlichen. Du hast die Klasse zwar eingebunden aber keine Instanz gebildet. So könnte es klappen:


require_once _SRV_WEBROOT._SRV_WEB_PLUGINS.'mt_manage_adress/classes/class.age_verification.php';
$ageVerification = new age_verification();
$age = $ageVerification->_checkAge($data['customers_dob']);
if ($age == true) {
$data['customers_dob'] = $data['customers_dob'];
} else {
$data['customers_dob'] = ($data['customers_dob'], ERROR_AGE_SYNTAX);
}
[/PHP]

Um mit der Klasse arbeiten zu können, brauchst du ein Object und das instanzierst du mit "new":

[PHP]$ageVerification = new age_verification(); [/PHP]

Dannach kannst du via Pfeilnotation auf die Methoden der Klasse zugreifen:

[PHP]$age = $ageVerification->_checkAge($data['customers_dob']); [/PHP]

Das wars eigentlich schon... :)

LG

Link to comment
Share on other sites

Und noch einmal den Rest angeschaut und korrigiert:

global $info;
require_once _SRV_WEBROOT._SRV_WEB_PLUGINS.'mt_manage_adress/classes/class.age_verification.php';
$ageVerification = new age_verification();
$age = $ageVerification->_checkAge($data['customers_dob']);
if ($age == true) {
$data['customers_dob'] = $data['customers_dob'];
} else {
$this->error = true;
$info->_addInfo('Deine Fehlermeldung');
}[/PHP]

Um eine Fehlermeldung zu generieren nutzt du wieder die $info. Daher setzen wir sie wieder global. Der Code in deiner "else" war ungültiger PHP-Code und hätte zu einem Fehler geführt.

Die Validierung in dener Klasse könnte funktionieren, bin mir aber nicht sicher. Zum ausführlichen testen fehlt mir gerade ein wenig die Zeit aber nächste Woche komme ich sicherlich dazu dir mal eine Variante zu schicken, wie ich es machen würde.

LG

Link to comment
Share on other sites

Hi zusammen,

ich habe jetzt das anpassen der Groß,- und Kleinschreibung und die Prüfung des Mindestalter in einem PlugIn zusammen gefasst.

Wer Interesse hat...

Install XLM:


<?xml version="1.0" encoding="utf8"?>
<xtcommerceplugin>
<title>Manage Adress, Age Verification</title>
<version>1.0.1</version>
<code>XXXX</code>
<url>XXXX</url>
<description>Manage customer data</description>
<type>extension</type>
<icon />
<db_install />
<db_uninstall />
<plugin_code>
<code>
<hook>class.customer.php:_buildCustomerAddressData_top</hook>
<phpcode><![CDATA[require_once _SRV_WEBROOT._SRV_WEB_PLUGINS.'XXXX/hooks/manage_adress_character.php';]]></phpcode>
<order>1</order>
<active>1</active>
</code>
<code>
<hook>class.customer.php:_CustomerAddressData_check</hook>
<phpcode><![CDATA[require_once _SRV_WEBROOT._SRV_WEB_PLUGINS.'XXXX/hooks/age_verification.php';]]></phpcode>
<order>1</order>
<active>1</active>
</code>
</plugin_code>
<configuration>
<config>
<key>MT_REQUIRED_AGE</key>
<type>textfield</type>
<value>18</value>
<de>
<title>Mindestalter</title>
</de>
<en>
<title>Minimum age</title>
</en>
</config>
</configuration>
<language_content>
<phrase>
<key>ERROR_AGE_MSG</key>
<class>store</class>
<de>
<value><b>Sie müssen mindestens 18 Jahre alt sein</b></value>
</de>
<en>
<value><b>You must be 18 years old</b></value>
</en>
</phrase>
</language_content>
</xtcommerceplugin>
[/PHP]

Hock Adresse etc. Groß/Klein:

[PHP]
<?php
require_once _SRV_WEBROOT._SRV_WEB_PLUGINS.'XXXX/classes/class.manage_adress_character.php';
$manage_adress = new manage_adress_character();

$data['customers_company'] = $manage_adress->_checkCharacter($data['customers_company']);
$data['customers_company_2'] = $manage_adress->_checkCharacter($data['customers_company_2']);
$data['customers_company_3'] = $manage_adress->_checkCharacter($data['customers_company_3']);
$data['customers_firstname'] = $manage_adress->_checkCharacter($data['customers_firstname']);
$data['customers_lastname'] = $manage_adress->_checkCharacter($data['customers_lastname']);
$data['customers_street_address'] = $manage_adress->_checkCharacter($data['customers_street_address']);
$data['customers_suburb'] = $manage_adress->_checkCharacter($data['customers_suburb']);
$data['customers_city'] = $manage_adress->_checkCharacter($data['customers_city']);
$data['customers_state'] = $manage_adress->_checkCharacter($data['customers_state']);
?>
[/PHP]

Hock Mindestalter:

[PHP]
<?php
global $info;
require_once _SRV_WEBROOT._SRV_WEB_PLUGINS.'XXXX/classes/class.age_verification.php';
$verification = new age_verification();

$age = $verification->_checkAge($data['customers_dob']);
if ($age == 'NO') {
$this->error = true;
$info->_addInfo(ERROR_AGE_MSG);
}
?>
[/PHP]

Class Adresse etc. Groß/Klein:

[PHP]
<?php
class manage_adress_character {
public function _checkCharacter($check) {
$pos = strpos($check, '-');
if ($pos !== false) {
$stuff = strtolower($check);
$array = explode('-', $stuff);
foreach($array as &$value) {
$value = ucfirst($value);
}
$stuff = implode('-', $array);
} else {
$stuff = ucwords(strtolower($check));
}
return $stuff;
}
}
?>
[/PHP]

Class Mindestalter:

[i](Berücksichtigt auch unterschiedlich Formate, dd.mm.yyyy oder yyyy-mm-dd, so wie man das auch im Shop einstellen kann.)[/i]

[PHP]
<?php
class age_verification {
public function _checkAge($check) {
if(MT_REQUIRED_AGE !== '') {
$required_age = MT_REQUIRED_AGE;
} else {
$required_age = '18';
}

$min_age = strtotime('-'.$required_age." years");
if ($min_age !== false || $min_age !== '-1') {
if ($check !== '') {
$age = 'NO'; /* by default the required age ist not OK :) */
$delim = true;
if(stristr($check, '-') !== false) {
$str_marker = '-';
} elseif (stristr($check, '.') !== false) {
$str_marker = '.';
} elseif (stristr($check, '/') !== false) {
$str_marker = '/';
} elseif (stristr($check, ' ') !== false) {
$str_marker = ' ';
} else {
$delim = false;
}

if ($delim) {
$array = explode($str_marker, $check);
if (strlen($array[1]) == '4') {
$dob = mktime(0, 0, 0, $array[2], $array[0], $array[1]);
} else {
$dob = mktime(0, 0, 0, $array[1], $array[0], $array[2]);
}
if($min_age >= $dob) {
$age = 'YES';
} else {
$age = 'NO';
}
}
return $age;
}
}
}
}
?>
[/PHP]

Link to comment
Share on other sites

Hi,

das geht nicht. "-1" ist auch eine Wert. Der führt zur weissen Seite.

Trag mal "90" ein...

Ersetzte den Block:


if(MT_REQUIRED_AGE !== '') {
$required_age = MT_REQUIRED_AGE;
} else {
$required_age = '18';
}
[/PHP]

Mit diesem....

Dann ist der Wert "0", sozusagen das Überspringen...

[PHP]
if (MT_REQUIRED_AGE == '0') {
$age = 'YES';
return $age;
} elseif (MT_REQUIRED_AGE > '0') {
$required_age = MT_REQUIRED_AGE;
} else {
$required_age = '18';
}
[/PHP]

Link to comment
Share on other sites

Liegt scheinbar nicht an der Altersverifikation. Ich habe die mal mit

$age = 'YES';
return $age;[/PHP]

in der class komplett abgeklemmt, gibt trotzdem eine weiße Seite.

Ausserdem ist mir aufgefallen, dass der Installer eine Fehlermeldung ausgibt:

[code]Warning: stripslashes() expects parameter 1 to be string, array given in /www.meinshop.de/xtFramework/classes/class.filter.php on line 0 Warning: stripslashes() expects parameter 1 to be string, array given in /www.meinshop.de/xtFramework/classes/class.filter.php on line 0[/code]

Link to comment
Share on other sites

Hi,

bei mir und nem anderen Shop funzt das...

Hast Du in den scripten auch das "XXXX\" gegen etwas sinnvolles getauscht??

Verzeichniss Strucktur...

Das mit der Fehlermeldung liegt an den "<b>.....</b>" in der ERROR_AGE_MSG.

Habe die Zeichen rausgenommen. Ich hatte dies nachträglich in die Sprachvariable geschrieben.

Wenn ich die im Shop Backend nachtrage, klappt es.

Ich hab das mal als ganzes angehangen...

mt_manage_data.zip

Link to comment
Share on other sites

Archived

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

×
  • Create New...