Webylon 3.2 API Docs
  • Package
  • Class
  • Tree
  • Deprecated
  • Download
Version: current
  • 3.2
  • 3.1

Packages

  • 1c
    • exchange
      • catalog
  • auth
  • Booking
  • building
    • company
  • cart
    • shipping
    • steppedcheckout
  • Catalog
    • monument
  • cms
    • assets
    • batchaction
    • batchactions
    • bulkloading
    • comments
    • content
    • core
    • export
    • newsletter
    • publishers
    • reports
    • security
    • tasks
  • Dashboard
  • DataObjectManager
  • event
  • faq
  • forms
    • actions
    • core
    • fields-basic
    • fields-dataless
    • fields-datetime
    • fields-files
    • fields-formatted
    • fields-formattedinput
    • fields-relational
    • fields-structural
    • transformations
    • validators
  • googlesitemaps
  • guestbook
  • installer
  • newsletter
  • None
  • photo
    • gallery
  • PHP
  • polls
  • recaptcha
  • sapphire
    • api
    • bulkloading
    • control
    • core
    • cron
    • dev
    • email
    • fields-formattedinput
    • filesystem
    • formatters
    • forms
    • i18n
    • integration
    • misc
    • model
    • parsers
    • search
    • security
    • tasks
    • testing
    • tools
    • validation
    • view
    • widgets
  • seo
    • open
      • graph
  • sfDateTimePlugin
  • spamprotection
  • stealth
    • captha
  • subsites
  • userform
    • pagetypes
  • userforms
  • webylon
  • widgets

Classes

  • CheckoutStep
  • CheckoutStep_ContactDetails
  • CheckoutStep_Membership
  • CheckoutStep_PaymentMethod
  • CheckoutStep_Summary
  • SteppedCheckout
  1 <?php
  2 /**
  3  * Базовый класс для шагов формы заказа
  4  *
  5  * За основу взят аналогичный класс от sshop
  6  *
  7  * Как правило каждый шаг определяет 3 (или более методов)
  8  * 1. метод отображения шага
  9  * 2. метод генерации формы шага
 10  * 3. метод - обрабочик формы (или несколько)
 11  *
 12  * Все шаги находятся в одном пространстве имен, поэтому имена методов в них должны быть уникальны
 13  * Для шагов можно использовать шаблоны: CheckoutPage_имяшага, CheckoutPage, Page
 14  *
 15  * @package cart
 16  * @subpackage steppedcheckout
 17  * @author dvp
 18  */
 19 class CheckoutStep extends Extension{
 20 
 21     /**
 22      * якорь который можно использовать в шаблонах для позиционирования
 23      * @static
 24      */
 25     static $continue_anchor = "cont";
 26 
 27     /**
 28      * Имя следующего шага
 29      *
 30      * @return string|NULL
 31      */
 32     private function nextStep(){
 33         $steps = SteppedCheckout::$steps;
 34         $found = false;
 35         foreach ($steps as $step => $class) {
 36             if (method_exists($this, $step)) { //determine if current step
 37                 $found = true;
 38             }elseif ($found) {
 39                 return $step;
 40             }
 41         }
 42         return null;
 43     }
 44 
 45     /**
 46      * Ссылка на следующий шаг
 47      *
 48      * @param string $nextStep - имя шага, если опущено - определяется автоматически
 49      *
 50      * @return string|NULL
 51      */
 52     function NextStepLink($nextStep = null){
 53         if (!$nextStep) {
 54             $nextStep = $this->nextStep();
 55         }
 56         return ($nextStep) ? $this->owner->Link($nextStep)."#".self::$continue_anchor : null;
 57     }
 58 
 59     /**
 60      * Имя предыдущего шага
 61      *
 62      * @return string|NULL
 63      */
 64     private function prevStep(){
 65         $steps = $this->owner->StepsList();
 66         $prev = null;       
 67         foreach ($steps as $step) {         
 68             if (method_exists($this, $step->Action)) { //determine if current step
 69                 return $prev;
 70             }
 71             if ($step->Active) {
 72                 $prev = $step->Action;
 73             }
 74         }
 75         return null;
 76     }
 77 
 78     /**
 79      * Ссылка на предыдущий шаг
 80      *
 81      * @param string $prevStep - имя шага, если опущено - определяется автоматически
 82      *
 83      * @return string|NULL
 84      */
 85     function PrevStepLink($prevStep = null){
 86         if (!$prevStep) {
 87             $prevStep = $this->prevStep();
 88         }
 89         return ($prevStep) ? $this->owner->Link($prevStep)."#".self::$continue_anchor : null;
 90     }
 91 
 92     /**
 93      * Возвращает список кнопок для пошаговых форм
 94      *
 95      * @param FormAction $nextAction - кнопка для перехода дальше !!! а если кнопок несколько???? - перейти на FieldSet ???
 96      *
 97      * @return FieldSet
 98      */
 99     function getStepActions($nextAction = null) {
100         $actions = new FieldSet();
101         if ($link = $this->PrevStepLink()) {
102             $actions->push(new LiteralField('prevstep', sprintf('<a class="action goPrevStep button button__second button__backCheckout" href="%s">%s</a>', $link, _t('OrderForm.PrevStepButton', "Back"))));
103         }
104         if ($nextAction) {
105             $actions->push($nextAction);
106         }
107         return $actions;
108     }
109 
110     /**
111      * Служебное имя шага
112      * 
113      * @return string
114      */
115     function stepName() {
116         return strtolower(substr($this->class, strlen('CheckoutStep_')));
117     }
118     
119     /**
120      * Локализованное название шага
121      * 
122      * @return string
123      */
124     function stepTitle() {
125         $step = $this->stepName();
126         return _t('CheckoutPage.step_'.$step, 'Step '.$step);
127     }
128     
129     /**
130      * Сообщение шага
131      * 
132      * @return string
133      */
134     function stepMessage() {
135         return $this->owner->getStepMessage($this->stepName());
136     }
137     
138     /**
139      * Является ли шаг активным
140      * Шаг может пропускать, например, если доступен только 1 способ оплаты или доставки - он выбирется автоматически
141      * 
142      * @return bool
143      */
144     function StepIsActive() {
145         return true;
146     }
147 }
[Raise a SilverStripe Framework issue/bug](https://github.com/silverstripe/silverstripe-framework/issues/new)
- [Raise a SilverStripe CMS issue/bug](https://github.com/silverstripe/silverstripe-cms/issues/new)
- Please use the Silverstripe Forums to ask development related questions. -
Webylon 3.2 API Docs API documentation generated by ApiGen 2.8.0