2013-05-29 10 views
6

Ich richte einen E-Shop in Drupal 7 mit der Commerce-Suite von Modulen. Über den Shop wird täglich ein Logistikservice angeboten.Vollkalender als Teil von Drupal Commerce Checkout

Ein Teil des Bestellvorgangs besteht darin, dem Benutzer einen Kalender mit Verfügbarkeit für den Dienst anzuzeigen. Die Tage, an denen der Service verfügbar ist, sollten angezeigt werden, und der Benutzer sollte in der Lage sein, einen Tag als Teil des Checkout-Prozesses auszuwählen und mit dem nächsten Checkout-Bildschirm fortzufahren.

Ich möchte das Fullcalendar Skript verwenden, um die tägliche Verfügbarkeit für den Benutzer angezeigt werden:

http://arshaw.com/fullcalendar/

Es ist ein relevantes Plugin in Drupal:

https://drupal.org/project/fullcalendar

I Ich kann auf meiner Site eine normale Vollkalenderseite anzeigen. Der Teil, an dem ich wirklich feststecke, ist, wie man einen Teil des vollständigen Kalenders als Teil des Checkout-Prozesses erstellt und die Benutzerauswahl in der Reihenfolge speichert.

ich den Handel zusätzliche Scheiben Modul versucht haben, den Kalender hinzuzufügen:

https://drupal.org/project/commerce_extra_panes

Jedoch habe ich nicht erfolgreich waren. Ich kann keine Möglichkeit finden, den Vollkalenderblock als Fenster anzuzeigen.

Ich habe die Dokumentation von Drupal Commerce, dem Vollkalendermodul und dem Commerce-Extra-Fenstermodul gelesen, aber ich kann immer noch nicht herausfinden, wie man Vollkalender als Teilfenster anzeigt. Ich habe auch versucht, ein benutzerdefiniertes Modul zu erstellen, aber ich kann nicht herausfinden, wie man Vollkalender programmatisch ausgibt.

Hat jemand das schon mal gemacht? Gibt es eine Möglichkeit, diese Funktionalität über diese Module dem Checkout-Prozess hinzuzufügen, oder sollte ich selbst alles von Grund auf neu schreiben?

Antwort

4

Ich setzte mich hin und schaute mir das nochmal an, und fand einen Weg, dies zu implementieren.

Zuerst habe ich versucht, das Vollkalender Drupal-Plugin zu verwenden, aber es erwies sich als unnötig komplex für diese spezielle Funktionalität, und es war nicht sehr klar, wie Sie die Ausgabe des Vollkalender-Plugins in den Bereich hinzufügen. Die Handels-Extra-Fenster waren auch in diesem Fall nicht so nützlich.

Also hier ist, was ich tat:

1) Ich habe ein Modul geschaffen, in dem ich einen benutzerdefinierten Bereich einrichten. Hier ist der Teil des Moduls, das den Handel Kasse Bereich einrichten:

function custom_checkout_commerce_checkout_pane_info() { 
    $panes = array(
    'custom_checkout_date' => array(
     'title' => t('Select a date'), 
     'base' => 'custom_checkout_date_pane', 
     'page' => 'route_date', // default checkout page 
     'weight' => -5, 
     'file' => 'includes/pane_route_date.inc' // Form functions 
    ) 
); 

    return $panes; 
} 

Hier ist, was in der Scheibe enthalten ist selbst:

Das versteckte Feld „selected_date“ speichert das Ergebnis des Kalenders, welches dann zur Bestellung hinzugefügt wird.

Ich fügte dann Vollkalender zum Drupal-Bibliotheksordner hinzu und fügte ihn der Seite hinzu, auf der das Vollkalenderfenster unter Verwendung von drupal_add_js platziert wurde.

Ich erstellte dann eine AJAX Callback-Seite, die verwendet wird, um die verfügbaren Daten zurückzugeben, die mit den Parametern übereinstimmen, die in der Bestellung vom Kunden angegeben wurden.

Ich fügte dann einen Click-Handler für jedes Ereignis hinzu, indem Sie den Fullcalendar eventClick Callback überschreiben. Wenn der Benutzer auf ein Ereignis klickt, wird das Ereignisdatum in dem ausgeblendeten Feld festgelegt und der aktuelle Commerce-Checkout-Bereich wird mit dem nächsten fortgeschaltet.

So habe ich schließlich herausgefunden, was zu tun ist, aber es erforderte viel herumspielen, und viele der Teile, die ich gemacht habe, waren nicht so gut dokumentiert oder hatten keine guten Beispiele zu folgen: (

Wie dem auch sei, das Problem in dieser Frage nun gelöst, ich hoffe, dass dies jemand hilft, die dieselben (oder ähnliche) Probleme mit der Kasse Teil des Drupal Commerce zu bekämpfen versucht.