Новости Joomla

Вышли релизы безопасности Joomla 6.1.3 и Joomla 5.4.8

Релиз безопасности Joomla 6.1.3 и Joomla 5.4.8

Проект Joomla! рад сообщить о выходе Joomla 6.1.3 и Joomla 5.4.8. Это релизы безопасности и исправления ошибок для серий 5.x и 6.x.

👩‍💻 WT Otpravkapochtaru - библиотека сервиса Отправка Почты России для Joomla-разработчиков.

👩‍💻 WT Otpravkapochtaru - библиотека сервиса Отправка Почты России для Joomla-разработчиков.

Joomla 5+ пакет для интеграции с API Почты России: нормализация данных, расчёт доставки, создание отправлений, партии, документы, возвраты, поиск отделений, справочники и SOAP-отслеживание.

v.3.0.0. Что нового?
Это дальнейшее развитие ранее закрытой Joomla-библиотеки для работы с API сервиса Отправка (для бизнеса) Почты России. Поэтому версия не 1.0.0, а 3.0.0.

Сейчас эта библиотека ушла от собственных реализаций и стала Joomla-обёрткой известного PHP SDK от Lapay Group.

Возможности библиотеки.
- получение настроек аккаунта, точек сдачи и текущего остатка запросов к API;
- нормализация адресов, ФИО и телефонов перед созданием отправления;
- расчёт тарифа и срока доставки;
- создание, поиск, изменение, удаление и возврат заказов в состояние «Новые»;
- проверка надёжности получателя;
- создание партий, просмотр партий и заказов внутри партии;
- генерация пакета печатных документов и формы Ф103;
- создание, изменение и удаление возвратных отправлений;
- поиск отделений по индексу, адресу и координатам, получение сервисов отделения;
- локальный список стран;
- SOAP-отслеживание операций по РПО и работа с билетами пакетного трекинга.

👩‍💻 Joomla-возможности.
В пакете библиотеки WT Otpravkapochtaru есть поля Joomla Form для расширений. Они позволяют работать в интерфейсе Joomla с некоторыми типами данных, получаемых по API из вашего личного кабинета в ЛК Почты России для бизнеса.
На данный момент в библиотеке доступны 3 поля списков, которые отображают доступные в аккаунте ОПС, типы и категории отправлений.
Поддерживаются зависимые списки: значение одного поля обновляется при изменении другого.

Системные требования.
Системные требования в основном связаны с системными требованиями апстрима библиотеки - LapayGroup PHP SDK.
- Joomla 5+
- PHP 8.3+
- Расширения PHP:
-- ext-mbstring
-- ext-simplexml
-- ext-soap (опционально, для трекинга)
-- ext-zip

Ссылки:
- Страница расширения
- GitHub библиотеки и документация

@joomlafeed

0 Пользователей и 1 Гость просматривают эту тему.
  • 21 Ответов
  • 4348 Просмотров
*

AlienAntFarm

  • Осваиваюсь на форуме
  • 42
  • 0 / 1
  • ...
Всем здрасте.

Делаю магазин на жумшопинг 3.2.7, жумла 1.7.3 и решил заняться написанием доставки Почтой России.
Нужна кой какая помощь.

Если кому интересно, вот как считает почта:

1. Узнать тарифную зону покупателя.

Берем первые три цифры индекса адресата и смотрим его тарифную зону относительно города отправки. В каждом городе свой набор тарифных зон на всю Россию(вот так веселье!). Узнать тарифные зоны от вашего города можно на почте. Всего тарифных зон 5 шт.

т.е это таблица типа:

Маска  Регион                       Зона
303      ОРЛОВСКАЯ ОБЛАСТЬ    3
305      КУРСКАЯ ОБЛАСТЬ        3
.....итд

2. Смотрим вес посылки.

Расчет стоимости отправки зависит от веса. Минималка 0.5 кг. За каждые последующие 0.5 кг почта начисляет еще денежку.

Пример:

Посылка обыкновенная 2.5 кг из Новосибирска в Белгород, индекс 308034.
Тарифная зона по маске "308" - 3
По 3-ей зоне базовый тариф - 127.1 руб, последующий тариф 16.2 руб

Получаем
на первые 0.5 кг - 127.1 руб, на последующие 2 кг - 4 раза по 16.2 руб, в сумме =   191,9 руб.

Есть еще наложенный платеж, но об это позже.

И так. В моем магазине по адресу http://yamoloda.ru/ оформление покупки происходит в три шага:

1. Заполнение данных
2. Выбор способа оплаты
3. Подтверждение заказа.

На странице "Выбор способа оплаты", рядом со способом оплаты по задумке должна появляться (чудесным образом) цена доставки.
Если я все верно понимаю, у меня за работу этой страницы отвечают два файла:
1. /components/com_jshopping/controllers/checkout.php строка 186 - function step3
2. /components/com_jshopping/templates/default/checkout/payments.php

Соответственно всю работу нужно производить в checkout.php строка 186 - function step3 а вывод в payments.php

И вот собственно первый вопрос: как в checkout.php function step3 получить индекс покупателя?   
*

turbolamer

  • Захожу иногда
  • 249
  • 12 / 0
Хорошее дело вы затеяли  *DRINK*
Когда закончите, выложите пожалуйста для всех.

А вопрос наверное надо адресовать к victorantoniak.
*

AlienAntFarm

  • Осваиваюсь на форуме
  • 42
  • 0 / 1
  • ...
Спасибо, посмотрю...
*

AlienAntFarm

  • Осваиваюсь на форуме
  • 42
  • 0 / 1
  • ...
Я поглядел плагин и решил таки сделать сам.

Вот что есть на данном этапе:

На странице "Выбор способа оплаты", рядом со способом оплаты появляться цена и срок доставки.

Как это сделано:

Для начала создаем 2 таблицы в pma

1. _jshopping_index - таблица индексов с полями:

ind тип int(3) маска индекса из 3-х цифр
oblast тип varchar(255) - наименование области
tarif тип int(1) - тарифная зона
sroki тип int(2) - срок доставки

2. _jshopping_tarifi - таблица для тарифов c полями:

zona тип int(1) - номер тарифной зоны
osnovnoi тип float - основной тариф на 0.5 кг   
dobavochniy тип float - добавочный тариф за каждые последующие 0.5 кг.

действующие тарифы -
zona    osnovnoi    dobavochniy
1          119.5     10.1
2          121.1     11.2
3          127.1     16.2
4          170.3     22.8
5          192        26.2

Дальше лезем в /components/com_jshopping/controllers/checkout.php строка 241 - function step3
после:
Код
            $paym[$i]->name = $pm->name;
            $paym[$i]->payment_id = $pm->payment_id;
            $paym[$i]->payment_class = $pm->payment_class;
            $paym[$i]->payment_description = $pm->description;
            $paym[$i]->price_type = $pm->price_type;

Добавляем:

Код
//dostavka			
$index = substr($adv_user->zip, 0, 3); //получаем индекс, и отрубаем последние три цифры
$db=& JFactory::getDBO(); //соеденяемся с бд
$q='SELECT ind,tarif,sroki FROM `#__jshopping_index` WHERE ind='.$index.''; //находим в таблице нужную область по маске
$db->setQuery($q);
$row=$db->loadAssoc();//записываем полученное в массив

if (empty($row["tarif"])) { //проверяем - есть ли такая область в списке, если области в списке нету, то:
$row["tarif"]=3; // тарифная зона, по умолчанию - 3
$row["sroki"]=5; // срок доставки, по умолчанию - 6
}

$db1=& JFactory::getDBO(); //соеденяемся с бд
$q1='SELECT osnovnoi,dobavochniy FROM `#__jshopping_tarifi` WHERE zona='.$row["tarif"].''; //находим в таблице нужный тариф
$db1->setQuery($q1);
$row1=$db1->loadAssoc();
$tar=ceil($cart->getWeightProducts()/0.5); // смотрим вес продукта - во сколько раз он больше чем 0.5 кг
$dost=$row1['osnovnoi']+($tar-1)*$row1['dobavochniy'];//если больше 0.5 то прибавляться добавочный тариф

if ($pm->payment_id == 13 or $pm->payment_id == 14){//если способ доставки "по счету" или "квитанцией" то:
$delivery=round($dost); // такая сумма доставки, без копеек
}

if ($pm->payment_id == 12){//если способ доставки "наложенный платеж" то:
$nal=$dost+(($cart->getSum(1, 1, 1)+$dost)/100)*4;//считаем наложенный платеж
$delivery=round($nal);
}
//передаем данные о сумме доставки и сроках в массив:
$paym[$i]->dostavka = $delivery;
$paym[$i]->srok = $row["sroki"];
//dostavka

Теперь идем в /components/com_jshopping/templates/default/checkout/payments.php и вставляем куданибудь вывод:

Код
			if ($payment->payment_id == 13 or $payment->payment_id == 14 or $payment->payment_id == 12){
print _JSHOP_CHECKOUT_SHIPPING;
print $payment->dostavka;
print $payment->srok;
}

У меня все работает.

Осталось сделать так, что бы эти данные передавались дальше - на страницу "Подтверждение заказа", в счет и записывались в заказ в админ панели.

В связи с этим вопрос - как в /components/com_jshopping/controllers/checkout.php function step3 или function step3save передать сумму доставки в переменную  summ_delivery?
*

turbolamer

  • Захожу иногда
  • 249
  • 12 / 0
Вот это круто.
Жаль что разработчики js вряд ли помогут, т.к. есть платные дополнения продажам которых такое решение может помешать.
*

AlienAntFarm

  • Осваиваюсь на форуме
  • 42
  • 0 / 1
  • ...
Ну я особенно помощи, честно говоря не жду...  8)
Спрашиваю я так - сам спросил - сам ответил.

А что касается расширения от разработчика тут есть несколько моментов:

1. Я хочу избежать шага "Выбор способа доставки"

2. Я так понял что в этом расширении на каждый индекс нужно писать что то вроде:
от 0.5 кг до 1кг - столько то рублей
от 1.5 кг до 2кг - столько то рублей
от 2.5 кг до 3кг - столько то рублей
итд...
это не очень то удобно.

3. Сроки доставки?

4. Надо бы что бы печатались документы для почты там по 4 бумажки на каждую посылку.


А если бы плагин мне подходил - мне бы не жалко было 15 евро...
*

AlienAntFarm

  • Осваиваюсь на форуме
  • 42
  • 0 / 1
  • ...
что то я заблудился.

я так понимаю есть 2 варианта:

1. Вычисляем доставку 1 раз на странице "Способ оплаты" потом передаем её дальше.
2. Вычисляем доставку на каждой странице(Способ оплаты, Подтверждение заказа, + в счет, + надо записать в заказ в админ панели).

Пока удалось только вычислять на странице "Способ оплаты".

Сделать 1 вариант мне не хватает знаний и опыта.

По второму варианту вопрос такой : как на странице "Подтверждение заказа" это файлы   
/components/com_jshopping/templates/default/cart/checkout.php  и /components/com_jshopping/controllers/checkout.php строка 610 - function step5
получить id способа оплаты и индекс покупателя?

Если кто нибудь знает как сделать подскажите, плз.
*

Arkadiy

  • Гуру
  • 5317
  • 463 / 2
  • Крепитесь, други.
индекс покупателя посмотри в adv_user где-нибудь поблизости.
*

AlienAntFarm

  • Осваиваюсь на форуме
  • 42
  • 0 / 1
  • ...
Спасибо, решение найдено. Чуть позже выложу.
« Последнее редактирование: 12.03.2012, 12:17:13 от AlienAntFarm »
*

AlienAntFarm

  • Осваиваюсь на форуме
  • 42
  • 0 / 1
  • ...
По горячим следам выкладываю решение для страницы "Подтверждение заказа"

в файле /components/com_jshopping/templates/default/cart/checkout.php строка 691 после
Код
        $lang = &JSFactory::getLang();
        $name = $lang->get("name");
        $sh_method->name = $sh_method->$name;
$view->assign('sh_method', $sh_method );
$view->assign('payment_name', $pm_method->$name);

вставляем

Код
		$view->assign('payment_method_id', $payment_method_id);
$view->assign('ves', $cart->getWeightProducts());
$view->assign('sum', $cart->getSum(1, 1, 1));

в /components/com_jshopping/templates/default/checkout/previewfinish.php вставляем куданибудь

Код
  <tr>
    <td class = "name">
       <?php print _JSHOP_SHIPPING_PRICE ?>
    </td>
    <td class = "value">
<?php
  $index = substr($this->delivery_info['zip'], 0, 3);
$db=& JFactory::getDBO();
$q='SELECT ind,tarif,sroki FROM `#__jshopping_index` WHERE ind='.$index.'';
$db->setQuery($q);
$row=$db->loadAssoc();

if (empty($row["tarif"])) {
$row["tarif"]=3;
$row["sroki"]=5;
}

$db1=& JFactory::getDBO();
$q1='SELECT osnovnoi,dobavochniy FROM `#__jshopping_tarifi` WHERE zona='.$row["tarif"].'';
$db1->setQuery($q1);
$row1=$db1->loadAssoc();
$tar=ceil($this->ves/0.5);
$dost=$row1['osnovnoi']+($tar-1)*$row1['dobavochniy'];

if ($this->payment_method_id == 13 or $this->payment_method_id == 14){
$delivery=round($dost);
print formatprice($delivery);
}

if ($this->payment_method_id == 12){
$nal=$dost+(($this->sum+$dost)/100)*4;
$delivery=round($nal);
print formatprice($delivery);
}
?>
    </td>
  </tr>
  <tr>
    <td>
  <?php print _JSHOP_ENDTOTAL?>
    </td>
    <td class = "value">
<?php
$this->sum=$this->sum+$delivery;
print formatprice($this->sum);
?>
</td>
  </tr>

у меня все работает.

Следующий этап - прописать тоже, в приходящем письме покупателю и в счете.
*

AlienAntFarm

  • Осваиваюсь на форуме
  • 42
  • 0 / 1
  • ...
чуть не забыл - если кто соберется делать - этот способ предполагает что у каждого продукта задан вес.
+ расчет должен вестись с учетом веса упаковки.
Для того что бы задать вес упаковки идем в /components/com_jshopping/models/cart.php строка 668 и после
Код
    function getWeightProducts() {
        $weight_sum = 0;
        foreach ($this->products as $prod) {
            $weight_sum += $prod['weight'] * $prod['quantity'];
}

вставляем

Код
//moi pravki
switch ($weight_sum)
{
case $weight_sum < 1;//если вес продуктов меньше 1 кг то
            $weight_sum = $weight_sum + 0.3; // вес упаковки около 300гр
         break;
case $weight_sum < 2; // если меньше 2 кг то
            $weight_sum = $weight_sum + 0.6; // + 600гр
         break;
case $weight_sum < 3; // итд
            $weight_sum = $weight_sum + 0.9;
         break;
case $weight_sum < 4;
            $weight_sum = $weight_sum + 1.2;
         break;
case $weight_sum < 5;
            $weight_sum = $weight_sum + 1.5;
         break;
case $weight_sum < 6;
         break;
default:
            $weight_sum = 0;
   break;
        }
//moi pravki

Как то так. ;D
Кстати если будете делать, рекомендую все вставки комментировать, а то потом не найдете.
Я например везде ставлю //moi pravki.
« Последнее редактирование: 12.03.2012, 14:27:13 от AlienAntFarm »
*

turbolamer

  • Захожу иногда
  • 249
  • 12 / 0
То есть это решение для магазинов, у которых доставка только Почтой России?
*

Arkadiy

  • Гуру
  • 5317
  • 463 / 2
  • Крепитесь, други.
Не, ребята, вы не в ту сторону двигаетесь, смотеля на вас, сотрел, думал скоро прозреете, но видимо нет. Надо двигаться в сторону плагинов, а еще гораздо лучше аддонов, посмотрите по крайней мере мой EMS и сделайте на подобие. Хаки никому не нужны когда можно сделать правильно, хотя ваша работа не пропала даром, просто ее надо подобающим способом оформить.
*

turbolamer

  • Захожу иногда
  • 249
  • 12 / 0
Не, ребята, вы не в ту сторону двигаетесь, смотеля на вас, сотрел, думал скоро прозреете, но видимо нет. Надо двигаться в сторону плагинов, а еще гораздо лучше аддонов, посмотрите по крайней мере мой EMS и сделайте на подобие. Хаки никому не нужны когда можно сделать правильно, хотя ваша работа не пропала даром, просто ее надо подобающим способом оформить.
Придется ждать пока Вам понадобится подобный аддон или плагин))
*

AlienAntFarm

  • Осваиваюсь на форуме
  • 42
  • 0 / 1
  • ...
Да, конкретно этот способ только для тех магазинов у которых один способ доставки - почта россии. Но его не сложно допилить и таким образом что бы это были 2 пункта при выборе доставки - "почта россии" и "почта россии наложенный платеж", например. А что касается плагина я бы с радостью сделал но я перво наперво хочу сделать что бы работало у меня в магазине. Поэтому я постараюсь закончить этот способ, а потом если будет время буду смотреть в сторону плагина - но это врядтли, мне кажется плагин это сложно и долго... Много очень нюансов надо учесть. Например надо еще вставить проверку страны - если Россия то все это считается, клиенту приходит на почту готовый счет итд. А если другая страна то ничего не считается а на почту приходит - "мы свяжемся с вами после расчета доставки". + У меня в магазине прописаны всякие скидки надо чтобы считалось с их учетом и т.д.
*

turbolamer

  • Захожу иногда
  • 249
  • 12 / 0
AlienAntFarm
Подскажите пожалуйста, откуда Вы взяли разбивку тарифных зон по по почтовым индексам?
*

Arkadiy

  • Гуру
  • 5317
  • 463 / 2
  • Крепитесь, други.
Все данные можно взять из виртовской почты России.
*

turbolamer

  • Захожу иногда
  • 249
  • 12 / 0
*

AlienAntFarm

  • Осваиваюсь на форуме
  • 42
  • 0 / 1
  • ...
Я взял их в почтовом отделении)
*

AlienAntFarm

  • Осваиваюсь на форуме
  • 42
  • 0 / 1
  • ...
Если кому нужны тарифные зоны для Новосибирска, могу поделиться.
*

koshsh

  • Захожу иногда
  • 278
  • 8 / 0
Если кому нужны тарифные зоны для Новосибирска, могу поделиться.
Предложение еще в силе?
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Модуль доставки Сдек или Яндекс

Автор Preview

Ответов: 9
Просмотров: 32232
Последний ответ 11.09.2025, 12:00:32
от kit2m2
Расчет стоимости доставки в JoomShopping 3.12.3

Автор teanin

Ответов: 17
Просмотров: 13930
Последний ответ 23.04.2023, 11:55:30
от tigra-uki
Плагины доставки для Польши

Автор Alex_gs

Ответов: 1
Просмотров: 3385
Последний ответ 21.03.2023, 14:36:37
от kit2m2
Стоимость заказа без стоимости доставки

Автор Alex_gs

Ответов: 3
Просмотров: 4084
Последний ответ 17.01.2023, 15:04:06
от kit2m2
Аддон доставки Почта России по API

Автор sergeytolkachyov

Ответов: 4
Просмотров: 4727
Последний ответ 22.06.2022, 09:54:30
от sergeytolkachyov