Новости Joomla

SW JProjects v.2.5.0 - компонент каталога цифровых проектов на Joomla

SW JProjects v.2.5.0 - компонент каталога цифровых проектов на Joomla

👩‍💻 SW JProjects v.2.5.0 - компонент каталога цифровых проектов на Joomla.Компонент - менеджер цифровых проектов для Joomla! CMS. Компонент обеспечивает создание каталога цифровых проектов и предоставляет возможность скачивания, в том числе с использованием лицензионных ключей.👩‍💻 v.2.5.0. Что нового?Схемы структур данных для серверов обновлений. Теперь с SW JProjects вы может создавать сервер обновлений не только для расширений Joomla, но и свои собственные. Например, вам нужно, чтобы структура данных сервера обновлений была другая и формат должен быть, например, не XML, а JSON. Формирование структуры данных для сервера обновлений расширений Joomla вынесено в отдельный плагин. Вы можете создать свой собственный плагин и реализовать в нём нужную вам структуру данных, добавив или наоборот исключив отображаемые данные. Сервер обновлений в компоненте по-прежнему отображает информацию о списке проектов и их версиях, о конкретном проекте и его changelog.Можно выбрать схему данных сервера обновлений глобально для всего компонента, выбрать другую схему данных для категории проектов, а так же выбрать схему в каждом проекте.

Разработчикам в качестве образца можно посмотреть плагин схемы данных для Joomla в составе компонента или же плагин-образец JSON-схемы на GitHub.
Группа плагинов swjprojects. Для нужд компонента создана группа плагинов swjprojects. В частности, в этой группе находится плагин структуры данных Joomla расширений для сервера обновлений.Изменение языковых констант. Изменены некоторые языковые константы в панели администратора. Если вы делали переопределение констант - переопределите их снова.👩‍💻 Joomla 6. Внесены изменения для корректной установки и работы компонента на Joomla 6. Компонент успешно протестирован на Joomla 6-beta2.Минимальная версия Joomla - 5. Подняты минимальные системные требования: Joomla 5.0.0 и PHP 8.1.
- Страница расширения👉 Плагин-образец кастомной JSON-схемы данных для сервера обновлений на GitHub.- GitHub расширения- Документация на GitHub- Joomla Extensions Directory#joomla #расширения

Как триггерить события для плагинов на манер Joomla 5+?В Joomla 6 должны удалить метод...

Как триггерить события для плагинов на манер Joomla 5+?В Joomla 6 должны удалить метод...

👩‍💻 Как триггерить события для плагинов на манер Joomla 5+?В Joomla 6 должны удалить метод triggerEvent(), с помощью которого раньше вызывались события для плагинов. Теперь чтобы в своём коде вызвать событие для плагина и получить от него результаты нужно:- создать объект класса события- передать в него параметры

use Joomla\CMS\Event\AbstractEvent;use Joomla\CMS\Factory;use Joomla\CMS\Plugin\PluginHelper;// Грузим плагины нужных группPluginHelper::importPlugin('system');// Создаём объект события$event = AbstractEvent::create('onAfterInitUniverse', [    'subject' => $this,    'data'    => $data, // какие-то данные    'article' => $article, // ещё материал вдовесок    'product' => $product, // и товаров подвезли]);// Триггерим событиеFactory::getApplication()->getDispatcher()->dispatch(    $event->getName(), // Тут можно строку передать 'onAfterInitUniverse'    $event);// Получаем результаты// В случае с AbstractEvent это может быть не 'result',// а что-то ещё - куда сами отдадите данные.// 2-й аргумент - значение по умолчанию, // если не получены результаты$results = $event->getArgument('result', []);
Плюсы такого подхода - вам не нужно запоминать порядок аргументов и проверять их наличие. Если вы написали свой класс события, то в плагине можно получать аргументы с помощью методов $event->getArticle(), $event->getData(), $event->getProduct() и подобными - реализуете сами под свои нужды. Если такой класс события написали, то создаёте экземпляр своего класса события и укажите его явно в аргументе eventClass
use Joomla\Component\MyComponent\Administrator\Event\MyCoolEvent;$event = MyCoolEvent::create('onAfterInitUniverse', [    'subject'    => $this,    'eventClass' => MyCoolEvent::class, // ваш класс события    'data'       => $data, // какие-то данные    'article'    => $article, // ещё материал вдовесок    'product'    => $product, // и товаров подвезли]);
Ожидаемо, что класс вашего события будет расширять AbsractEvent или другие классы событий Joomla.🙁 Есть неприятный нюанс - нельзя просто так вызывать событие и ничего не передать в аргументы. Аргумент subject обязательный. Но если вы всё-таки не хотите туда ничего передавать - передайте туда пустой stdClass или объект Joomla\registry\Registry.
@joomlafeed#joomla #php #webdev

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

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Самописный компонент. В таблице в базе имеется поле `ordering` int not null для ручного указания порядка вывода данных, которое по умолчанию при добавлении новой записи имеет значение 0.
В админке в списке поле выводится как на скрине:


Вывожу так:
Код: html4strict
<?php
$saveOrder = $listOrder == 'ordering';
if ($saveOrder) {
  $saveOrderingUrl = 'index.php?option=com_teaching_staff&view=listitems.saveOrderAjax&tmpl=component';
  JHtml::_('sortablelist.sortable', 'articleList', 'adminForm', strtolower($listDirn), $saveOrderingUrl);
}
?>
        <td class="order nowrap center hidden-phone">
        <?php
          if ($canChange) {
            $disableClassName = '';
            $disabledLabel = '';
            if (!$saveOrder) {
              $disabledLabel = JText::_('JORDERINGDISABLED');
              $disableClassName = 'inactive tip-top';
            }
          ?>
            <span class="sortable-handler <?php echo $disableClassName; ?>" title="<?php echo $disabledLabel; ?>" rel="tooltip"><i class="icon-menu"></i></span>
            <input type="text" style="display:none;" name="order[]" size="5" value="<?php echo $item->ordering; ?>" class="width-20 text-area-order" />
          <?php } else { ?>
            <span class="sortable-handler inactive"><i class="icon-menu"></i></span>
          <?php } ?>
        </td>

В контроллере:
Код: php
  public function saveOrderAjax() {
    $pks = $this->input->post->get('cid', array(), 'array');
    $order = $this->input->post->get('order', array(), 'array');
    JArrayHelper::toInteger($pks);
    JArrayHelper::toInteger($order);
    $model = $this->getModel();
    $return = $model->saveorder($pks, $order);
    if ($return) echo '1';
    JFactory::getApplication()->close();
  }

Есс-но, если я перетаскиваю строки вверх/вниз, то значение поля в записях не меняется.

Я так понял, вся реализация должна быть в модели, в функции saveorder(), но ее пример нашел только в com_users/models/levels.php, из которого ничего толком не понял.

Как правильно реализовать подобный функционал, чтобы потом во фронте иметь возможность выводить данные с сортировкой по данному полю?
« Последнее редактирование: 25.03.2015, 18:51:56 от b2z »
*

shurakana

  • Давно я тут
  • 792
  • 50 / 6
UPD По какому то порядку они же выводятся в админке, может ошибка как раз в том, что по умолчанию там 0?
Может при добавлении записи сделать подсчет всех добавленных записей в этой таблице, затем делать к подсчету +1, и уже добавлять к только что созданной записи.

Таким образом сортировка заготовлена, потом на окончание события "перетаскивания", повесить функцию сохранения в бд.
Ну это уже все ручками своими..)

А по идее, это вроде же встроенная фишка Joomla, перетаскивание и сохранение, инклюдится откуда то, и если Неправильно работает, возможно ошибся где то при создании компонента.

Спойлер
[свернуть]
« Последнее редактирование: 25.03.2015, 16:50:59 от shurakana »
Эта подпись отображается внизу каждого Моего сообщения. Я также могу использовать BB код и смайлы.
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
В консоли руганутся на это:
$saveOrderingUrl = 'index.php?option=com_teaching_staff&view=listitems.saveOrderAjax&tmpl=component';
выдал: представление не найдено,
исправил так:
$saveOrderingUrl = 'index.php?option=com_teaching_staff&view=listitems&tmpl=component';
ошибка исчезла, что дальше делать - хз
выставил значения ordering в базе, один х не работает
« Последнее редактирование: 25.03.2015, 17:00:08 от AlekVolsk »
*

shurakana

  • Давно я тут
  • 792
  • 50 / 6
Может в твоем компоненте отсутствует saveOrderAjax? т.к. по названию это вроде то что нужно..

А еще, скрипт js должен параметры сортировки принимать и передавать, если вообще сам писал компонент, то может id или class не те выставил или еще ченить в том же духе, она автоматом же должна работать, т.е. перетащил -> js скрипт собрал данные -> отправил в обработчик -> сохранилось в бд.
Эта подпись отображается внизу каждого Моего сообщения. Я также могу использовать BB код и смайлы.
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
saveOrderAjax описан в JControllerAdmin, там тоже вызывается $this->getModel()->saveorder($pks, $order); которая нигде не описана.
*

shurakana

  • Давно я тут
  • 792
  • 50 / 6
Попробуй вот здесь создать компонент, и сравни в чем отчличия http://ссылка вырезана, так как домен распространяет вирусы/sozdanie-komponenta
Эта подпись отображается внизу каждого Моего сообщения. Я также могу использовать BB код и смайлы.
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Вышепреведенный код именно оттуда
*

b2z

  • Глобальный модератор
  • 7287
  • 778 / 0
  • Разраблю понемногу
UPD По какому то порядку они же выводятся в админке, может ошибка как раз в том, что по умолчанию там 0?
Может при добавлении записи сделать подсчет всех добавленных записей в этой таблице, затем делать к подсчету +1, и уже добавлять к только что созданной записи.
Именно. Например у меня в модели:

Код: php
/**
 * Prepare and sanitise the table prior to saving
 *
 * @param   object  $table  The table object
 *
 * @return  void
 *
 * @since  1.0
 */
protected function prepareTable($table)
{
$date = JFactory::getDate();

$table->generateAlias();

if (empty($table->id))
{
// Set the values
$table->created_time = $date->toSql();

// Set ordering to the last item if not set
if (empty($table->ordering))
{
$db = $this->getDbo();
$query = $db->getQuery(true)
->select('MAX(ordering)')
->from($db->quoteName('#__competition_competitions'));
$db->setQuery($query);
$max = $db->loadResult();

$table->ordering = $max + 1;
}
}
}

В контроллере ничего дополнительно делать не надо.

В макете:


Код: php
if ($saveOrder)
{
$saveOrderingUrl = 'index.php?option=com_competition&task=competitions.saveOrderAjax&tmpl=component';
JHtml::_('sortablelist.sortable', 'competitionsList', 'adminForm', strtolower($listDirn), $saveOrderingUrl);
}

Соответственно должна быть таблица с id=competitionsList

Код: html4strict
<table class="table table-striped" id="competitionsList">

У тебя это articleList. Поменяй в базе вручную ordering и должно заработать.
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Сейчас значения не нулевые, все равно не работает.
AJAX возвращает 404 Представление не найдено [name, type, prefix]: listitems.saveOrderAjax, HTML, teaching_staffView (с маленькой буквы - это нормально? где мог ошибиться?)
id в url соответствует id в table
saveOrderAjax из своего контроллера убрал
« Последнее редактирование: 25.03.2015, 18:41:28 от AlekVolsk »
*

b2z

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

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Все, работает.
Кляну в сотый раз свою невнимательность ))
Спасибо! *DRINK* :)
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

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

Автор semen1707

Ответов: 0
Просмотров: 486
Последний ответ 14.04.2021, 00:59:44
от semen1707
[РЕШЕНО] Дублирование при создании

Автор platonische

Ответов: 7
Просмотров: 1249
Последний ответ 12.02.2021, 11:24:26
от platonische
[РЕШЕНО] onChange в админке на field modal

Автор platonische

Ответов: 1
Просмотров: 610
Последний ответ 30.01.2021, 16:40:45
от platonische
MySQL Что быстрее выбор столбца в таблице с кучей столбцов или с 1?

Автор platonische

Ответов: 2
Просмотров: 606
Последний ответ 22.10.2020, 15:28:19
от platonische
Пример представления компонента с выводом списка с фильтром по связанной таблице

Автор borro

Ответов: 36
Просмотров: 2528
Последний ответ 14.10.2020, 11:59:15
от b2z