Shop Support News Archive - Shopbetreiber News -> Forum : Eigenes Addon - Xcheck
seitenhieb
06.12.2006, 00:10
ich habe vor, in den xtcommerce shop ein eigenes zusatzaddon einzubauen.
die grundidee:
in der tabelle CUSTOMERS wird ein zusatzfeld FSK18 angelegt. hier soll ein flag gesetzt werden, wenn der user einen alterscheck gemacht hat. standardwert ist null.
nach dem durchlaufen des xcheck soll eine php-routine aufgerufen werden, in der die aktuelle CUSTOMERS_ID abgefragt wird und dann soll mit dem UPDATE befehl das flag bei diesem user auf 1 gesetzt werden.
die templates diesbezüglich anpassen ist nicht das problem, das funzt wunderbar. im artikelstamm kann man ja fsk18 setzen oder nicht und damit arbeiten.
aber wie müsste die php-datei aussehen, die dieses flag setzt? zugegeben, etwas hirnarbeit, würde ich auch selbst schaffen, aber ich bekomm einfach nicht die aktuelle CUSTOMERS_ID ausgelesen und als variable in das neue script..
hat jemand ne idee?
fiese möpp
06.12.2006, 10:09
''>ZITAT(seitenhieb @ Dec 6 2006, 0:10) 16274
....aber ich bekomm einfach nicht die aktuelle CUSTOMERS_ID ausgelesen und als variable in das neue script..
hat jemand ne idee?
[/b]
Wenn es nur die ID ist,
echo $_SESSION['customer_id'];
seitenhieb
06.12.2006, 17:42
fein, danke, das hat schonmal geklappt.
nochmal der weg, wie ich es machen will:
ich lege mit phpmyadmin ein weiteres feld in der datenbank CUSTOMERS an: FSK18
ich baue mit den alterscheck XCHECK irgendwo in den shop ein, wo es sinnvollist.
als returnseite vom xcheck habe ich die datei FSK18FREI.PHP geschrieben:
<?php
**include( 'includes/application_top.php');
**
**
**// create smarty elements
**$smarty = new Smarty;
**// include boxes
**require(DIR_FS_CATALOG .'templates/'.CURRENT_TEMPLATE. '/source/boxes.php');
**// the following cPath references come from application_top.php
**$category_depth = 'top';
**if (isset($cPath) && xtc_not_null($cPath)) {
****$categories_products_query = "select count( ) as total from " . TABLE_PRODUCTS_TO_CATEGORIES . " where categories_id = '" . $current_category_id . "'";
****$categories_products_query = xtDBquery($categories_products_query);
****$cateqories_products = xtc_db_fetch_array(&$categories_products_query,true);
****if ($cateqories_products['total'] > 0) {
******$category_depth = 'products'; // display products
****} else {
******$category_parent_query = "select count( ) as total from " . TABLE_CATEGORIES . " where parent_id = '" . $current_category_id . "'";
******$category_parent_query = xtDBquery($category_parent_query);
******$category_parent = xtc_db_fetch_array(&$category_parent_query,true);
******if ($category_parent['total'] > 0) {
********$category_depth = 'nested'; // navigate through the categories
******} else {
********$category_depth = 'products'; // category has no products, but display the 'no products' message
******}
****}
**}
****$check_customer_query = xtc_db_query("select customers_id, customers_vat_id, customers_firstname,customers_lastname, customers_gender, customers_password, customers_email_address, customers_default_address_id from " . TABLE_CUSTOMERS . " where customers_email_address = '" . xtc_db_input($email_address) . "'");
xtc_db_query("update " . TABLE_CUSTOMERS . " SET fsk18 = '1' WHERE customers_id = '" . (int)$_SESSION['customer_id'] . "'");
******
********
require(DIR_WS_INCLUDES . 'header.php');
**include (DIR_WS_MODULES . 'default.php');
**$smarty->assign('language', $_SESSION['language']);
**$smarty->caching = 0;
**if (!defined(RM)) $smarty->load_filter('output', 'note');
**$smarty->display(CURRENT_TEMPLATE . '/fsk18frei.html');
?>
in dieser datei wird dann das flag FSK18 von 0 auf 1 gesetzt.
der output erfolgt dann auf eine neue HTML-Seite im entsprechenden Template-Verzeichnis:
<link href="stylesheet.css" rel="stylesheet" type="text/css"> {config_load file="$language/lang_$language.conf" section="index"}
<table width="100%"**border="0" cellspacing="0" cellpadding="0">
**<tr>
****<td><table width="100%"**border="0" cellspacing="0" cellpadding="0">
********<tr>
**********<td background="{$tpl_path}img/back.gif"><div align="center">{$tpl_path}img/top_logo.jpg</div></td>
******</tr>
******<tr>
********<td style="border-top: 1px solid; border-bottom: 1px solid; border-color: #C5C5C5;"><table width="100%"**border="0" cellpadding="2" cellspacing="0">
**********<tr>
************<td class="main">{$navtrail}</td>
************<td align="right" class="main">{if $account}{php} if (isset($_SESSION['customer_id'])) { {/php}{#link_logoff#} ({$logoff}) | {php} } {/php}{/if}{if $account}{#link_account#} ({$account}) | {/if}{#link_cart#} ({$cart}) | {#link_checkout#} ({$checkout})</td>
**********</tr>
********</table></td>
******</tr>
******<tr>
********<td><table width="100%"**border="0" cellpadding="0" cellspacing="0">
**********<tr>
************<td class="navLeft" valign="top"><table width="184"**border="0" cellpadding="0" cellspacing="0">
**************<tr>
****************<td>{$box_CATEGORIES}{$box_SEARCH}{$box_ADD_QUICKIE}{$ box_CONTENT}{$box_INFORMATION}{$box_LAST_VIEWED}{$ box_REVIEWS}{$box_SPECIALS}{$box_WHATSNEW}</td>
**************</tr>
************</table> </td>
************<td valign="top"><table width="100%"**border="0" cellspacing="4" cellpadding="0">
**************<tr>
****************<td><table width="98%" border="0" cellpadding="0" cellspacing="0">
******************<tr>
********************<td class="main"><blockquote>
**********************
****************************Die FSK18 Freischaltung ist erfolgt.
****************************Du hast nun Zugriff auf die nicht jugendfreien Bilder der FSK18 Angebote.</p>
********************</blockquote></td>
********************<td>{$MODULE_new_products}</td>
******************</tr>
****************</table></td>
**************</tr>
************</table></td>
************<td valign="top" class="navRight"><table width="184"**border="0" cellspacing="0" cellpadding="0">
**************<tr>
**********************<td>{$box_CART}{$box_LOGIN}{$box_ADMIN}{$box_NEWSLETTE R}{$box_BESTSELLERS}{$box_INFOBOX} {$box_CURRENCIES} {$box_LANGUAGES}{$box_MANUFACTURERS_INFO}{$box_MAN UFACTURERS} </td>
**************</tr>
************</table> </td>
**********</tr>
**********<tr>
************<td colspan="3" valign="top"><table width="100%"**border="0" cellpadding="0" cellspacing="0">
******<tr>
********<td style="border-top: 4px solid; border-top: 4px solid; border-color: #C5C5C5;"> </td>
********<td style="border-top: 4px solid; border-top: 4px solid; border-color: #666666;"> </td>
******</tr>
****</table></td>
************</tr>
********</table></td>
******</tr>
****</table></td>
**</tr>
</table>
<center><iframe align="top" marginheight="0" marginheight="0" scrolling="no" frameborder="0" width="468" height="60" src="http://www.seitenhieb.eu/banner/aufruf.php"></iframe></center>
{if $BANNER}
<table width="100%"**border="0" cellspacing="4" cellpadding="0">
**<tr>
****<td align="center">{$BANNER}</td>
**</tr>
</table>
{/if}
nun aber meine frage: es muss ja noch einiges in den templates gebastelt werden. PRODUCT_INFO usw. dort werden ja die variablen $PRODUCTS_FSK18 abgefragt. wie verknüpfe ich nun die zusätzliche abfrage der CUSTOMERS dazu, um eine sinnvolle ausgabe zu bekommen? welchen SQL-string müsste ich erweitern, um die variable FSK18 auszuwerten?
das template dann entsprechend anpassen wäre ja ein klacks, aber die übergabe ist für mich das problem..
es wären ja auch andere templates, z.b. neue produkte, kategorieübersnicht usw, aber das ist dann ja ne reine fleissaufgabe.. aber irgendwo muss doch ne sql-abfrage sein, wo man das global auslesen kann...
klartext: wie kann ich eine abfrage im template realisieren, die z.b. so aussieht?
{if $PRODUCTS_FSK18=='true'}
**********{if $PRODUCTS_IMAGE_1 != ' '}
********************{if $FSK18=='1'} Bild trotzdem anzeigen {/if}
********************{if $FSK18<>'1'} Sperrbild anzeigen {/if}
**********{/if}
{/if}
oder hab ich da irgendwo einen denkfehler?
fiese möpp
07.12.2006, 22:33
Am einfachsten geht es, wenn Du beim einloggen eine neue Session-Variable deklarierst.
if ($FSK18==true){$_SESSION['FSK18']=true;}
im Template kommst Du dann über
{php}echo $_SESSION['FSK18'];{/php}
an den Wert.
ungetestet
Probier das mal...
{php}echo '';print_r($_SESSION); echo '';{/php}
...oder schau Dier mal $_SERVER an. :lol:
...aber geht das nicht auch, in dem Du den Kunden einfach in eine Kundengruppe reinverfrachtest, die FSK18-Produkte kaufen darf?
SQL
update customers set customers_status=
(hier eine "customers_status_id" von Tabelle "customers_status", in der "customers_fsk18"=0 ist)
where customers_id=$_SESSION['customer_id'];
Für "customers_fsk18=0" kannst Du auch "customers_fsk18_display=1" nehmen. Je nachdem, was Du erreichen willst.
Dann solte xtc den Rest erledigen.
seitenhieb
09.12.2006, 19:55
hmmmm.. ich hab mir das alles nochmal durch den kopf gehen lassen.. zumal du mich auf eine funktion gestoßen hast, die ich im xt nicht kannte.
ich hab das mit den kundengruppenmal durchgetestet, damit scheint es zu klappen.
dann habe ich aber ein völlig falsche templates, welches bei der einstellung FSK18 ANZEIGEN doch nix anzeigt...
im template PRODUCT_INFO ist dieser part
{if $PRODUCTS_FSK18=='true'}
{$tpl_path}img/fsk18.gif (fsk18.php)
{/if}
im template PRODUCT_LISTING
{if $module_data.PRODUCTS_FSK18=='true'}
{$tpl_path}img/fsk18.gif
{/if}
aber da fehlt überall die zuordnung zur kundengruppe.. hier muss ne abfrage nach CUSTOMERS_STATUS rein, oder? die nummer der kundengruppe ist bei mir 5...
wie muss das denn nun korrekt aussehen? soviel ahnung hab ich von dieser template-programmierung nun auch wieder nich.. :-/
fiese möpp
09.12.2006, 22:36
Jetzt wird es kompliziert. Ich weiss nicht, ob ich Dich rnichtig verstehe...
So wie Du es geschrieben hast, sollte dein 18-check aufgerufen werden wenn man dieses ab18-Bild anklickt.
Nur funktioniert dies auch mit Kunden, welche schon in der Kundengruppe (5) sind.
Oder???
seitenhieb
09.12.2006, 22:54
öhm.. ja, da hast du auch wieder recht.. aber das kann man doch auch abfangen, oder?
also, die idee mit der kundengruppe ist ok. ist ein kunde bei mir in der, die fsk18 kaufen und sehen darf, ist das gruppe 5.
wenn er das fsk18 bild anklickt, wird das xcheck tor aufgerufen.
der kunde durchläuft das xcheck tor, kommt auf die datei fsk18frei.php zurück, und dort wird dann die kundengruppe auf 5 gesetzt.
du hast recht, in den templates muss nun das ganze abgefragt werden..
also
gibts überhaupt ein bild
<blockquote>ist der artikel fsk18</blockquote>
<blockquote><blockquote>ist der kunde in gruppe 5 wird es trotzdem angezeigt</blockquote></blockquote>
kopfkratz irgendwie fehlt mir da ne windung..
aber das muss doch irgendwie im xt drin sein, sonst hätte doch diese funktion in den kundengruppen keinen sinn.. ob ich nun die gruppe manuell setze oder mit einem script...
aber offensnichtlich isses nicht so..oder?
fiese möpp
10.12.2006, 15:46
Bis jetzt sollte es doch funktionieren oder?
Um den Link für FSK18 Kunden abzuschalten, kannst du beim einloggen ja eine $_SESSION Variable deklarieren.
$_SESSION['FSK18']='true;'
An diese kommst Du ohne Probleme im Template drann.
{if $PRODUCTS_FSK18=='true'}
{php}
if ($_SESSION['FSK18']<>'true')// Kunde noch nicht FSK18
(
echo"{$tpl_path}img/fsk18.gif (fsk18.php)"
)
else // Kunde=FSK18 kein Link
(
echo"{$tpl_path}img/fsk18.gif"
)
{/if}
Den rest sollte XTC schon von selbst erledigen.
Vergess nicht, bei deiner FSK18 Abfrage Kundengruppe=Gast abzufangen.
Die sollen sich doch erst anmelden, bevor Sie die Bildchen sehen dürfen.
Ich weiss auch wirklich nicht, wieviele Gäste dann auf einmal freigeschalten werden bzw. Gäste sollten keine customers_id haben und Dein Script endet mit einen Fehler.
seitenhieb
11.12.2006, 01:44
fein, das mag ja funktionieren.
nur.. wie frage ich dann in der login.php die CUSTOMERS_STATUS ab, die ja einen numerischen wert von 5 darstellt?
ich brauche ja die zahl, um dann mit IF zu bestimmen: ist in fsk18 oder nicht...
ich hab schon rumgebastelt, bekomme aber nur fehlermeldungen.. oder garnix angezeigt..
langsam verzweifele ich daran..
geht das hiermit?
// Check if email exists
****$check_customer_query = xtc_db_query("select from " . TABLE_CUSTOMERS . " where customers_email_address = '" . xtc_db_input($email_address) . "'");
****$fsk18 = xtc_db_query("select customers_status from " . TABLE_CUSTOMERS . " where customers_email_address = '" . xtc_db_input($email_address) . "'");
fiese möpp
11.12.2006, 10:14
Warum willst Du denn über die EMailadresse gehen?
In der login.php wird doch $_SESSION['customers_id']gesetzt.
Einfach in der login.php nachschauen, wo $_SESSION['customers_id'] gesetzt wird.
Meine login.php (Auszug)
if (isset ($_GET['action']) && ($_GET['action'] == 'process')) {
****$email_address = xtc_db_prepare_input($_POST['email_address']);
****$password = xtc_db_prepare_input($_POST['password']);
****// Check if email exists
****$check_customer_query = xtc_db_query("select customers_id, customers_vat_id, customers_firstname,customers_lastname, customers_gender, customers_password, customers_email_address, customers_default_address_id from ".TABLE_CUSTOMERS." where customers_email_address = '".xtc_db_input($email_address)."' and account_type = '0'");
****if (!xtc_db_num_rows($check_customer_query)) {
********$_GET['login'] = 'fail';
********$info_message = TEXT_NO_EMAIL_ADDRESS_FOUND;
****} else {
********$check_customer = xtc_db_fetch_array($check_customer_query);
********// Check that password is good
********if (!xtc_validate_password($password, $check_customer['customers_password'])) {
************$_GET['login'] = 'fail';
************$info_message = TEXT_LOGIN_ERROR;
********} else {
************if (SESSION_RECREATE == 'True') {
****************xtc_session_recreate();
************}
************$check_country_query = xtc_db_query("select entry_country_id, entry_zone_id from ".TABLE_ADDRESS_BOOK." where customers_id = '".(int) $check_customer['customers_id']."' and address_book_id = '".$check_customer['customers_default_address_id']."'");
************$check_country = xtc_db_fetch_array($check_country_query);
************$_SESSION['customer_gender'] = $check_customer['customers_gender'];
************$_SESSION['customer_first_name'] = $check_customer['customers_firstname'];
************$_SESSION['customer_last_name'] = $check_customer['customers_lastname'];
************$_SESSION['customer_id'] = $check_customer['customers_id'];
************$_SESSION['customer_vat_id'] = $check_customer['customers_vat_id'];
************$_SESSION['customer_default_address_id'] = $check_customer['customers_default_address_id'];
************$_SESSION['customer_country_id'] = $check_country['entry_country_id'];
************$_SESSION['customer_zone_id'] = $check_country['entry_zone_id'];
Bei $check_customer_query brauchst Du nur noch 'customers_status' in das select-Statement zu schreiben(Zeile5),
und da wo die $_SESSION-Variablen gesetzt werden, setzt Du $_SESSION['FSK18'].(Letzte Zeile)
Sollte dann so aussehen:
if (isset ($_GET['action']) && ($_GET['action'] == 'process')) {
****$email_address = xtc_db_prepare_input($_POST['email_address']);
****$password = xtc_db_prepare_input($_POST['password']);
****// Check if email exists
****$check_customer_query = xtc_db_query("select customers_id, customers_status, customers_vat_id, customers_firstname,customers_lastname, customers_gender, customers_password, customers_email_address, customers_default_address_id from ".TABLE_CUSTOMERS." where customers_email_address = '".xtc_db_input($email_address)."' and account_type = '0'");
****if (!xtc_db_num_rows($check_customer_query)) {
********$_GET['login'] = 'fail';
********$info_message = TEXT_NO_EMAIL_ADDRESS_FOUND;
****} else {
********$check_customer = xtc_db_fetch_array($check_customer_query);
********// Check that password is good
********if (!xtc_validate_password($password, $check_customer['customers_password'])) {
************$_GET['login'] = 'fail';
************$info_message = TEXT_LOGIN_ERROR;
********} else {
************if (SESSION_RECREATE == 'True') {
****************xtc_session_recreate();
************}
************$check_country_query = xtc_db_query("select entry_country_id, entry_zone_id from ".TABLE_ADDRESS_BOOK." where customers_id = '".(int) $check_customer['customers_id']."' and address_book_id = '".$check_customer['customers_default_address_id']."'");
************$check_country = xtc_db_fetch_array($check_country_query);
************$_SESSION['customer_gender'] = $check_customer['customers_gender'];
************$_SESSION['customer_first_name'] = $check_customer['customers_firstname'];
************$_SESSION['customer_last_name'] = $check_customer['customers_lastname'];
************$_SESSION['customer_id'] = $check_customer['customers_id'];
************$_SESSION['customer_vat_id'] = $check_customer['customers_vat_id'];
************$_SESSION['customer_default_address_id'] = $check_customer['customers_default_address_id'];
************$_SESSION['customer_country_id'] = $check_country['entry_country_id'];
************$_SESSION['customer_zone_id'] = $check_country['entry_zone_id'];
****************************************** if($check_customer['customers_status']=='5'){$_SESSION['FSK18']='true';}else{$_SESSION['FSK18']='false';}
hallo! :rolleyes:
wenn ich mal dazu noch meinen senf los werden darf: ich finde interessant, dass sich mal jemand mit dem thema auch hier auseinandersetzt, und der vorgestellte weg ist offenbar nicht schlecht, bloß krankt er wie so oft an einem wesentlichen detail: die altersverifikation über x-check oder andere systeme muss bei jedem login vorgenommen werden. nur einmalig bei xtcommerce die customer_id auf einen "FSK18"-kunden zu setzen renicht offenbar nicht aus. so wäre es eben auch möglich, dass sich junior mit papas passwort einloggt und schweinkram anschaut.
gibt´s denn eine lösung, die customer_id zuverlässig wieder zurückzusetzen (z.B. bei logout oder nach ablauf der session)?
''>ZITAT(jayred @ Feb 21 2007, 12:44) 21489
hallo! :rolleyes:
wenn ich mal dazu noch meinen senf los werden darf: ich finde interessant, dass sich mal jemand mit dem thema auch hier auseinandersetzt, und der vorgestellte weg ist offenbar nicht schlecht, bloß krankt er wie so oft an einem wesentlichen detail: die altersverifikation über x-check oder andere systeme muss bei jedem login vorgenommen werden. nur einmalig bei xtcommerce die customer_id auf einen "FSK18"-kunden zu setzen renicht offenbar nicht aus. so wäre es eben auch möglich, dass sich junior mit papas passwort einloggt und schweinkram anschaut.
gibt´s denn eine lösung, die customer_id zuverlässig wieder zurückzusetzen (z.B. bei logout oder nach ablauf der session)?
[/b]
gibt es schon eine Lösung? ist ja schon ein bisschen her... :unsure:
vBulletin® v3.8.4, Copyright ©2000-2012, Jelsoft Enterprises Ltd.