Jump to content


Photo
* * * * * 1 votes

Доставка, как реализовать?


Best Answer SmetDenis , 21 April 2015 - 11:06

я знаю только основы

Отлично! На фоне нашего форума это прекрасно :)

И так...
Как и любое другое расширение, доставки это элемент.
Хранятся эти элементы тут media\zoo\applications\jbuniversal\cart-elements\shipping
 
В качестве быстрого старта элемента можно взять courier 
Допустим наш элемент будет вычислять цены для отправки в другие города - ключевое слово будет Cities
 
Переименовываем файлы и класс
tr0i_200x0.png
 
в 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


  • This topic is locked This topic is locked
6 replies to this topic

#1 ilyaantonov89

ilyaantonov89
  • JBZoo User (rus)
  • User rate: 0.9
  • posts: 204
  • topics: 50

Posted 19 April 2015 - 09:55

Необходим элемент доставки который учитывает определенные города (вводить самому), и определенные суммы доставки в зависимости от веса (так же вводить самому), как реализовать такое ?


  • 0

#2 SmetDenis

SmetDenis
  • Administrators
  • User rate: 139.4
  • posts: 16232
  • topics: 200

Posted 21 April 2015 - 09:37

Я могу вам рассказать принцип работы элемента, но это имеет смысл только если вы знаете основы PHP.
  • 0
JBZoo v4.0 и новый чудный мир Open Source GPL
Отключайте проверку лицензий как можно скорее!



— Есть два типа людей: Кто еще не делает бекапы и кто уже делает бекапы.


#3 ilyaantonov89

ilyaantonov89
  • Topic Starter
  • JBZoo User (rus)
  • User rate: 0.9
  • posts: 204
  • topics: 50

Posted 21 April 2015 - 10:28

Буду благодарен, я знаю только основы (поверхностно), но есть программист который Вас поймет.


  • 0

#4 SmetDenis

SmetDenis
  • Administrators
  • User rate: 139.4
  • posts: 16232
  • topics: 200

Posted 21 April 2015 - 11:06   Best Answer

я знаю только основы

Отлично! На фоне нашего форума это прекрасно :)

И так...
Как и любое другое расширение, доставки это элемент.
Хранятся эти элементы тут media\zoo\applications\jbuniversal\cart-elements\shipping
 
В качестве быстрого старта элемента можно взять courier 
Допустим наш элемент будет вычислять цены для отправки в другие города - ключевое слово будет Cities
 
Переименовываем файлы и класс
tr0i_200x0.png
 
в 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
  • 2
JBZoo v4.0 и новый чудный мир Open Source GPL
Отключайте проверку лицензий как можно скорее!



— Есть два типа людей: Кто еще не делает бекапы и кто уже делает бекапы.


#5 ilyaantonov89

ilyaantonov89
  • Topic Starter
  • JBZoo User (rus)
  • User rate: 0.9
  • posts: 204
  • topics: 50

Posted 06 May 2015 - 13:48

Быстрый старт не удался, внес изменения согласно вышеописанному алгоритму, но в панели управления так ничего не появилось.

 

Attached Thumbnails

  • cities-1.jpg
  • cities-2.jpg
  • cities-3.jpg

  • 0

#6 ilyaantonov89

ilyaantonov89
  • Topic Starter
  • JBZoo User (rus)
  • User rate: 0.9
  • posts: 204
  • topics: 50

Posted 07 May 2015 - 11:09

Быстрый старт не удался, внес изменения согласно вышеописанному алгоритму, но в панели управления так ничего не появилось.

После обновления JBZoo проблема отпала.


  • 0

#7 Kvaant

Kvaant
  • JBZoo User (rus)
  • User rate: 0
  • posts: 69
  • topics: 12

Posted 05 August 2015 - 13:18

ilyaantonov89, удалось ли реализовать данный функционал? Про города особенно интересует. В зависимости от города - своя стоимость.


  • 0




Click to return to top of page in style!