Новости 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 Гость просматривают эту тему.
  • 15 Ответов
  • 1389 Просмотров
*

gm35

  • Осваиваюсь на форуме
  • 25
  • 0 / 0
PHP
« : 09.01.2018, 05:06:06 »
Здравствуйте подскажите вот  есть у меня код
Код
		protected function getTicketsd($id) {
$db = JFactory::getDbo();
$query = $db->getQuery(true);
$array = array();

$query->clear()
->select($db->qn('id'))->select($db->qn('seats'))
->from($db->qn('#__rseventspro_tickets'))
->where($db->qn('ide').' = '.(int) $id);

$db->setQuery($query,0,3);
$tickets = $db->loadObjectList();

if (!empty($tickets)) {
foreach ($tickets as $ticket) {
$query->clear()
->select('SUM(ut.quantity)')
->from($db->qn('#__rseventspro_user_tickets','ut'))
->join('left', $db->qn('#__rseventspro_users','u').' ON '.$db->qn('u.id').' = '.$db->qn('ut.ids'))
->where($db->qn('u.state').' IN (0,1)')
->where($db->qn('ut.idt').' = '.(int) $ticket->id);

$db->setQuery($query);
$purchased = $db->loadResult();

if ($ticket->seats == 0) {
$array[] = JText::_('COM_RSEVENTSPRO_GLOBAL_UNLIMITED').' '.'<em>'.$ticket->name.'</em>';
} else {
$available = $ticket->seats - $purchased;
if ($available <= 0) continue;
$array[] = $available;
}
}
}

return !empty($array)? implode($array) : '';
}
Который из базы берет число в строчке seats например 1. У меня seats сейчас например 3 шт. Выводится сейчас 111. Но при бронировании пользователем места он убирает одно число, то есть как я понял идет сравнение и выводит 11 . Подскажите как мне сложить эти цифры чтобы в результате получить например 3 ? Раньше между цифрами были запятые я их убрал а вот как сложить теперь эти цифры не знаю. Пробывал
Код
$array[] = $available;
заменить на
Код
$array[] = $available + $available;
Так выводит  333 заместо просто 3.
« Последнее редактирование: 09.01.2018, 05:29:16 от gm35 »
*

passer

  • Завсегдатай
  • 1013
  • 75 / 3
Re: PHP
« Ответ #1 : 09.01.2018, 09:45:05 »
Код
return !empty($array)? array_sum($array) : '';
*

dmitry_stas

  • Легенда
  • 13151
  • 1234 / 8
Re: PHP
« Ответ #2 : 09.01.2018, 12:13:54 »
нельзя же просто суммировать, судя по коду в $array может быть текст
Код
$array[] = JText::_('COM_RSEVENTSPRO_GLOBAL_UNLIMITED').' '.'<em>'.$ticket->name.'</em>';

имхо там надо подсчета логику поменять, а то все смешалось, люди, кони...

и вероятно запятую тоже нельзя убирать, видимо было раньше так
Код
return !empty($array)? implode(',', $array) : '';
и я так думаю это было совсем не зря...
« Последнее редактирование: 09.01.2018, 12:17:06 от dmitry_stas »
Тут дарят бакс просто за регистрацию! Успей получить!
Все советы на форуме раздаю бесплатно, то есть даром. Индивидуально бесплатно консультирую только по вопросам стоимости индивидуальных консультаций
*

gm35

  • Осваиваюсь на форуме
  • 25
  • 0 / 0
Re: PHP
« Ответ #3 : 09.01.2018, 14:14:14 »
Спасибо огромное!
*

gm35

  • Осваиваюсь на форуме
  • 25
  • 0 / 0
Re: PHP
« Ответ #4 : 09.01.2018, 14:14:54 »
Код
return !empty($array)? array_sum($array) : '';
Спасибо огромное! Все  получилось))))
*

dmitry_stas

  • Легенда
  • 13151
  • 1234 / 8
Re: PHP
« Ответ #5 : 09.01.2018, 15:25:20 »
Все  получилось
я так откровенно говоря не думаю :)
Тут дарят бакс просто за регистрацию! Успей получить!
Все советы на форуме раздаю бесплатно, то есть даром. Индивидуально бесплатно консультирую только по вопросам стоимости индивидуальных консультаций
*

passer

  • Завсегдатай
  • 1013
  • 75 / 3
Re: PHP
« Ответ #6 : 09.01.2018, 15:35:58 »
Угу. Сообщение о пустом результате выводиться не будет. Надо обработать более корректно.
*

gm35

  • Осваиваюсь на форуме
  • 25
  • 0 / 0
Re: PHP
« Ответ #7 : 10.01.2018, 02:02:15 »
Угу. Сообщение о пустом результате выводиться не будет. Надо обработать более корректно.
А я сделал так    
Код
return !empty($array)? array_sum($array) : 'Ни одного';
И теперь если не чего не осталось то пишет "Ни одного"
*

gm35

  • Осваиваюсь на форуме
  • 25
  • 0 / 0
Re: PHP
« Ответ #8 : 10.01.2018, 02:13:31 »
Угу. Сообщение о пустом результате выводиться не будет. Надо обработать более корректно.
Еще не подскажите, данное сообщение выводится в админке, хочу вывести его на сайт в админке у меня выводится так
Код
<?php if ($availabletickets11   = $this->getTicketsd($row->id)) { ?>
<p>Осталось билетов: <?php echo $availabletickets11 ?></p>
<?php } ?>
А если я вставляю в php файл этого же компонента но в файл который выводит данные на сайте вставляю данный код указанный выше,  прописываю код в другом файле 
Код
		public function getTicketsd($id) {
$db = JFactory::getDbo();
$query = $db->getQuery(true);
$array = array();

$query->clear()
->select($db->qn('id'))->select($db->qn('seats'))
->from($db->qn('#__rseventspro_tickets'))
->where($db->qn('ide').' = '.(int) $id);

$db->setQuery($query,0,3);
$tickets = $db->loadObjectList();

if (!empty($tickets)) {
foreach ($tickets as $ticket) {
$query->clear()
->select('SUM(ut.quantity)')
->from($db->qn('#__rseventspro_user_tickets','ut'))
->join('left', $db->qn('#__rseventspro_users','u').' ON '.$db->qn('u.id').' = '.$db->qn('ut.ids'))
->where($db->qn('u.state').' IN (0,1)')
->where($db->qn('ut.idt').' = '.(int) $ticket->id);

$db->setQuery($query);
$purchased = $db->loadResult();

if ($ticket->seats == 0) {
$array[] = JText::_('COM_RSEVENTSPRO_GLOBAL_UNLIMITED').' '.'<em>'.$ticket->name.'</em>';
} else {
$available = $ticket->seats - $purchased;
if ($available <= 0) continue;
$array[] = $available;
}
}
}

return !empty($array)? array_sum($array) : 'Ни одного';
}
То результат всегда выводит 'Ни одного' то есть не меняются данные.
*

gm35

  • Осваиваюсь на форуме
  • 25
  • 0 / 0
Re: PHP
« Ответ #9 : 25.01.2018, 00:10:21 »
Кто нибудь знает? Почему этот же код не работает в компонентах не админ
*

beliyadm

  • Легенда
  • 9758
  • 1665 / 66
  • Севастополь, Россия
Re: PHP
« Ответ #10 : 25.01.2018, 00:17:14 »
dmitry_stas - а неправильней ли делать SUM(seats) на уровне запроса из базы? Так понимаю что запрос должен отдать количество мест, вот пусть он и считает, зачем ты предлагаешь обрабатывать уже PHP массив на выходе?
Все истины, которые я хочу вам изложить, — бесстыдная ложь. Сделать всё хорошо
TLG: @Beliyadm
*

gm35

  • Осваиваюсь на форуме
  • 25
  • 0 / 0
Re: PHP
« Ответ #11 : 25.01.2018, 00:20:28 »
dmitry_stas - а неправильней ли делать SUM(seats) на уровне запроса из базы? Так понимаю что запрос должен отдать количество мест, вот пусть он и считает, зачем ты предлагаешь обрабатывать уже PHP массив на выходе?
Так в админке в этом компоненте все считает, а на сайте при выводе этого же кода не хочет выводить хоть какой результат.
*

beliyadm

  • Легенда
  • 9758
  • 1665 / 66
  • Севастополь, Россия
Re: PHP
« Ответ #12 : 25.01.2018, 00:22:11 »
Ну так видимо в админке в SQL запросе и отрабатывает sum(seats), но вы то предлагаете разбирать ваш кастомный код, потому и спросил - зачем сумму искать в выходящем массиве но не сразу получать из запроса одной строкой
Все истины, которые я хочу вам изложить, — бесстыдная ложь. Сделать всё хорошо
TLG: @Beliyadm
*

gm35

  • Осваиваюсь на форуме
  • 25
  • 0 / 0
Re: PHP
« Ответ #13 : 25.01.2018, 00:33:06 »
Ну так видимо в админке в SQL запросе и отрабатывает sum(seats), но вы то предлагаете разбирать ваш кастомный код, потому и спросил - зачем сумму искать в выходящем массиве но не сразу получать из запроса одной строкой
Понял теперь, значит надо напрямую. Только вот он запрашивает id определенного события потом seats потом tickets и user_tickets,  то есть не из одного места данные берет. Там в этом компоненте есть билет или билеты в этих белетах есть места. Но при бронировании он не вычитает из этих мест. А получается из определенного события со своим id берет билет, берет места складывает их и вычитает из них другой запрос какой пользователь забронировал место. По этому я подумал что тут масло маслено и не стал изменять код основательно а задал вопрос с суммой этих билетов тут. 
*

beliyadm

  • Легенда
  • 9758
  • 1665 / 66
  • Севастополь, Россия
Re: PHP
« Ответ #14 : 25.01.2018, 00:37:30 »
gm35 мне трудно дать готовый ответ не видя и не зная базы, но с подобными вещами хорошо знаком.
Нам нужно сделать SELECT SUM(что-то) FROM и вот тут дальше пошли либо цеплять джойнами нужные таблицы либо в WHERE можно еще подзапросами делать.
В любом случае на мой взгляд подобную вещь (количество свободных мест на событие с учетом уже выкупленных билетов) надо делать именно на уровне MySQL, а не вытягивать кучу данных в запросе и потом на PHP их обрабатывать - вот именно это получается масло масляное.

Дадите дизайн ваших таблиц с комментариями по полям и что в итоге нужно получить - дам конкретный запрос на результат без проблем.

Но хотя костыли тоже вещь, если вопрос решен - это главное, красота кода уже потом. Ну а оптимизация скорости вообще редко важно экономить миллисекунды.
Все истины, которые я хочу вам изложить, — бесстыдная ложь. Сделать всё хорошо
TLG: @Beliyadm
*

dmitry_stas

  • Легенда
  • 13151
  • 1234 / 8
Re: PHP
« Ответ #15 : 25.01.2018, 01:33:07 »
dmitry_stas - а неправильней ли делать SUM(seats) на уровне запроса из базы? Так понимаю что запрос должен отдать количество мест, вот пусть он и считает, зачем ты предлагаешь обрабатывать уже PHP массив на выходе?
та я вроде такого не предлагал :) наоборот уточнил что нельзя суммировать, потому что в массиве там не только числа.
Тут дарят бакс просто за регистрацию! Успей получить!
Все советы на форуме раздаю бесплатно, то есть даром. Индивидуально бесплатно консультирую только по вопросам стоимости индивидуальных консультаций
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться