Blogpotato

xt:C: Adressbucheinträge beim Checkout [upd]

22.12.2006 8 Kommentare

[update]: Des gesagte gilt analog für die Rechnungsadressen in checkout_payment_address.php. Die Session zum Vorauswählen des richten Radiobuttons ist dann aber $_SESSION["billto"].

Aus dem Werbeversprechen von xt:Commerce:

Maximale Flexibilität durch ein Templatesystem (Smarty)

Nur falls das jemand sucht: Das Markup für die Darstellung der Adressen aus dem Adressbuch (beim Checkout) befindet sich in checkout_shipping_address.php.

$address_content = '<table border="0" width="100%" cellspacing="0" cellpadding="0">';
$radio_buttons = 0;
 
$addresses_query = xtc_db_query("select address_book_id, entry_firstname as firstname, entry_lastname as lastname, entry_company as company, entry_street_address as street_address, entry_suburb as suburb, entry_city as city, entry_postcode as postcode, entry_state as state, entry_zone_id as zone_id, entry_country_id as country_id from ".TABLE_ADDRESS_BOOK." where customers_id = '".$_SESSION['customer_id']."'");
while ($addresses = xtc_db_fetch_array($addresses_query)) {
	$format_id = xtc_get_address_format_id($address['country_id']);
 
	$address_content .= ' <tr>
	                <td>'.xtc_draw_separator('pixel_trans.gif', '10', '1').'</td>
	                <td colspan="2"><table border="0" width="100%" cellspacing="0" cellpadding="2">
	                ';
 
	if ($addresses['address_book_id'] == $_SESSION['sendto']) {
		$address_content .= '                  <tr id="defaultSelected" class="moduleRowSelected" onmouseover="rowOverEffect(this)" onmouseout="rowOutEffect(this)" onclick="selectRowEffect(this, '.$radio_buttons.')">'."\n";
	} else {
		$address_content .= '                  </tr><tr class="moduleRow" onmouseover="rowOverEffect(this)" onmouseout="rowOutEffect(this)" onclick="selectRowEffect(this, '.$radio_buttons.')">'."\n";
	}
	$address_content .= '
	                    <td>'.xtc_draw_separator('pixel_trans.gif', '10', '1').'</td>
	                    <td class="main" colspan="2"><strong>'.$addresses['firstname'].' '.$addresses['lastname'].'</strong></td>
	                    <td class="main" align="right">'.xtc_draw_radio_field('address', $addresses['address_book_id'], ($addresses['address_book_id'] == $_SESSION['sendto'])).'</td>
	                    <td>'.xtc_draw_separator('pixel_trans.gif', '10', '1').'</td>
	                  </tr>
	                  <tr>
	                    <td>'.xtc_draw_separator('pixel_trans.gif', '10', '1').'</td>
	                    <td colspan="3"><table border="0" cellspacing="0" cellpadding="2">
	                      <tr>
	                        <td>'.xtc_draw_separator('pixel_trans.gif', '10', '1').'</td>
	                        <td class="main">'.xtc_address_format($format_id, $addresses, true, ' ', ', ').'</td>
	                        <td>'.xtc_draw_separator('pixel_trans.gif', '10', '1').'</td>
	                      </tr>
	                    </table></td>
	                    <td>'.xtc_draw_separator('pixel_trans.gif', '10', '1').'</td>
	                  </tr>
	                </table></td>
	                <td>'.xtc_draw_separator('pixel_trans.gif', '10', '1').'</td>
	              </tr>';
 
	$radio_buttons ++;
}
$address_content .= '</table>';
$smarty->assign('BLOCK_ADDRESS', $address_content);

Hier eine sinvollere und dreimal so kurze Alternative:

		$address_content = '<ul id="address_block">';
		$radio_buttons = 0;
 
		$addresses_query = xtc_db_query("select address_book_id, entry_firstname as firstname, entry_lastname as lastname, entry_company as company, entry_street_address as street_address, entry_suburb as suburb, entry_city as city, entry_postcode as postcode, entry_state as state, entry_zone_id as zone_id, entry_country_id as country_id from ".TABLE_ADDRESS_BOOK." where customers_id = '".$_SESSION['customer_id']."'");
		while ($addresses = xtc_db_fetch_array($addresses_query)) {
			$format_id = xtc_get_address_format_id($address['country_id']);
 
			$address_content .= sprintf('<li>%s<label for="field_addresses_%s">%s %s</label><br /><span class="address">%s</span></li>', xtc_draw_radio_field('address', $addresses['address_book_id'], ($addresses['address_book_id'] == $_SESSION['sendto'])), $addresses['address_book_id'], $addresses['firstname'], $addresses['lastname'],xtc_address_format($format_id, $addresses, true, ' ', ', '));
			$radio_buttons ++;
		}
		$address_content .= '</ul>';
		$smarty->assign('BLOCK_ADDRESS', $address_content);

Auch wenn mich dieses vermischen von php-Code und Markup nicht wirklich begeistert.

Wenn wir gerade dabei sind können wir auch noch die Abkürzungen für die Bundesländer aktualisieren, oder wer assoziiert Hamburg mit HAM und Rheinland-Pfalz mit RHE? Um einer Standardinstallation die Abkürzungen gemäß ISO-3166-2 zu spendieren, ist der Datenbank folgendes mitzuteilen:

update zones set zone_code = 'NI' where zone_id = 79;
update zones set zone_code = 'BW' where zone_id = 80;
update zones set zone_code = 'BY' where zone_id = 81;
update zones set zone_code = 'BE' where zone_id = 82;
update zones set zone_code = 'BR' where zone_id = 83;
update zones set zone_code = 'HB' where zone_id = 84;
update zones set zone_code = 'HH' where zone_id = 85;
update zones set zone_code = 'HE' where zone_id = 86;
update zones set zone_code = 'MV' where zone_id = 87;
update zones set zone_code = 'NW' where zone_id = 88;
update zones set zone_code = 'RP' where zone_id = 89;
update zones set zone_code = 'SL' where zone_id = 90;
update zones set zone_code = 'SN' where zone_id = 91;
update zones set zone_code = 'ST' where zone_id = 92;
update zones set zone_code = 'SH' where zone_id = 93;
update zones set zone_code = 'TH' where zone_id = 94;

[tags]xt:commerce, xtc, templates, statecode[/tags]

8 Kommentare Kommentieren

  1. Markus

    Wenn ich den

    hätte gerne das
    [update]: Des gesagte gilt analog für die Rechnungsadressen in checkout_payment_address.php.

    gemacht, leider kommt aber:

    Parse error: syntax error, unexpected T_STRING

    Zeile 208

    Gibt es eine Lösung dafür?

    Danke und Gruß
    Markus


  2. Matt

    Zeile 208 ist bei mir im Originalcode eine schließende geschweifte Klammer.
    Am besten mal deinen Code per Mail schicken, dann schau ich mir das mal an.


  3. Markus B.

    Hi Matt,
    bei mir geht das leider auch nicht!?

    Ich kann die Orig.XTC Ansicht der checkout….. nicht mehr ertragen, ich hoffe Du kannst mir helfen.

    Wo kann ich den Code hin sckicken????



  4. Christopher

    Hallo Matt,

    vielen Dank für den Hinweis. Hätte nie gedacht, dass sich der ADDRESS_BLOCK dort versteckt. Habs durch “grep” gefunden und mir wurde bei der Ansicht ganz anders.

    Dann habe ich Deine Version eingefügt und bei mir traten die gleichen Fehler auf.

    Das liegt an den einfachen Anführungszeichen (‘). Wenn man einfach copy&paste macht, werden sie falsch übernommen. Ich habe einfach alle nochmal ausgetauscht und jetzt klappts fehlerfrei :)


  5. Markus

    Ich versuche die Reihenfolge der Adressausgabe zu ändern.

    z.B.
    Firstname Lastname
    Company
    Suburb
    Postcode
    City

    Leider finde ich nicht die Datei wo die Adressen zusammengesetzt werden!?


  6. Matt

    Ich vermute mal, du meinst nicht in den Templates, sondern die generelle Darstellung einer zusammengesetzten Adresse. Schau dazu mal in der Tabelle address_format nach.


  7. Markus

    Genau das meine ich!!!

    Was ist das denn für eine sch……

    Ich möchte suburb unter company da ich das als erweiterten Firmenname vergewaltigt habe.

    Daten werden über Shopsync aus der WAWI direkt in die DB geschrieben.

    suburb wird aber wieder in der xtc_address_format.inc.php unter die Strasse geschrieben, ich wollte es drüber haben.
    Hat geklappt.

    Danke für den Tip


Kommentieren





zurücksetzen