Best Answer SmetDenis , 21 April 2015 - 11:06
Отлично! На фоне нашего форума это прекрасноя знаю только основы
И так...
Как и любое другое расширение, доставки это элемент.
Хранятся эти элементы тут media\zoo\applications\jbuniversal\cart-elements\shipping
В качестве быстрого старта элемента можно взять courier
Допустим наш элемент будет вычислять цены для отправки в другие города - ключевое слово будет Cities
Переименовываем файлы и класс
в cities.xml можно добавить свои опции (они появятся в настройках в админке)
например текстовое поле будет выглядеть так
<param name="price" type="text" default="0" label="Price" />В любом месте элемента доступ к конфигу можно получить так
$this->config->get('price', 'значение по умолчанию');
Методы
Главная и самая важная функция тут - getRate()
Единственная её цель - вернуть цену доставки на основе текущих параметров. Т.к на сайте цены могут быть в разных валютах, то мы используем специальный объект JBCartValue, который полностью скрывает всю логику конверации валюты, форматы вывjда, JS и многое другое.
Чтобы получить объект, который хранит 100 рублей, нужно сделать так
$price = $this->_order->val('100 rub'); $price = $this->_order->val('100'); // 100 единиц в валюте по умолчанию
loadAssets отвечает за подключени JS и CSS. По умолчанию содержимое из папки assets полключится самостоятельно. Т.е просто создаем файл
assets/less/cities.less и он сам подключится, скомпилируется в CSS, создаст кеш, минимизируется и прочие скучные вещи...
validateSubmission - функция которая проверяет информацию из формы заказы и если что-то не так, то кидаем исключение
throw new JBCartElementShippingException('Нежданчик, что-то пошло не так...');на выходе функции ассоциативный массив. Именно он сохранится в базу данных
Т.е если сделать так
public function validateSubmission($value, $params) { // проверяем входящие данные $myField =$value->get('my-field'); if (!$myField) { throw new JBCartElementShippingException('Там пусто, а ты братан - русский!'); } return array( 'my-field' => $myField ); }
Потом можно в getRate() использовать эти данные, и им уже можно верить т.к они уже провалидированы
$this->get('my-field')
Шаблоны
submission.php - то что будет показано в форме заказа
Имя для любых инпутов генерируется так $this->getControlName('my-field')
edit.php - то что выведется в панели управления
echo $this->get('my-field');
Доступ к заказу можно получить так $order = $this->getOrder()
В итоге для простейшего элемента доставки вам нужно написать свою логику работы в getRate, перед return сделать число объектом. Все остальное сделает JBZoo Go to the full post