Новости Joomla

👩‍💻 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 Гость просматривают эту тему.
  • 22 Ответов
  • 3094 Просмотров
*

xchesh

  • Захожу иногда
  • 277
  • 10 / 1
Хочу сохранять результаты чекнутых чекбоксов в таблицу совместимости(в модальном окне).
Вызываю плагином модальное окно, option=com_region&view=modal&layout=modal_table&&id=id_текущего_элемента
Шаблон начинается как всегда
Код
<form action="/joomlacms/administrator/index.php?option=com_region&amp;view=modal&amp;layout=modal_table&amp;tmpl=component" method="post" name="adminForm" id="adminForm">
Где мне обрабатывать клик по кнопке
Код
<button id="ready" onclick="if (document.adminForm.boxchecked.value==0){alert('Пожалуйста, выбирите хотя бы один регион из списка');}else{ Joomla.submitbutton('modal_table.checkin')};window.parent.SqueezeBox.close();"><? echo JText::_('COM_REGION_INSERT');?></button>
Я вот никак не могу догнать, неужели нужно в контроллере?
« Последнее редактирование: 07.12.2012, 12:30:04 от xchesh »
*

xchesh

  • Захожу иногда
  • 277
  • 10 / 1
Re: Ненавязчивая идея сохранения
« Ответ #1 : 07.12.2012, 12:36:12 »
Неужели никто не знает как переопределить действия кнопки?
*

prometheus

  • Захожу иногда
  • 84
  • 7 / 0
Re: Ненавязчивая идея сохранения
« Ответ #2 : 07.12.2012, 13:28:52 »
Если нужно подобие AJAX то да нужно вызывать контроллер по нажатии чекбокса.
А действие переопределяется javascript
*

xchesh

  • Захожу иногда
  • 277
  • 10 / 1
Re: Ненавязчивая идея сохранения
« Ответ #3 : 07.12.2012, 13:47:44 »
Если нужно подобие AJAX то да нужно вызывать контроллер по нажатии чекбокса.
А действие переопределяется javascript
найн, не то. Мне не нужно AJAX.
Думаю что нужно сделать полноценный дополнительный вид на основе страницы редактирования конкрентного итема.
*

xchesh

  • Захожу иногда
  • 277
  • 10 / 1
Re: Ненавязчивая идея сохранения
« Ответ #4 : 07.12.2012, 17:24:43 »
Наверное уточню свою задачу.
Нужен вид-модель-контроллер.
Который открывается по запросу index.php?option=com_region&view=modal&layout=modal_table&id=10
Если итем из таблицы #__news с id_news=10 существует, то загрузить его параметр id_region, если нет, то создать новый.
Таблица соответствий #__news имеет в структуре только 2 столбца id_news и id_region.
Кнопка "Сохранить" должна закрывать страницу index.php?option=com_region&view=modal&layout=modal_table&id=10 и сохранять результат в соответствующую строку в Бд.
Казалось бы просто, взять да сделать вид, аналогичный странице редактирования в компоненте, но блин, почему-то так просто это не работает)
М.б. уже пятницО и нужно выключить мозг?
*

xchesh

  • Захожу иногда
  • 277
  • 10 / 1
Re: Ненавязчивая идея сохранения
« Ответ #5 : 10.12.2012, 11:55:19 »
Господа, не могу понять, нужно сделать таблицу соответствий. Но как сохранять значения туда, если id всегда отправляется как 0.
Создаю таблицу
Код
DROP TABLE IF EXISTS `#__news`;
 
CREATE TABLE `#__news` (
    `id` int(11) NOT NULL,
    `id_region` TEXT NOT NULL,
     PRIMARY KEY  (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
Потом models/modal.php
Код
public function getTable($type = 'Modal', $prefix = 'ModalTable', $config = array()) 
{
return JTable::getInstance($type, $prefix, $config);
}
/**
* Method to get the record form.
*
* @param array $data Data for the form.
* @param boolean $loadData True if the form is to load its own data (default case), false if not.
* @return mixed A JForm object on success, false on failure
* @since 2.5
*/
public function getForm($data = array(), $loadData = true)
{
// Get the form.
$form = $this->loadForm('com_region.modal', 'modal',
                        array('control' => 'jform', 'load_data' => $loadData));
if (empty($form))
{
return false;
}
return $form;
}


protected function loadFormData()
{
// Check the session for previously entered form data.
$data = JFactory::getApplication()->getUserState('com_region.edit.modal.data', array());
if (empty($data))
{
$data = $this->getItem();
}
return $data;
}

Тут и контроллер есть
Код
<?php
// No direct access to this file
defined('_JEXEC') or die('Restricted access');
 
// import Joomla controllerform library
jimport('joomla.application.component.controllerform');
 
/**
 * modal Controller
 */
class RegionControllerModal extends JControllerForm
{
}

И tables/modal.php
Код
class ModalTableModal extends JTable
{
/**
* Constructor
*
* @param object Database connector object
*/
function __construct(&$db)
{
            parent::__construct('#__news', 'id', $db);
}
tmpl/edit.php
Код
<?php
// No direct access
defined('_JEXEC') or die('Restricted access');
JHtml::_('behavior.tooltip');
JHtml::_('behavior.formvalidation');
$params = $this->form->getFieldsets('params');
?>
<form action="<?php echo JRoute::_('index.php?option=com_region&view=modal&layout=edit&id='.(int) $this->item->id); ?>" method="post" name="adminForm" id="region-form" class="form-validate">
 
<div class="width-100 fltlft">
<fieldset class="adminform">
<legend><?php echo JText::_( 'COM_REGION_REGION_DETAILS' ); ?></legend>
<ul class="adminformlist">
                            <li><?php echo $this->form->getLabel('id'); ?>
                            <?php echo $this->form->getInput('id'); ?></li>
                            <li><?php echo $this->form->getLabel('id_region'); ?>
                            <?php echo $this->form->getInput('id_region'); ?></li>
</ul>
</fieldset>
</div>
<!-- begin ACL definition-->
 
   <div class="clr"></div>
   <!-- end ACL definition-->
 
  <div>
<input type="hidden" name="task" value="modal.edit" />
<?php echo JHtml::_('form.token'); ?>
</div>
</form>
view.html.php
Код
<?php
// No direct access to this file
defined('_JEXEC') or die('Restricted access');
 
// import Joomla view library
jimport('joomla.application.component.view');
 
/**
 * Region View
 */
class RegionViewModal extends JView
{
/**
* display method of Hello view
* @return void
*/
public function display($tpl = null)
{
// get the Data
$form = $this->get('Form');
$item = $this->get('Item');
$script = $this->get('Script');
 
// Check for errors.
if (count($errors = $this->get('Errors')))
{
JError::raiseError(500, implode('<br />', $errors));
return false;
}
// Assign the Data
$this->form = $form;
$this->item = $item;
$this->script = $script;
// Set the toolbar
$this->addToolBar();
 
// Display the template
parent::display($tpl);
 
// Set the document
$this->setDocument();
}
 
/**
* Setting the toolbar
*/
protected function addToolBar()
{
JRequest::setVar('hidemainmenu', true);
$isNew = $this->item->id == 0;
JToolBarHelper::title($isNew ? JText::_('COM_REGION_MANAGER_REGION_NEW') : JText::_('COM_REGION_MANAGER_REGION_EDIT'), 'modal');
// Built the actions for new and existing records.
if ($isNew)
{
// For new records, check the create permission.
                        JToolBarHelper::apply('modal.apply', 'JTOOLBAR_APPLY');
JToolBarHelper::cancel('modal.cancel', 'JTOOLBAR_CANCEL');
}
else
{
// We can save the new record
                        JToolBarHelper::apply('modal.apply', 'JTOOLBAR_APPLY');
JToolBarHelper::cancel('modal.cancel', 'JTOOLBAR_CLOSE');
}
}
/**
* Method to set up the document properties
*
* @return void
*/
protected function setDocument()
{
$isNew = $this->item->id == 0;
$document = JFactory::getDocument();
$document->setTitle($isNew ? JText::_('COM_REGION_REGION_CREATING') : JText::_('COM_REGION_REGION_EDITING'));
}
}

Скажите, ведь все верно делаю, почему id сбрасывается на 0(при сохранении), вследствие чего, выбивается ошибка
Код
Сохранить не удалось из-за ошибки: ModalTableModal: :store failed
Duplicate entry '0' for key 'PRIMARY' SQL=INSERT INTO `jommlacms_news` (`id`,`id_region`) VALUES ('0','435345')
Второй день бьюсь.
*

xchesh

  • Захожу иногда
  • 277
  • 10 / 1
Re: Ненавязчивая идея сохранения
« Ответ #6 : 10.12.2012, 12:11:35 »
Да, я могу сделать таблицу с id AI и дополнительно добавить колонку id_news. Но зачем мне лишний столбец?
*

prometheus

  • Захожу иногда
  • 84
  • 7 / 0
Re: Ненавязчивая идея сохранения
« Ответ #7 : 10.12.2012, 13:13:18 »
Столько кода привел, а где сам метод по сохранению в таблицу?
Да и почему id в таблице news не autoincrement я тоже не нашел объяснения
*

b2z

  • Глобальный модератор
  • 7288
  • 778 / 0
  • Разраблю понемногу
Re: Ненавязчивая идея сохранения
« Ответ #8 : 10.12.2012, 13:47:38 »
ХМL формы покажите. Что у Вас там в поле $this->form->getInput('id'); ?
*

xchesh

  • Захожу иногда
  • 277
  • 10 / 1
Re: Ненавязчивая идея сохранения
« Ответ #9 : 10.12.2012, 13:55:59 »
ХМL формы покажите. Что у Вас там в поле $this->form->getInput('id'); ?


Легко!)

Код
<?xml version="1.0" encoding="utf-8"?>
<form
addfieldpath="/administrator/components/com_xbaner/models/fields"
>
<fieldset name="details">
<field
                    name="id"
                    type="hidden"
/>
                <field
                    name="id_region"
                    label="COM_XBANER_REGION_LABEL"
                    description="COM_XBANER_REGION_DESC" 
                    type="multicheckbox"
                />
        </fieldset>
</form>
Кстати, если делать не hidden а text и вручную вводить, все равно одно и то же.
*

b2z

  • Глобальный модератор
  • 7288
  • 778 / 0
  • Разраблю понемногу
*

xchesh

  • Захожу иногда
  • 277
  • 10 / 1
Re: Ненавязчивая идея сохранения
« Ответ #11 : 10.12.2012, 14:55:57 »
Хорошо, Вам в форму приходит заполненный Id?
нет. не приходит.
Зато если указать в файле tables/modal.php
Код
function __construct(&$db) 
{
            parent::__construct('#__news', 'id_region', $db);
}
То все сохраняется, ну кроме конечно же id_region, он все равно остается нулевой.

Вообще, меня уже бесить начинает Joomla, ради простых действий, приходится через жопу все делать. Вот задача проста до ужаса, вывести в модальном окне checkboxes со всеми филиалами и записать в таблицу соответствий id материала(который передается в всплывающий iframe параметром) и выбранные checkbox'ы по кнопке "Готово". При открытии этого материала повторно, показывать какие чекбоксы выбраны.
Бля, уже второй день мучаюсь с этим говном. Создать вид, модель для него, контроллер и вывести в модальное окно. ЗБС, задача сделана, но нихера не работает, а почему? Это не ясно.
Обращаюсь прямо по ссылке к товару, окей, открывает, пытаюсь сохранить - херас два, нет прав на прямую ссылку, нет вида modals. ОТКУДА Joomla взяла вид modals, если я его нигде не объявлял? Почему она пытается на действие кнопки Apply открыть это ребаный вид? Какого дьявола у меня нету прав на доступ к своей записи? Этот дибилизм напрягает, нужно срочно переходить на какой-нибудь фреймворк, Joomla бесит своими правилами. Не первый день разработчик все-таки. Накипело.
« Последнее редактирование: 10.12.2012, 15:35:08 от xchesh »
*

xchesh

  • Захожу иногда
  • 277
  • 10 / 1
Re: Ненавязчивая идея сохранения
« Ответ #12 : 10.12.2012, 15:46:39 »
Ладно, погорячился :) Хоть Joomla и раздражительно выносит мозг, но все-таки это удобнее немного чем написать свое двигло.
Проблема возникала не поверите в чем, оказывается, что просто так, по прямой ссылке, зайти нельзя. Точнее зайти можно, но нельзя сохранить изменения и т.п. Чтобы обойти этот идиотизм, нужно ссылку выдавать вида index.php?option=com_region&task=modal.edit&id=YOU_ID, где modal - название вида, edit - это шаблон(layout). Мне вот в голову не пришло, что нужно в параметре task это передавать и через точку, пока не посмотрел на другой свой компонент. Мне не совсем понятна логика. Точнее вообще не понятна для чего это сделали.
Вопрос предыдущий существует. Это так, отвлечение.
*

Fedor Vlasenko

  • Живу я здесь
  • 3845
  • 733 / 7
  • https://fedor-vlasenko.web.app
Re: Ненавязчивая идея сохранения
« Ответ #13 : 10.12.2012, 16:07:38 »
<form action="/joomlacms/administrator/index.php?option=com_region&amp;view=modal&amp;layout=modal_table&amp;tmpl=component" method="post" name="adminForm" id="adminForm"> можно смело поменять на
<form action="/index.php?tmpl=modal" method="post" name="adminForm" id="adminForm">
а в файле modal.php (вашего шаблона или шаблона system) обрабатывать. Мое видение
*

xchesh

  • Захожу иногда
  • 277
  • 10 / 1
Re: Ненавязчивая идея сохранения
« Ответ #14 : 10.12.2012, 16:15:27 »
<form action="/joomlacms/administrator/index.php?option=com_region&amp;view=modal&amp;layout=modal_table&amp;tmpl=component" method="post" name="adminForm" id="adminForm"> можно смело поменять на
<form action="/index.php?tmpl=modal" method="post" name="adminForm" id="adminForm">
а в файле modal.php (вашего шаблона или шаблона system) обрабатывать. Мое видение
Немного не понимаю как это будет работать...

Мне интересно кое что ещё. Можно ли обработчик Apply сделать AJAX. Ну, чтобы без перезагрузки страницы(iframe).
*

b2z

  • Глобальный модератор
  • 7288
  • 778 / 0
  • Разраблю понемногу
Re: Ненавязчивая идея сохранения
« Ответ #15 : 10.12.2012, 16:21:01 »
нет. не приходит.
Ну так, ищите проблему не тут. Ройте models/modal.php, а точнее loadFormData().
*

xchesh

  • Захожу иногда
  • 277
  • 10 / 1
Re: Ненавязчивая идея сохранения
« Ответ #16 : 11.12.2012, 16:55:16 »
Ну так, ищите проблему не тут. Ройте models/modal.php, а точнее loadFormData().
Слишком много времени занимает поиск таких вот выходов, сделал по-другому, добавил AI к id и все. Теперь все работает. (всего 3 колонки id, id_news, id_region). Да, не лучший вариант(лишняя колонка) но вполне рабочий и не занимает много времени. Спасибо всем кто помогал.
*

prometheus

  • Захожу иногда
  • 84
  • 7 / 0
Re: Ненавязчивая идея сохранения
« Ответ #17 : 11.12.2012, 17:02:20 »
а id и id_news это разные значения?
*

xchesh

  • Захожу иногда
  • 277
  • 10 / 1
Re: Ненавязчивая идея сохранения
« Ответ #18 : 11.12.2012, 17:10:22 »
а id и id_news это разные значения?
Ну конечно) id - AI, id_news - задаваемый парамерт
*

prometheus

  • Захожу иногда
  • 84
  • 7 / 0
Re: Ненавязчивая идея сохранения
« Ответ #19 : 11.12.2012, 17:17:53 »
Это я понял а функции они какие выполняют для чего news_id куда он указывает
*

xchesh

  • Захожу иногда
  • 277
  • 10 / 1
Re: Ненавязчивая идея сохранения
« Ответ #20 : 12.12.2012, 09:12:00 »
Это я понял а функции они какие выполняют для чего news_id куда он указывает
id_news - это id материала, в котором вызывается это модальное окно.
id_region - это id региона, к которому относится данный материал.
*

prometheus

  • Захожу иногда
  • 84
  • 7 / 0
Re: Ненавязчивая идея сохранения
« Ответ #21 : 12.12.2012, 12:14:04 »
id_news - это id материала, в котором вызывается это модальное окно.
id_region - это id региона, к которому относится данный материал.
Действительно не нужен дополнительное поле с автоинкрементом. Мне кажется что здесь дело в особенности работы класса JTable и нужно переопределить метод storage()
*

xchesh

  • Захожу иногда
  • 277
  • 10 / 1
Re: Ненавязчивая идея сохранения
« Ответ #22 : 12.12.2012, 12:20:57 »
Действительно не нужен дополнительное поле с автоинкрементом. Мне кажется что здесь дело в особенности работы класса JTable и нужно переопределить метод storage()
Да, я тоже думаю что в JTable дело, но времени нету разбираться и переопределять его методы.
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Перенос после сохранения данных пользователя

Автор selimoff

Ответов: 2
Просмотров: 2306
Последний ответ 15.01.2010, 00:01:28
от SmokerMan