Přeskočit přímo na text


Übercart: jak na "Osobní převzetí zboží v obchodě"?

Již několikrát se mi stalo, že se mě někdo ptal, jak vytvořit v Čechách celkem běžnou věc – „osobní vyzvednutí zboží v obchodě“. Mnoho zvláště menších e-shopů nevyužívá žádné platební brány ani dopravce – vystačí si s dobírkou České Pošty. Pokud má takový e-shopík nějakou kamennou provozovnu či prodejnu, je častým zvykem nabízet kromě dobírky ještě „osobní převzetí v obchodě“, zdarma samozřejmě.

„Vyzvednutí v obchodě“ trochu boří filosofii e-shopu jako bezkontaktního prodeje na dálku. Vzhledem k našim podmínkám je však jeho oblíbenost celkem pochopitelná: Zvláště ve větších městech si lidé raději pro zboží zajedou při cestě z práce, než čekat frontu na poště – zaměstnaní lidé většinou nemají čas vyčkávat na pošťáka, který s oblibou přichází někdy uprostřed pracovního dne, u nás např. mezi 10 až 14h, a diví se že nikdo není doma. Takže místo aby zboží měli hned, na něj 1 až X dnů čekají a pak ještě po návratu z práce běží „s lístečkem“ na poštu, postavit se pěkně do fronty, aby zjistili, že se balík ztratil nebo je poškozený… a za tuhle zábavu ještě zaplatí nějakou tu stovku navíc.

Ale dost filozofování, pusťme se do práce…

Standardní instalace Übercartu nabízí metody platby jako platba kreditkou, platba šekem, dobírka a ostatní/obecná platba. Pro vyzvednutí v obchodě by bylo možné použít škatulku „ostatní“, co to ale je „ostatní“ resp. obecná platba? Nabízet zákazníkovi „platbu dobírkou“ a platbu „ostatní“ resp. „obecnou“ není dobrý nápad. Ještě by mohl chtít nějaký podnikavec vyměnit naše zboží za svojí právě sklizenou úrodu mrkve. (Metoda ostatní, resp. generic payment má IMHO sloužit jen pro správce obchodu a umožňuje zadávat i detaily platby – jakým způsobem bude/byla platba provedena.)

Nezbývá než vytvořit si vlastní metodu placení. Metoda toho bude umět ještě méně, než metoda placení „ostatní“. Totiž nic. Jejími úkoly bude pouze „nechat se zaškrtnout“ a „zobrazit se na objednávce“.

Implementace je celkem jednoduchá: vytvoříme nový modul (např. uc_pickup), umístíme ho do adresáře s moduly, případně do podadresáře contribs v adresáři ubercartu (ale pozor, abychom si adresář nesmazali při upgradu UC, osobně preferuji spíš předchozí možnost).

Jako první věc je nutné zaregistrovat naši metodu placení do Übercartu. K tomu použijeme háček hook_payment_met­hod().

<?php /**
* Implementation of hook_payment_met­hod().
*/ function uc_pickup_pay­ment_method() {
$methods[] = array(
‚id‘ ⇒ ‚pickup‘,
‚name‘ ⇒ t(‚Pick-up‘),
‚title‘ ⇒ t(‚Pick-up at store‘),
‚desc‘ ⇒ t(‚Pay on pick-up at store.‘),
‚callback‘ ⇒ ‚uc_pickup_met­hod_pickup‘, // jméno funkce, která slouží jako ovladač této metody placení
‚weight‘ ⇒ 1,
‚checkout‘ ⇒ FALSE, // počáteční nastavení, zda se objeví platba v pokladně
‚no_gateway‘ ⇒ TRUE, // nepoužíváme platební bránu
);
return $methods; } ?>

Nyní stačí vytvořit „handler“, tedy náš ovladač metody placení. Ten sice není zdokumentován jako „háček“, nicméně je třeba se napojoval na poměrně striktně dané rozhraní. Jako vzor použijeme ovladač metody ostatní/obecná platba – tzn funkci uc_payment_met­hod_other().

<?php /**
* Pickup „payment“ handler
*/ function uc_pickup_met­hod_pickup($op, $arg1) {

switch ($op) {
case ‚cart-details‘:
// tento text se objeví při přepnutí metody placení v pokladně
$details = variable_get(‚uc_­pickup_policy‘, t(‚Full payment is expected prior to pick-up.‘));
return $details;

case ‚order-view‘:
case ‚customer-view‘:
// jméno metody placení, jak se objeví v objednávce
$output = t(‚Pick-up‘);
return $output;

case ‚order-details‘:
case ‚edit-process‘:
case ‚order-load‘:
case ‚order-save‘:
// neimplemetováno
break;
} }

?>

A to je vše. Celý modul si můžete stáhnout (zabaleno v ZIP, 7kB).

TIP na závěr: pokud chcete jednoduše zpoplatnit samotnou metodu placení (např. fixně 100 Kč za dobírku nebo 666 Kč za vyzvednutí v obchodě, když vám přijde, že ti lidé jsou nějací nesnesitelní), použijte modul UC PMA neboli Ubercart Payment Method Adjustments. Tento modul přidá sloupeček do nastavení platebních metod, kde je možné zadat částku, která se přičte k objednávce při použití dané metody placení.

PřílohaVelikost
uc_pickup.zip6.59 KB
About the authornení
 

Díky, tohle je moc užitečné a

Díky, tohle je moc užitečné a inspirativní. :-)

To nevypadá zle, jen se

To nevypadá zle, jen se zeptám, jestli to nějak řeší předchozí krok v pokladně, tedy „přepravní přirážku“. Tohle je v UC trochu nedotažené, že mi vybraná přepravní přirážka neomezí možnosti plateb. I když nedávno jsem na to našel nějaký modul Conditional payment, který by to řeší přes conditional actions.

Asi úplně nerozumím na co se

Asi úplně nerozumím na co se ptáš. Jinak Conditional Payments by asi měli jít použít, nebo např. UC Fee. Na poplatky je modulů víc.

Poslední dva kroky v pokladně

Poslední dva kroky v pokladně (před poznámkou) jsou výběr dopravy a výběr platební metody. Tyhle dva kroky na sebe nereagují (tedy krom toho nového Conditional Payments modulu). Tam směřovala i moje otázka, jestli to ten tvůj modul bere nějak v potaz, nebo jestli to nechává na inteligenci zákazníka, že když vybere platbu hotově, tak nebude vybírat dopravu českou poštou…

Jo tak. Jak jsem psal

Jo tak. Jak jsem psal v článku, toto je určeno pro menší obchody, které „dvoukrokovou“ objednávku vůbec nepoužívají.

Používají pouze 1) dobírku 2) osobní převzetí. Modul (resp. krok) shipping se vůbec nepoužívá, používá se pouze payment.

Můžu se zeptat, jak udělám tu

Můžu se zeptat, jak udělám tu dobírku? Jestli jsem to dobře pochopil, tak si musím na každou metodu platby psát vlastní modul? To mi tedy nepřijde moc optimální :(

Dobírka tam už je

Dobírka tam už je mezi standardníma payment methods. V AJ je to COD … Cash on Delivery. Není tam jen ten „pickup“. Tzn vyzvednutí v obchodě.

Thanks

Jo! tip na závěr je to co sem potřeboval vědět, díky:D

Hm tak já bych byl rád moci

Hm tak já bych byl rád moci používat jen Payment method nastavení u checkoutu, chce to ale něco za shiping weight quote. Nemáte někdo třeba ucpma upravený s nějakejma podmínkama ve smyslu orderWeight>1 {adjustment=xxx}. Anebo jak jste to (cena na základě váhy objednavky) vyřešili pokud nevyužívate žádného uc_shipping

dobrý tip…patřím mezi lidi,

dobrý tip…patřím mezi lidi, co si objednávají na dobírku pravidelně a fakt je, že né vždy mě chytí doma a to je pak pěkně na pytel…Měli by se mrknout na tvůj návrh…

Netušíte jak nastavit fixní

Netušíte jak nastavit fixní cenu za dobírku pro Drupal 7?

uc_pma module ti pomuze

uc_pma module ti pomuze

Podpora pro Drupal 7

Pro D7 je nutne upravit hook na uc_payment a zmenit uc_pickup.info, aby podporoval D7 uc_pickup.info name = In-Store Pickup description = In-Store pickup payment method dependencies[] = uc_cart dependencies[] = uc_payment package = „Ubercart – extra“ core = 7.x php = 5.3 uc_pickup.module <?php /**
* @file Simple module which provides „Pickup“ payment method to the Übercart
*
* @author Vojtech Kusy <wojtha@gmail.com>
* @license http://www.gnu.org/…/gpl-2.0.txt GNU Public License v2
*/ /**
* Implementation of hook_uc_paymen­t_method().
*
* @return array
*/ function uc_pickup_uc_pa­yment_method() {
$methods[] = array(
‚id‘ ⇒ ‚pickup‘,
‚name‘ ⇒ t(‚Pick-up‘),
‚title‘ ⇒ t(‚Pick-up at store‘),
‚desc‘ ⇒ t(‚Pay on pick-up at store.‘),
‚callback‘ ⇒ ‚uc_pickup_met­hod_pickup‘,
‚weight‘ ⇒ 1,
‚checkout‘ ⇒ FALSE,
‚no_gateway‘ ⇒ TRUE
);
return $methods; } /**
* Pickup „payment“ handler
*
* @return array
*/ function uc_pickup_met­hod_pickup($op, $order) {
switch ($op) {
case ‚cart-details‘:
$details[‚#markup‘] = variable_get(‚uc_­pickup_policy‘, t(‚Full payment is expected prior to pick-up.‘));
return $details; case ‚order-view‘:
case ‚customer-view‘:
$details[‚#markup‘] = t(‚Pick-up‘);
return $details[‚#mar­kup‘]; case ‚order-details‘:
case ‚edit-process‘:
case ‚order-load‘:
case ‚order-save‘:
break;
} }

D7 podpora z predchoziho prispevku

Pri zobrazeni objednavek hazi Fatal error: Unsupported operand types in …ubercart/pay­ment/uc_paymen­t/uc_payment_or­der_pane.inc on line 42. Opraveny kod nize.

 /** * @file Simple module which provides „Pickup“ payment method to the Ubercart * * @author Vojtech Kusy <wojtha@gmail.com> * @license http://www.gnu.org/…/gpl-2.0.txt GNU Public License v2 *//**
* Implementation of hook_uc_paymen­t_method().
*
* @return array
*/ function uc_pickup_uc_pa­yment_method() {
$methods[] = array(
‚id‘ ⇒ ‚pickup‘,
‚name‘ ⇒ t(‚Pick-up‘),
‚title‘ ⇒ t(‚Pick-up at store‘),
‚desc‘ ⇒ t(‚Pay on pick-up at store.‘),
‚callback‘ ⇒ ‚uc_pickup_met­hod_pickup‘,
‚weight‘ ⇒ 1,
‚checkout‘ ⇒ TRUE,
‚no_gateway‘ ⇒ TRUE
);
return $methods; }/**
* Pickup „payment“ handler
*
* @return array
*/ function uc_pickup_met­hod_pickup($op, $order) {
switch ($op) {
case ‚cart-details‘:
$details[‚#markup‘] = variable_get(‚uc_­pickup_policy‘, t(‚Full payment is expected prior to pick-up.‘));
return $details;case ‚order-view‘:
case ‚customer-view‘:
$details[‚#markup‘] = t(‚Pick-up‘);
return $details;case ‚order-details‘: case ‚edit-process‘: case ‚order-load‘: case ‚order-save‘: break; } }

nice work

Thanks for your solution keep it up the good work By Listpoon

Poslat nový komentář

  • You can use Texy! to format and alter entered content.
  • Povolené HTML značky: <em> <strong> <b> <i> <br> <code> <ul> <ol> <li> <pre> <pre class="php">
  • You can enable syntax highlighting of source code with the following tags: <code>, <blockcode>. Beside the tag style "<foo>" it is also possible to use "[foo]".

Více informací o možnostech formátování

Hledat

Přihlášení

Bezpečnost Drupalu

Z hlediska bezpečnosti je Drupal na velmi vysoké úrovni, díky propracovanému systému hlášení, prověřování a řešení možných problémů.

Čtěte více a odebírejte bezpečnostní aktuality

Poslední komentáře

Kdo je online

Momentálně je online 0 uživatelů a 0 hostů.

Support

Psychologie - poradenství