Drupal Commerce Produkt über Link in den Warenkorb

Ich arbeite zur Zeit an einem neuen Web-Shop (Zu dem später mehr). Diesen habe ich mit Drupal und Drupal Commerce realisiert. Hierbei bin ich auf ein Problem gestoßen: und zwar wollte ich ein Commerce Produkt über einen direkten Link in den Einkaufswagen legen. Hier erkläre ich wie das einfach funktioniert.

Hierzu müsst ihr ein eigenes Modul erstellen (Mehr Infos dazu hier). Mein Modul heißt hier commerce_stuff.
Zunächst müsst ihr die Methode hook_menu() implementieren. Diese registriert den Link, welcher das Produkt in den Warenkorb legt, im System.
In meinem Fall heißt der Pfad für den Link product/add/%/%. Als page callback wird der Name der Funktion angegeben, welche beim Klick auf den Link aufgerufen werden soll.

Die zwei Prozent-Zeichen geben die Parameter an, welche dem Link hinzugefügt werden können. Der erste Parameter ist für die Produkt-ID und der zweite Parameter für die Anzahl der Produkte, welche hinzugefügt werden sollen, reserviert.

/**
* Implements hook_menu().
*/
function commerce_stuff_menu() {
  $items['product/add/%/%'] = array (
    'page callback' => 'commerce_stuff_product_add',
    'page arguments' => array(2,3),
    'access arguments' => array('access content'), 
    'type' => MENU_CALLBACK,
  );  

  return $items;
}

Nun muss die Funktion commerce_stuff_product_add angelegt werden. Diese bekommt, wie bereits beschrieben, die Parameter Produkt-ID und Anzahl aus dem Link übergeben.

In den Funktion wird zunächst versucht das Produkt anhand der ID zu laden. Ist dies erfolgreich wird aus dem Produkt und der Anzahl ein Line Item erstellt. Hierbei können optional weitere Produkt-Felder gefüllt werden. Das Line Item wird schließlich dem Warenkorb des aktuellen Benutzers hinzugefügt. Danach wird der Benutzer automatisch auf die Warenkorb-Seite weitergeleitet. Hier ist es auch denkbar zusätzlichen Code einzufügen, um den Benutzer auf der aktuellen Seite zu behalten.

/**
* Fuegt Produkt anhand der Produkt-ID dem Warenkorb hinzu
*/
function commerce_stuff_product_add($pid, $quantity = 1) {

  if ($product = commerce_product_load($pid) ) {
    global $user;
    $uid = $user->uid;
    $line_item = commerce_product_line_item_new($product, $quantity);
    $line_item->field_ticket_type['und'][]['value'] = 0; // optional
    $line_item = commerce_cart_product_add($uid, $line_item, TRUE);

    $destination = 'cart';
    drupal_goto($destination);
  }    
}

Ein möglicher Link könnte beispielsweise wie folgt aussehen:

www.meineseite.de/product/add/1234/2

Dieser würde das Produkt mit der ID 1234 insgesamt 2 mal dem Warenkorb hinzufügen.

zp8497586rq

Comments are closed.