Zusätzliche Account-Informationen unter "Ihr Konto" durch $smarty!

Thema wurde von uncutmovie.de, 15. November 2015 erstellt.

  1. barbara

    barbara G-WARD 2014-2020

    Registriert seit:
    14. August 2011
    Beiträge:
    35.352
    Danke erhalten:
    11.198
    Danke vergeben:
    1.601
    Übrigens würde ich die Nummern nicht so hoch ansetzen.
    Da gibt es nämlich Max-Werte.
     
  2. uncutmovie.de

    uncutmovie.de Erfahrener Benutzer

    Registriert seit:
    11. März 2014
    Beiträge:
    313
    Danke erhalten:
    19
    Danke vergeben:
    14
    Oh danke euch Beiden.
    Ich fasse lieber die SQL nicht an. Habe Angst dort etwas kaputt zu machen. Aber dafür hat man ein Glück euch, die den Unwissenden weiterhelfen. Danke. :eek:
     
  3. uncutmovie.de

    uncutmovie.de Erfahrener Benutzer

    Registriert seit:
    11. März 2014
    Beiträge:
    313
    Danke erhalten:
    19
    Danke vergeben:
    14
    Was?
    Darauf muss ich auch noch achten. Kannst du mir vielleicht sagen, was der Max-Wert wäre?
     
  4. barbara

    barbara G-WARD 2014-2020

    Registriert seit:
    14. August 2011
    Beiträge:
    35.352
    Danke erhalten:
    11.198
    Danke vergeben:
    1.601
    Nee, ich habe das hier im Forum mal gelesen.
     
  5. uncutmovie.de

    uncutmovie.de Erfahrener Benutzer

    Registriert seit:
    11. März 2014
    Beiträge:
    313
    Danke erhalten:
    19
    Danke vergeben:
    14
    #25 uncutmovie.de, 21. November 2015
    Zuletzt bearbeitet: 21. November 2015
    So, ich habe mal versucht mich in das Thema einzulesen. Ich stoße an meine Grenzen und bin der Überzeugung, dass man solche Dinge ohne PHP-Kenntnisse nicht hin bekommt. Da ich noch nicht mal die einzelnen Variablen kenne bzw. nicht weiss, welche Funktionen diese Variablen haben. Deshalb kann ich schlecht einen Overload erstellen. :D

    Das hieße, ich müsste mich jetzt erstmal hinsetzen und PHP lernen. Diese würde ich bestimmt auch hinbekommen, bin ja schließlich nicht doof. Aber zeitlich momentan nicht machbar durch meinen Hauptberuf. :(

    Im Forum habe ich nachlesen können wie und wo ich solch ein Overload erstelle bzw. wie der Anfang ist. In diesem Fall müsste ein Ordner AccountEditContentView in user_classes\overloads erstellt werden. Dann eine Datei mit dem Namen birthday_AccountEditContentView.inc.php in dem Ordner AccountEditContentView hinzufügen. Der Anfang dieser Datei müsste nach den Anleitungen dann wie folgt sein:

    PHP:
    <?php
    class birthday_AccountEditContentView extends birthday_AccountEditContentView_parent
    {

    }
    ?>
    Das ist alles kein Problem. Nun muss ich aber die AccountEditContentView durch Befehle überladen und genau da hört es bei mir jetzt auf, weil ich genau diese Befehle nicht kenne.

    Und eine SQL-Abfrage könnte wie folgt lauten:

    PHP:
    <?php
    $abfrage 
    "SELECT customers_dob FROM customers";
    $ergebnis mysql_query($abfrage);
    while(
    $row mysql_fetch_object($ergebnis))
       {
       echo 
    "$row->customers_dob";
       }
    ?>
    Und wenn ich das richtig verstanden habe, kann ich $abfrage und $ergebnis frei definieren.

    Diese Abfrage gibt nun den Wert der Spalte customer_dob der Tabell customers aus. Nun muss ich der Abfrage genau sagen, welche Werte ich aus der Spalte genau haben möchte und das soll über das Attribut WHERE funktionieren. Mit dem Attribut LIKE kann man innerhalb der Spalte nach einem Wert suchen.

    Zum Beispiel:

    Gib mir den Wert aus der Spalte customers_dob vom Kunden xyz aus. Das müsste dann über die customers_id erfolgen.

    PHP:
    <?php
    $abfrage 
    "SELECT customers_dob FROM customers WEHRE customers_id LIKE $smarty.session.customer_id";
    $ergebnis mysql_query($abfrage);
    while(
    $row mysql_fetch_object($ergebnis))
       {
       echo 
    "$row->customers_dob";
       }
    ?>
    Nun würde mir halt nur die richten Befehle für die Overlaod-Datei fehlen.

    Ich hoffe, ich habe es nun richtig wider gegeben. :confused:

    Die while-Schleife glaube ich, brauch man für das Vorhaben nicht sowie echo. Echo gibt nur den Wert aus und die while-Schleife erübrigt sich, weil wir nach einem bestimmten Wert suchen.

    Ah, okay.
     
  6. Cyrus (LeGong)

    Cyrus (LeGong) Erfahrener Benutzer

    Registriert seit:
    21. Dezember 2011
    Beiträge:
    1.432
    Danke erhalten:
    342
    Danke vergeben:
    176
    Ich habe zwar dir die Antwort per Email geschickt, aber hier nochmals, falls sonst jemand diese Erweiterung braucht. Außerdem, hoffe ich, dass eine oder andere eventuell eine bessere Overload-Methode vorschlägt.
    Um die Daten von DateOfBirth im Kundenkontenbereich sichtbar zu machen, müssen diese Daten auch im Session geladen werden. Erst dann kann man diese Daten über $Smarty in "account-USERMOD.html" abrufen. Dafür habe ich die Datei "system/classes/accounts/LoginContentControl.inc.php" per Overload wie folgt erweitert:
    1: in dem Ordner "user_classes/overloads" einen neuen Ordner mit dem Namen "LoginContentControl" erstellen.
    2: den untenstehenden PHP-Code in eine Datei mit dem Namen "dob_LoginContentControl.inc.php" reinkopieren und diese Datei in dem neu erstellten Ordner speichern.
    PHP:
    <?php
    // BOF requires for the date formate
    require_once(DIR_FS_INC 'xtc_date_short.inc.php');
    require_once(
    DIR_FS_INC 'xtc_date_long.inc.php');
    require_once(
    DIR_FS_INC 'xtc_date_raw.inc.php');
    // EOF
    class dob_LoginContentControl extends dob_LoginContentControl_parent
    {    
        public function 
    proceed()
        {
            
    $gm_log MainFactory::create_object('GMTracker');
            
    $gm_log->gm_delete();
            
    $info_message '';

            if(
    $gm_log->gm_ban() == false)
            {
                if(isset(
    $this->v_data_array['GET']['action']) && ($this->v_data_array['GET']['action'] == 'process'))
                {
                    
    $email_address xtc_db_prepare_input($this->v_data_array['POST']['email_address']);
                    
    $password xtc_db_prepare_input($this->v_data_array['POST']['password']);
                    
    // Check if email exists
                    
    $check_customer_query xtc_db_query("SELECT 
                                                            customers_id, 
                                                            customers_vat_id, 
                                                            customers_firstname, 
                                                            customers_lastname,
                                                            customers_dob, 
                                                            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))
                    {
                        
    $this->v_data_array['GET']['login'] = 'fail';
                        
    $info_message TEXT_LOGIN_ERROR;

                        
    $gm_log->gm_track();
                        
    $coo_econda $this->coo_econda;
                        if(
    is_object($coo_econda))
                        {
                            
    $coo_econda->_loginFailUserUnknown();
                        }
                    }
                    else
                    {
                        
    $check_customer xtc_db_fetch_array($check_customer_query);

                        
    // Check that password is good
                        
    $t_valid_password xtc_validate_password($password$check_customer['customers_password']);

                        
    // try admin login
                        
    if($t_valid_password === false)
                        {
                            
    $t_sql "SELECT 
                                        customers_password
                                    FROM 
                                        " 
    TABLE_CUSTOMERS "
                                    WHERE 
                                        customers_id = 1 AND
                                        customers_status = 0"
    ;
                            
    $t_result xtc_db_query($t_sql);
                            if(
    xtc_db_num_rows($t_result) == 1)
                            {
                                
    $t_result_array xtc_db_fetch_array($t_result);
                                
    $t_valid_password xtc_validate_password($password$t_result_array['customers_password']);
                            }
                        }

                        if(
    $t_valid_password === false)
                        {
                            
    $this->v_data_array['GET']['login'] = 'fail';

                            
    $gm_log->gm_track();

                            
    $info_message TEXT_LOGIN_ERROR;
                            
    $coo_econda $this->coo_econda;
                            if(
    is_object($coo_econda))
                            {
                                
    $coo_econda->_loginFailPasswordInvalid();
                            }
                        }
                        else
                        {
                            
    $gm_log->gm_delete(true);

                            if(
    SESSION_RECREATE == 'True')
                            {
                                
    xtc_session_recreate();
                            }                        
                            
                            
    $check_country_query xtc_db_query("SELECT 
                                                                    entry_country_id, 
                                                                    entry_zone_id,
                                                                    customer_b2b_status
                                                                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'];
                            
                            
    // BOF
                            
                            
    $_SESSION['customer_dob'] = xtc_date_short($check_customer['customers_dob']);
                             
                            
                            
    // EOF
                                
                            
    $_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'];
                            
    update_customer_b2b_status($check_country['customer_b2b_status']);

                            
    $t_customers_info_array = array(
                                
    'customers_info_date_of_last_logon' => 'now()',
                                
    'customers_info_number_of_logons' => 'customers_info_number_of_logons + 1'
                            
    );
                            
    $this->wrapped_db_perform(__FUNCTION__TABLE_CUSTOMERS_INFO$t_customers_info_array'update''customers_info_id = ' . (int)$_SESSION['customer_id'], 'db_link'false);
                            
                            
    xtc_write_user_info((int)$_SESSION['customer_id']);
                            
    // restore cart contents
                            
    $_SESSION['cart']->restore_contents();
                            
    $_SESSION['wishList']->restore_contents();

                            
    $coo_login_extender_component MainFactory::create_object('LoginExtenderComponent');
                            
    $coo_login_extender_component->set_data('customers_id', (int)$_SESSION['customer_id']);
                            
    $coo_login_extender_component->proceed();

                            
    $coo_econda $this->coo_econda;
                            if(
    is_object($coo_econda))
                            {
                                
    $coo_econda->_loginUser();
                            }

                            if(
    $_SESSION['cart']->count_contents() > 0)
                            {
                                if(isset(
    $this->v_data_array['GET']['checkout_started']) && $this->v_data_array['GET']['checkout_started'] == 1)
                                {
                                    
    $this->set_redirect_url(xtc_href_link(FILENAME_CHECKOUT_SHIPPING'''SSL'));
                                }
                                else
                                {
                                    
    $this->set_redirect_url(xtc_href_link(FILENAME_ACCOUNT'''SSL'));
                                }
                            }
                            else
                            {
                                
    $this->set_redirect_url(xtc_href_link(FILENAME_DEFAULT));
                            }
                        }
                    }
                }
            }
            else
            {
                
    // delete banned ips
                
    $info_message GM_LOGIN_ERROR;
            }

            if(
    $this->v_data_array['GET']['info_message'])
            {
                
    $info_message htmlentities_wrapper($this->v_data_array['GET']['info_message']);
            }
            elseif(isset(
    $_SESSION['gm_info_message']))
            {
                
    $info_message htmlentities_wrapper(urldecode($_SESSION['gm_info_message']));
                unset(
    $_SESSION['gm_info_message']);
            }

            
    $t_checkout_started_get_param '';
            if(isset(
    $this->v_data_array['GET']['checkout_started']) && $this->v_data_array['GET']['checkout_started'] == 1)
            {
                
    $t_checkout_started_get_param 'checkout_started=1';
            }

            
    $t_input_mail_value '';
            if(isset(
    $this->v_data_array['POST']['email_address']))
            {
                
    $t_input_mail_value htmlentities_wrapper(gm_prepare_string($this->v_data_array['POST']['email_address'], true));
            }

            
    $coo_login_view MainFactory::create_object('LoginContentView');
            
    $coo_login_view->set_('info_message'$info_message);
            
    $coo_login_view->set_('checkout_started_get_param'$t_checkout_started_get_param);
            
    $coo_login_view->set_('input_mail_value'$t_input_mail_value);
            
    $coo_login_view->set_('cart_contents_count'$_SESSION['cart']->count_contents());
            
            
    $this->v_output_buffer $coo_login_view->get_html();

            return 
    parent::proceed();
        }
    }

    3: Nun, um die DateOfBirth auch anzeigen zu lassen muss die Datei "templates/EyeCandy/module/account.html" mit zwei zeilen wie folgt erweitert werden:

    HTML:
    <dt>Geburtsdatum</dt>
    <dd>{$smarty.session.customer_dob}</dd>
    
    4: Diese Datei wird nun als account-USERMOD.html in dem selben Ordner gespeichert.
    5: Shop Caches leeren nicht vergessen.

    Wo man diese zwei Zeilen in der Datei "account.html" integriert, hängt davon ab, wo es erscheinen soll.
    Wie gesagt, würde ich gerne noch dazu lernen, wenn jemand eine bessere Methode vorschlägt.:)