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

Sphinx

  • Захожу иногда
  • 72
  • 0 / 0
нет ) у вас же объект формы, а там есть метод setValue($name, $group = null, $value = null)
а событие onContentPrepareForm($form, $data)   в первом параметре передает форму!
вам нужно сделать что то типа:
Код: php
$form->setValue('название поля', 'Группа в котором поле (если нет группы то просто пустоту оставить)', 'Значение поля');
Во, спасибо! Сделал)
*

Fedor Vlasenko

  • Живу я здесь
  • 3845
  • 733 / 7
  • https://fedor-vlasenko.web.app
Цитировать
вам нужно сделать что то типа:
или
Код: php-brief
$data->pole ='значение';
$form->bind($data);
*

Sphinx

  • Захожу иногда
  • 72
  • 0 / 0
или
Код: php-brief
$data->pole ='значение';
$form->bind($data);
Ок, спасибо! Попробуем)

ЗЫ Нашел отличную статью по теме http://slyweb.ru/joomla/joomla-create-custom-form-field/ ;)
*

Fedor Vlasenko

  • Живу я здесь
  • 3845
  • 733 / 7
  • https://fedor-vlasenko.web.app
в той статье как и в плагине по которому она писалась (user profile) есть логические ошибки
Код: php-brief
foreach ($article->rating as $k => $v)
           {
            $query->values($articleId.', '.$db->quote('rating.'.$k).', '.$db->quote(json_encode($v)).', '.$order++);
           }
нет здесь смысла писать пустое значение, тем самым вставляя ненужную строку при пустом значении
логичнее было
Код: php-brief
foreach ($article->rating as $k => $v)
           {
            if ($v) $query->values($articleId.', '.$db->quote('rating.'.$k).', '.$db->quote(json_encode($v)).', '.$order++);
           }
так же поле order, в таблице необходимость его под сомнением и упаковка json полей и приставка rating, profile
Честно не отточено
*

Sphinx

  • Захожу иногда
  • 72
  • 0 / 0
в той статье как и в плагине по которому она писалась (user profile) есть логические ошибки
Код: php-brief
foreach ($article->rating as $k => $v)
            {
             $query->values($articleId.', '.$db->quote('rating.'.$k).', '.$db->quote(json_encode($v)).', '.$order++);
            }
нет здесь смысла писать пустое значение, тем самым вставляя ненужную строку при пустом значении
логичнее было
Код: php-brief
foreach ($article->rating as $k => $v)
            {
             if ($v) $query->values($articleId.', '.$db->quote('rating.'.$k).', '.$db->quote(json_encode($v)).', '.$order++);
            }
так же поле order, в таблице необходимость его под сомнением и упаковка json полей и приставка rating, profile
Честно не отточено
Да я и не говорю, что в статье идеально описан метод добавления доп. строк к стандартному материалу. Каждый выполняющий эту задачу должен ее заточить под себя. Это просто как наглядный пример по созданию плагина. А дорабатывает его каждый сам под себя.
*

Sphinx

  • Захожу иногда
  • 72
  • 0 / 0
А из файла плагина есть возможность добавлять строки в переменную $this->item ?
*

Sphinx

  • Захожу иногда
  • 72
  • 0 / 0
to Istaan
Код: php
public function onContentAfterSave($context, $article, $isNew){	}
в этом методе в $context будет что то типа 'com_content.article'
в $article -  будет вся ваша запись
в $isNew - будет true если это новая запись
Проблема, ни в одной из этих переменных нет данных введенных в формах
Код
public function onContentBeforeSave($context, $article, $isNew) {
    echo '<pre style="font-size: 12pt;">'; print_r($article); echo '</pre>';
    exit;
  }
В переменной $article только стандартные поля. Ни одного из добавленных мною полей нет.
*

Aleks.Denezh

  • Живу я здесь
  • 3401
  • 428 / 4
А как вы поля в форму вставляете?
*

Sphinx

  • Захожу иногда
  • 72
  • 0 / 0
А как вы поля в форму вставляете?
А какой именно момент нужен?
Вообще через
Код
public function onContentPrepareForm($form, $data)
*

Sphinx

  • Захожу иногда
  • 72
  • 0 / 0
День добрый!
Подскажите пожалуйста, используя триггер onContentAfterSave не знаю как загрузить изображение на сервер. Надо хотя бы перенести файл с компа на сервер во временную папку (подойдет и tmp), дальше думаю сам уже разберусь. Подскажите, как это сделать?
*

Aleks.Denezh

  • Живу я здесь
  • 3401
  • 428 / 4
ну изображение нужно отправить через форму минимум! если файл у вас на компе, а сайт на сервере то он никак не сможет получить доступ к этому файлу, только если вы не впихнете его в <input type="file" /> вручную!
*

Sphinx

  • Захожу иногда
  • 72
  • 0 / 0
ну изображение нужно отправить через форму минимум! если файл у вас на компе, а сайт на сервере то он никак не сможет получить доступ к этому файлу, только если вы не впихнете его в <input type="file" /> вручную!
Ну форма то то есть:
Код
<input type="file" name="jform[temp][upload_photo_1]" id="jform_temp_upload_photo_1" value="" />
Вроде нашел как загружать файлы - http://joomlaforum.ru/index.php/topic,263530.msg1331151.html#msg1331151. Но чет у меня не выходит добавить файл. Вообще в onContentAfterSave можно добавить загрузку файлов?

Код
        $app = JFactory::getApplication();
        $jinput = $app->input;
 
        // получаем параметры формы
        $file = $jinput->files->get('jform[temp][upload_photo_1]', null, 'files', 'array');
        $filename = JFile::makeSafe($file['name']);
Делал так и получилось что переменные $file и $filename вообще пустые...
« Последнее редактирование: 05.11.2013, 16:15:48 от Sphinx »
*

Aleks.Denezh

  • Живу я здесь
  • 3401
  • 428 / 4
$file = $jinput->files->get('jform', null, 'files', 'array');
print_r($file);
*

Sphinx

  • Захожу иногда
  • 72
  • 0 / 0
$file = $jinput->files->get('jform', null, 'files', 'array');
print_r($file);
В функцию public function onContentAfterSave($context, $article, $isNew) добавил строки:
Код
    $app = JFactory::getApplication();
    $jinput = $app->input;

    $file = $jinput->files->get('jform', null, 'files', 'array');
К сожалению переменная $file пуста(((

ЗЫ если сделать вывод на экран:
Код
echo '<pre style="font-size: 12pt;">'; print_r($_POST[jform][temp]['upload_photo_1']); echo '</pre>';
то имя файла выводится без проблем...
« Последнее редактирование: 05.11.2013, 16:57:45 от Sphinx »
*

Aleks.Denezh

  • Живу я здесь
  • 3401
  • 428 / 4
форма материала стандартного?
*

Sphinx

  • Захожу иногда
  • 72
  • 0 / 0
форма материала стандартного?
Компонент материала стандартный, я к нему прикручиваю свои доп. поля. Вот хочу прикрутить, чтобы фотки можно было к материалу прикреплять. Вот и надо хотябы файл с компа перетащить на сервак, а дальше уже боле-менее знаю что делать...
*

Aleks.Denezh

  • Живу я здесь
  • 3401
  • 428 / 4
Материал стандартный, я к нему прикручиваю свои доп. поля.
ну естественно ничего не будет работать! ибо в стандартной форме материала нет enctype="multipart/form-data" без которого файлы слаться не будут!
вам нужно с помощью JS добавить такой аттрибут в форму!
*

Sphinx

  • Захожу иногда
  • 72
  • 0 / 0
ну естественно ничего не будет работать! ибо в стандартной форме материала нет enctype="multipart/form-data" без которого файлы слаться не будут!
вам нужно с помощью JS добавить такой аттрибут в форму!
Блин, вообще JS  не знаю, даже с какой стороны подходить к нему(((
А вы не подскажете как эт сделать, ну или хоть пример где найти, куда копать?
*

Aleks.Denezh

  • Живу я здесь
  • 3401
  • 428 / 4
ну могу сказать как на jQuery )
вот например для Joomla 3
Код: php
JHtml::_('jquery.framework');
JFactory::getDocument()->addScriptDeclaration(' jQuery(document).ready(function ($) { $("#item-form").attr("enctype", "multipart/form-data"); }); '); 
*

Sphinx

  • Захожу иногда
  • 72
  • 0 / 0
ну могу сказать как на jQuery )
вот например для Joomla 3
Код: php
JHtml::_('jquery.framework');
JFactory::getDocument()->addScriptDeclaration(' jQuery(document).ready(function ($) { $("#item-form").attr("enctype", "multipart/form-data"); }); '); 
Ок, спасибо. Куда копать наверное понял))) Буду думать для версии 2.5) Если что, буду писать сюда)
*

Aleks.Denezh

  • Живу я здесь
  • 3401
  • 428 / 4
Ок, спасибо. Куда копать наверное понял))) Буду думать для версии 2.5) Если что, буду писать сюда)
для версии 2.5 почти тоже
JFactory::getDocument()->addScript( '//ajax.googleapis.com/ajax/libs/jqueryui/1.10.3/jquery-ui.min.js' );
JFactory::getDocument()->addScriptDeclaration(' jQuery(document).ready(function ($) { $("#item-form").attr("enctype", "multipart/form-data"); }); ');
*

Sphinx

  • Захожу иногда
  • 72
  • 0 / 0
для версии 2.5 почти тоже
JFactory::getDocument()->addScript( '//ajax.googleapis.com/ajax/libs/jqueryui/1.10.3/jquery-ui.min.js' );
JFactory::getDocument()->addScriptDeclaration(' jQuery(document).ready(function ($) { $("#item-form").attr("enctype", "multipart/form-data"); }); ');
Ды я бы до этих строк бы неделю потерял... разбираясь
Спасибо.
А я так понимаю их ведь не в onContentAfterSave ставить?
*

Aleks.Denezh

  • Живу я здесь
  • 3401
  • 428 / 4
Ды я бы до этих строк бы неделю потерял... разбираясь
Спасибо.
А я так понимаю их ведь не в onContentAfterSave ставить?
нет конечно ) я пихаю в
Код: php
public function onContentPrepareData()
{
$input = JFactory::getApplication()->input;
if ( $input->getCmd( 'option', '' ) === 'com_content' && $input->getCmd( 'view', '' ) === 'article' && $nput->getCmd( 'layout', '' ) === 'edit' ) {
JFactory::getDocument()->addScript( '//ajax.googleapis.com/ajax/libs/jqueryui/1.10.3/jquery-ui.min.js' );
JFactory::getDocument()->addScriptDeclaration(' jQuery(document).ready(function ($) { $("#item-form").attr("enctype", "multipart/form-data"); }); ');
}
}
*

Sphinx

  • Захожу иногда
  • 72
  • 0 / 0
нет конечно ) я пихаю в
Код: php
public function onContentPrepareData()
{
$input = JFactory::getApplication()->input;
if ( $input->getCmd( 'option', '' ) === 'com_content' && $input->getCmd( 'view', '' ) === 'article' && $nput->getCmd( 'layout', '' ) === 'edit' ) {
JFactory::getDocument()->addScript( '//ajax.googleapis.com/ajax/libs/jqueryui/1.10.3/jquery-ui.min.js' );
JFactory::getDocument()->addScriptDeclaration(' jQuery(document).ready(function ($) { $("#item-form").attr("enctype", "multipart/form-data"); }); ');
}
}
Ок, спасиб. У меня onContentPrepareData не работает, я запихну в onContentPrepareForm.

Т.к. JS не знаю, результат какой должен получиться? В HTML коде должна добавиться  enctype="multipart/form-data"? Или физически не добавиться, но будет работать как с enctype="multipart/form-data" ? У меня вот не добавилось ничего, ну и изменений не произошло...

Добавил:
Код
JFactory::getDocument()->addScript( 'http://code.jquery.com/jquery-latest.min.js' );
JFactory::getDocument()->addScriptDeclaration(' jQuery(document).ready(function ($) { $("#item-form").attr("enctype", "multipart/form-data"); }); ');
Строка по добавлению jquery появилась, вторая строка тоже появилась в разделе скриптов. Но вот сам атрибут нифига не появляется в теге form

И вот оно) о чудо) атрибут физически не появился, но... переменная $files теперь содержит инфу) Поменял первую строку и вроде заработало) Буду разбираться, спасибо)
« Последнее редактирование: 06.11.2013, 11:54:31 от Sphinx »
*

Aleks.Denezh

  • Живу я здесь
  • 3401
  • 428 / 4
И вот оно) о чудо) атрибут физически не появился, но... переменная $files теперь содержит инфу) Поменял первую строку и вроде заработало) Буду разбираться, спасибо)
Атрибут через просмотр HTML кода вы естественно не увидите! потому что там не отображается выполнения скриптов! если вы просмотрите через "Просмотр кода элемента" в Chrome то увидите что у формы появится этот атрибут )
*

Sphinx

  • Захожу иногда
  • 72
  • 0 / 0
Атрибут через просмотр HTML кода вы естественно не увидите! потому что там не отображается выполнения скриптов! если вы просмотрите через "Просмотр кода элемента" в Chrome то увидите что у формы появится этот атрибут )
Ок, спасибо. Все работает.
Полезные статейки у вас для работы с файлами, папками и изображениями:
http://ссылка вырезана, так как домен распространяет вирусы/blog/joomla/rabota-s-izobrazheniyami-v-joomla-jimage
http://ссылка вырезана, так как домен распространяет вирусы/blog/joomla/rabota-s-papkami-v-joomla-klass-jfolder
http://ссылка вырезана, так как домен распространяет вирусы/blog/joomla/rabota-s-fajlami-v-joomla-klass-jfile
Без них бы я долго разбирался и искал нужную инфу)
*

Aleks.Denezh

  • Живу я здесь
  • 3401
  • 428 / 4
Ок, спасибо. Все работает.
Не за что )
*

Sphinx

  • Захожу иногда
  • 72
  • 0 / 0
А подскажите еще, как в XML файл добавить параметр к инпуту:
onkeypress="return filter_input(event,/[А-Я0-9]/i)"

Код
<field
  name="test"
  type="text"
  label="test"
  description="test"
  size="20"
  default=""
=/>

Необходимо что бы в итоге получилось:
<input type="text" name="jform[test]" id="test" value="123456789" size="20" onkeypress="return filter_input(event,/[А-Я0-9]/i)"/>
*

Aleks.Denezh

  • Живу я здесь
  • 3401
  • 428 / 4
Только написать свой field который унаследовать от JFieldText
*

Sphinx

  • Захожу иногда
  • 72
  • 0 / 0
Только написать свой field который унаследовать от JFieldText
Нда, как оказывается, геморно модифицировать под свои нужды стандартный компонент материалов( Куда проще и быстрее, по ходу дела, написать свой, заточенный только под свои задачи, компонент....
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Компонент для создания тестов Ari Quiz

Автор alex_noize

Ответов: 0
Просмотров: 1487
Последний ответ 25.02.2016, 20:31:51
от alex_noize
Переименовать com_content

Автор Sergeyy

Ответов: 3
Просмотров: 1376
Последний ответ 18.01.2016, 01:22:21
от dmitry_stas
Сортировка материала в RSS (view.feed.php) по дате создания

Автор bombapiter

Ответов: 7
Просмотров: 2898
Последний ответ 24.10.2014, 10:49:31
от bombapiter
Как проверить существует ли ID материала?

Автор sorrrrry

Ответов: 7
Просмотров: 2529
Последний ответ 15.10.2014, 16:52:58
от SmokerMan
Компонент для подмены файлов ядра jHacksPro

Автор rigin

Ответов: 0
Просмотров: 1359
Последний ответ 04.10.2014, 18:13:40
от rigin