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

borro

  • Завсегдатай
  • 1379
  • 22 / 0
  • желаю вам счастья
Здравствуйте.

Продолжаю разрабатывать компонент, который должен по клику на кнопку в админской части предлагать к сохранению excel-файл с данными. Позвольте, все возникающие вопросы буду задавать в одной этой теме.

Скажите, нужна ли такому компоненту модель или все процессы обращения к базе данных за данными лучше прописать в задаче главного контроллера? Никаких форм отображать не надо, просто добыча данных из БД, небольшая компоновка и генерация эксель документа для скачивания.
*

Septdir

  • Живу я здесь
  • 3370
  • 168 / 4
Ну о том и где должно находиться можно долго рассуждать, ведь концепция mvc весьма гибкая штука, но работа с базой однозначно в модель. А вот что до этого делать, в частности где подготавливтаь данные к запросу и где формировать ответ, вопрос более сложный.
Не можете справиться с задачей сами пишите, решу ее за вас, не бесплатно*.
*Интересная задача, Деньги или Бартер. Натурой не беру!
CodersRank | Контакты | Мой GitHub | Workshop
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Для подготовки запроса в базу, его исполнения и получения первичных данных в модели реализованы спец. функции для этого, если вы хотите формировать файл excel в бекэнде для дальней выдачи на скачивание. то схема примерно такая? в таске вызываете модель, получаете данные из базы, затем формируете прямо в контроллере из полученных данных файл и выдаете его на скачивание
*

borro

  • Завсегдатай
  • 1379
  • 22 / 0
  • желаю вам счастья
нужна
Спасибо.

У вас есть на заметке пример простейшего компонента, который выполняет поставленную задачу? По документации мне не понятно, что должно быть в файле модели, и что в контроллере в данном случае
*

Виталик

  • Завсегдатай
  • 1244
  • 130 / 0
У вас есть на заметке пример простейшего компонента, который выполняет поставленную задачу? По документации мне не понятно, что должно быть в файле модели, и что в контроллере в данном случае
JoomShopping, посмотрите в админке например контроллер JshoppingControllerProductFields
*

b2z

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

borro

  • Завсегдатай
  • 1379
  • 22 / 0
  • желаю вам счастья
Здравствуйте! Спасибо. Пробую...
Содержимое модели, файл download.php:
Спойлер
[свернуть]
Содержимое главного контроллера, файл controller.php:
Спойлер
[свернуть]
При попытке открыть страницу компонента в админке выдается:
Цитировать
Fatal error: Class VmpicelistModelDownload contains 1 abstract method and must therefore be declared abstract or implement the remaining methods (JModelForm::getForm) in C:\xampp_new\htdocs\asu160404.ru\www\administrator\components\com_vmpricelist\models\download.php on line 4
Если поставить единственному методу модели abstract, то выдается:
Цитировать
Fatal error: Abstract function VmpicelistModelDownload::getData() cannot contain body in C:\xampp_new\htdocs\asu160404.ru\www\administrator\components\com_vmpricelist\models\download.php on line 12
Я не понимаю суть этих ошибок. Как разрешить ситуацию?

« Последнее редактирование: 23.09.2016, 11:51:21 от borro »
*

b2z

  • Глобальный модератор
  • 7287
  • 778 / 0
  • Разраблю понемногу
Поменяйте JModelAdmin на JModelList - Вы же список выгружаете. Если хотите оставить JModelAdmin, то надо реализовать метод getForm().

А VmConfig::$defaultLang откуда берётся? Что-то не вижу, где вы определили класс VmConfig.
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
Я не понимаю суть этих ошибок. Как разрешить ситуацию?
Добавьте в ваш класс пустую функцию getForm().
Не будь паразитом, сделай что-нибудь самостоятельно!
*

borro

  • Завсегдатай
  • 1379
  • 22 / 0
  • желаю вам счастья
Новая версия админской части компонента:
1. точка входа в админскую часть компонента - главный файл administrator/components/com_vmpricelist/vmpricelist.php:
Спойлер
[свернуть]

2. главный контроллер - файл administrator/components/com_vmpricelist/controller.php:
Спойлер
[свернуть]

3. Вид
3.а. файл administrator/components/com_vmpricelist/views/download/view.html.php:
Спойлер
[свернуть]

3.б. файл макета administrator/components/com_vmpricelist/views/download/tmpl/default.php
Спойлер
[свернуть]

4. Файл модели, файл administrator/components/com_vmpricelist/models/download.php:
Спойлер
[свернуть]

Вопросы:
1. туда ли я поместил запрос к БД, в функцию getForm?
2. при открытии страницы вида download в админке по адресу /administrator/index.php?option=com_vmpricelist&task=download выводится сообщение:
Цитировать
Предупреждение
Модель класса vmpricelistModelDownload не найдена в файле
и var_dump($this->data) выдает null
Почему не найдена модель?
« Последнее редактирование: 23.09.2016, 13:47:21 от borro »
*

Septdir

  • Живу я здесь
  • 3370
  • 168 / 4
Почему не найдена модель?
Честно не разу не юзал главный контролер (ибо обычно если делаю компонент под сайт, то там сразу много задач) Ну в доп контролерах функция получения модели прописывается отдельно
Код: php
	function getModel($name = 'NAME', $prefix = 'PRFIX', $config = array('ignore_request' => true)) {
return parent::getModel($name, $prefix, $config);
}
Ну или можно в самой функции подключить модель.
Код: php
JModelLegacy::addIncludePath(JPATH_SITE.DIRECTORY_SEPARATOR.'components'.DIRECTORY_SEPARATOR.'com_name'.DIRECTORY_SEPARATOR.'models');
$model = JModelLegacy::getInstance('model', 'prefix');
$model->function(params);
getForm - это функция получения формы, а не для итемов
P.S опишите вообще полностью задачу компонента, может вообще зря мучиетесь
Не можете справиться с задачей сами пишите, решу ее за вас, не бесплатно*.
*Интересная задача, Деньги или Бартер. Натурой не беру!
CodersRank | Контакты | Мой GitHub | Workshop
*

borro

  • Завсегдатай
  • 1379
  • 22 / 0
  • желаю вам счастья
Код: php
	function getModel($name = 'NAME', $prefix = 'PRFIX', $config = array('ignore_request' => true)) {
return parent::getModel($name, $prefix, $config);
}
Код выше прописывается в подконтроллерах? Не мой вариант?

Ну или можно в самой функции подключить модель.
Код: php
JModelLegacy::addIncludePath(JPATH_SITE.DIRECTORY_SEPARATOR.'components'.DIRECTORY_SEPARATOR.'com_name'.DIRECTORY_SEPARATOR.'models');
$model = JModelLegacy::getInstance('model', 'prefix');
$model->function(params);
Уточните, в какой функции подключить модель вышеприведённым способом

P.S опишите вообще полностью задачу компонента, может вообще зря мучиетесь
Компонент должен по клику на кнопке в админке формировать и предлагать к загрузке эксель документ, данные в который стягиваются из нескольких таблиц БД
« Последнее редактирование: 23.09.2016, 17:52:32 от borro »
*

b2z

  • Глобальный модератор
  • 7287
  • 778 / 0
  • Разраблю понемногу
Цитировать
Компонент должен по клику на кнопке в админке формировать и предлагать к загрузке эксель документ, данные в который стягиваются из несколько таблиц БД
Ну тогда вам форма вообще не нужна.

Я же говорю, поменяйте JModelAdmin на JModelList
Код: php
class VmpicelistModelDownload extends JModelList

Переделайте getForm на getData().

В контроллере
Код: php
public function getModel($name = 'Download', $prefix = 'Vmpicelist', $config = array('ignore_request' => true))
{
    return parent::getModel($name, $prefix, $config);
}

В представлении
Код: php-brief
$this->data = $this->get('Data');
*

Septdir

  • Живу я здесь
  • 3370
  • 168 / 4
Уточните, в какой функции подключить модель вышеприведённым способом
В любой, это вообще стандартный выозв модели, хоть в контролере, хоть в хелпере, хоть в моделе (если к примеру надо взять модель из другого компонента), да хоть в шаблоне.

И вообще я к чему просил про задачу полностью. Ибо тот же CSVI PRO неплохо делал экспорт, правда юзал его давно и не уверен что если в формате и кодировке экселя, но ведь проще пресохранить файл, чем писать компонент с 0
« Последнее редактирование: 23.09.2016, 19:26:33 от Septdir »
Не можете справиться с задачей сами пишите, решу ее за вас, не бесплатно*.
*Интересная задача, Деньги или Бартер. Натурой не беру!
CodersRank | Контакты | Мой GitHub | Workshop
*

borro

  • Завсегдатай
  • 1379
  • 22 / 0
  • желаю вам счастья
Здравствуйте! Спасибо. Сделал, как Вы сказали. Теперь выводится Предупреждение:
Цитировать
Модель класса VmpicelistDownload не найдена в файле
а var_dump в виде выводит null

Пакет файлов:
1. главный файл administrator/components/com_vmpricelist/vmpricelist.php:
Спойлер
[свернуть]

2. главный контроллер - файл administrator/components/com_vmpricelist/controller.php:
Спойлер
[свернуть]

3. Вид
3.а. файл administrator/components/com_vmpricelist/views/download/view.html.php:
Спойлер
[свернуть]

3.б. файл макета administrator/components/com_vmpricelist/views/download/tmpl/default.php
Спойлер
[свернуть]

4. Файл модели, файл administrator/components/com_vmpricelist/models/download.php:
Спойлер
[свернуть]

Может нужен XML файл какой-то?
« Последнее редактирование: 26.09.2016, 18:13:30 от borro »
*

borro

  • Завсегдатай
  • 1379
  • 22 / 0
  • желаю вам счастья
Мне нужно, чтобы в эксель и картинки были плюс формат вывода нестандартный. Да и CSVI довольно большой, легче я думаю и полезнее для меня будет с нуля создавать
« Последнее редактирование: 27.09.2016, 09:25:25 от borro »
*

SmokerMan

  • Гуру
  • 5290
  • 720 / 26
Здравствуйте! Спасибо. Сделал, как Вы сказали. Теперь выводится Предупреждение:а var_dump в виде выводит null
сказали не то что сделали)
нужно либо
создать отдельный контроллер, наприер /controllers/download.php и ссылатья на его task
Код
<input type="hidden" name="task" value="download.метод контроллера"/>
либо если делать через основной, то это делать так
Код
<input type="hidden" name="task" value="download"/>
в контроллере создать метод download и в нем уже подключать нужную модель
Код
$model = JModelLegacy::getInstance('model', 'prefix');
*

Septdir

  • Живу я здесь
  • 3370
  • 168 / 4
Мне нужно будет чтобы в эксель и картинки были плюс формат вывода нестандартный. Да и CSVI довольно большой, легче я думаю и полезнее для меня будет с нуля создавать
Полезнее, разве что ради развития. А так ну это ваше время решать вам
Не можете справиться с задачей сами пишите, решу ее за вас, не бесплатно*.
*Интересная задача, Деньги или Бартер. Натурой не беру!
CodersRank | Контакты | Мой GitHub | Workshop
*

borro

  • Завсегдатай
  • 1379
  • 22 / 0
  • желаю вам счастья
либо если делать через основной, то это делать так
Код
<input type="hidden" name="task" value="download"/>
в контроллере создать метод download и в нем уже подключать нужную модель
Код
$model = JModelLegacy::getInstance('model', 'prefix');
Доброе утро! Благодарю.
Если пойти через один основной контроллер, то какая(ие) должна быть функция внутри класса модели? Как она должна называться?
*

Aleks.Denezh

  • Живу я здесь
  • 3401
  • 428 / 4
Доброе утро! Благодарю.
Если пойти через один основной контроллер, то какая(ие) должна быть функция внутри класса модели? Как она должна называться?
Как назовете..
Например в контроллере:
Код: php
public function download(){
$excel = $this->getModel('Download','VmpicelistModel')->getExcel();
...
}
*

borro

  • Завсегдатай
  • 1379
  • 22 / 0
  • желаю вам счастья
Спасибо. Были ошибки в именовании модели  ^-^
« Последнее редактирование: 28.09.2016, 15:37:48 от borro »
*

borro

  • Завсегдатай
  • 1379
  • 22 / 0
  • желаю вам счастья
Здравствуйте.
Всех благодарю. Компонент разработан. Возникла непонятка. Когда устанавливаю его на боевом сайте и пытаюсь открыть из админки, то отображается ошибка:
Цитировать
Не удается получить доступ к сайту

Веб-страница по адресу сайт/administrator/index.php?option=com_vmpricelist&view=download, возможно, временно недоступна или постоянно перемещена по новому адресу.
ERR_INVALID_RESPONSE
При этом компонент нормально устанавливается и работает на локальном сервере. Выставлял уровень отображения ошибок на "Максимум", но до них не доходит, просто отображается белый экран с указанной ошибкой по середине.

Что это может быть?

Прикладываю установочный архив и принтскрин окна с отображением данных закладки Network панели разработчиков

P.S. Помню, что когда-то вылетало системное всплывающее окно в Хроме о том, разрешить или запретить скачивание файлов с сайта. Я вроде нажал разрешить. Также я нажал на кнопку i слева от адреса сайта в адресной строке, чтобы увидеть настройки сайта и там параметр "Автоматическая загрузка" установлен в значение "Разрешено Вами"
« Последнее редактирование: 07.10.2016, 15:36:55 от borro »
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

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

Автор semen1707

Ответов: 0
Просмотров: 486
Последний ответ 14.04.2021, 00:59:44
от semen1707
Создание компонента для табеля рабочего времени

Автор sashahz

Ответов: 7
Просмотров: 775
Последний ответ 12.04.2021, 11:12:11
от sashahz
Вызов формы компонента в pop-up, при клике по ссылке из любого места

Автор SkyAn

Ответов: 1
Просмотров: 664
Последний ответ 01.03.2021, 04:08:48
от gartes
Документация по разработки компонента для Joomla 3.x

Автор Aspik

Ответов: 9
Просмотров: 3285
Последний ответ 23.01.2021, 07:55:56
от hmr
Сборка инсталятора компонента файлами из разных папок с привлечением github

Автор borro

Ответов: 1
Просмотров: 670
Последний ответ 25.12.2020, 21:21:30
от platonische