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

DaGGeR

  • Осваиваюсь на форуме
  • 36
  • 0 / 0
Цитировать
Другие теги так не надо! Просто!
$body .= "<b>Уважаемый администратор!</b>";

а если выводит так: <b>Уважаемый администратор!</b>
то вы выводите либо в textarea
либо вы обернули где то в htmlspecialchars
все равно так и выводит : <b>Уважаемый администратор!</b>
еще раз повторюсь, сам текст сообщения выводится в теге <pre>, а точнее в <pre class="pre_message">
*

Aleks.Denezh

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

DaGGeR

  • Осваиваюсь на форуме
  • 36
  • 0 / 0
Код
<ul class="adminformlist">
<li>От Super User</li>

<li>Отправлено. 30.11.-0001</li>

<li>Тема Сообщение </li>

<li>Сообщение <pre class="pre_message">&lt;b&gt;Уважаемый администратор!&lt;/b&gt;
Строка текста:
</pre></li>
</ul>
вот что выводит
*

Aleks.Denezh

  • Живу я здесь
  • 3401
  • 428 / 4
ну вот видите у вас строка сохраняется в замененными скобочками < и > на &lt; и &gt;
А это значит что вы скорее всего где то пропустили перед сохранением строку через htmlspecialchars
*

DaGGeR

  • Осваиваюсь на форуме
  • 36
  • 0 / 0
ну вот видите у вас строка сохраняется в замененными скобочками < и > на &lt; и &gt;
А это значит что вы скорее всего где то пропустили перед сохранением строку через htmlspecialchars
хз, зашел в БД, там хранится текст как надо "<b>Уважаемый администратор!</b>"
ладно, не суть, спасибо)

вот другой вопрос еще появился: нужно передать в БД время, когда юзер оправил свои данные.
чтобы не плясать с бубном, какая функция в Joomla за время отвечает?или проще средствами php самому уж накатать?
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
какая функция в Joomla за время отвечает?
Текущее время для sql-запроса:
$db->quote(JFactory::getDate()->toSql())
*

Aleks.Denezh

  • Живу я здесь
  • 3401
  • 428 / 4
хз, зашел в БД, там хранится текст как надо "<b>Уважаемый администратор!</b>"
ладно, не суть, спасибо)
А как вы выводите?
*

DaGGeR

  • Осваиваюсь на форуме
  • 36
  • 0 / 0
А как вы выводите?
как вы и говорили, так и выводил, но уже не важно, ибо придется ковырять в самой Joomla где-то вывод, и исправлять, короче забил я)
*

DaGGeR

  • Осваиваюсь на форуме
  • 36
  • 0 / 0
ещё вопрос: как средствами Joomla узнать ID администратора?для отправки сообщения присваиваю вручную, но хотелось бы универсальности
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
А зачем Вам id админа? послать письмо ему? тогда уж получайте сразу его email. Админов, в т.ч. супер-админов может быть несколько, а вот в случае чего, J будет посылать письмо тому супер-админу, который изначально устанавливал систему, получить его email:
$query 'select email from #__users where sendemail = 1 order by id limit 1';
Во всяком случае, крайне редко бывает более одного супер-админа.
Можно более сложно:
$query 'select u.email from #__users u, #__user_usergroup_map m where (u.sendemail = 1) and ((m.group_id = 8) and (u.id = m.user_id)) order by u.id limit 1';
Здесь 8 - id группы супер-админов, как правило, никогда не меняется. Гарантированно получите email первого в списке пользователей супер-админа, у которого установлен флаг отправки ему системных сообщений с сайта, как правило он и есть тот, кто ставил систему изначально.

Здесь есть подводный камень: email этим самым супер-админом может быть указан левый...
« Последнее редактирование: 13.05.2014, 13:06:09 от AlekVolsk »
*

DaGGeR

  • Осваиваюсь на форуме
  • 36
  • 0 / 0
А зачем Вам id админа? послать письмо ему? тогда уж получайте сразу его email. Админов, в т.ч. супер-админов может быть несколько, а вот в случае чего, J будет посылать письмо тому супер-админу, который изначально устанавливал систему, получить его email:
$query 'select email from #__users where sendemail = 1 order by id limit 1';
Во всяком случае, крайне редко бывает более одного супер-админа.
Можно более сложно:
$query 'select u.email from mfo_users u, mfo_user_usergroup_map m where (u.sendemail = 1) and ((m.group_id = 8) and (u.id = m.user_id)) order by u.id limit 1';
Здесь 8 - id группы супер-админов, как правило, никогда не меняется. Гарантированно получите email первого в списке пользователей супер-админа, у которого установлен флаг отправки ему системных сообщений с сайта, как правило он и есть тот, кто ставил систему изначально.

Здесь есть подводный камень: email этим самым супер-админом может быть указан левый...
это всё конечно здорово, спасибо, но нужно узнать именно ID супер админа, он один у меня всегда.
письмо то формирую во встроенную почту Joomla
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Пожалуйста:
$query 'select u.id from #__users u, #__user_usergroup_map m where (m.group_id = 8) and (u.id = m.user_id) order by u.id limit 1';
Гарантированно именно супер-админ, первый в списке (а вдруг - гипотетически - еще один заведется?)

PS: если не секрет, а как вы получаете адрес встроенной почты J?
« Последнее редактирование: 13.05.2014, 13:05:45 от AlekVolsk »
*

DaGGeR

  • Осваиваюсь на форуме
  • 36
  • 0 / 0

PS: если не секрет, а как вы получаете адрес встроенной почты J?
да не секрет конечно, просто формирую запрос в таблицу сообщений с нужными значениями полей, и профит)
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Хмм, а текст запроса?
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Здесь 8 - id группы супер-админов, как правило, никогда не меняется.
Дополнение: я не знаю, какая у вас версия J, с 2.5 не работал, значение 8 актуально для 3.x, для 2.5 посмотрите в базе самостоятельно.
*

DaGGeR

  • Осваиваюсь на форуме
  • 36
  • 0 / 0
Хмм, а текст запроса?
ну я там в фунуции делаю, но смысл поймёте)

Код
$params = JComponentHelper::getParams( 'com_form' );
    
    $recipient = $params->get( 'recipient' );
    
    $subject = $params->get( 'subject' );
    
    $table = $this->getTable( 'messages' );
    
    $archiveData = array(
        'subject' => 'Сообщение,
'user_id_from' => '42',
'user_id_to' => '42',
'folder_id' => '0',
        'message' => $body
    );
    
    $table->bind( $archiveData );
я не во все поля значения передаю, ибо не доделал, но полей там всего 9:
message_id, user_id_from, user_id_to, folder_id, date_time, state, priority, subject, message
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Спасибо.
*

zomby6888

  • Завсегдатай
  • 1473
  • 171 / 3
Код: php
<?php echo "admin_id = ".array_pop(Jaccess::getUsersByGroup(8)); ?>
« Последнее редактирование: 13.05.2014, 13:28:14 от zomby6888 »
интернет-блог: http://websiteprog.ru
*

DaGGeR

  • Осваиваюсь на форуме
  • 36
  • 0 / 0
Спасибо.
да вам тоже спасибо)
*

DaGGeR

  • Осваиваюсь на форуме
  • 36
  • 0 / 0
Код: php
<?php echo "admin_id = ".array_pop(Jaccess::getUsersByGroup(8)); ?>
спасибо)
*

DaGGeR

  • Осваиваюсь на форуме
  • 36
  • 0 / 0
возникла ещё одна проблемка, хотел сделать валидацию формы не на стороне сервера, а на стороне клиента, добавил JHtml::_( 'behavior.formvalidation' ); но при нажатии на кнопку открывается страница с каракулями...привожу код ниже, что я сделал не то?
Код
<?php

defined( '_JEXEC' ) or die;
?>
<div class="item-page">
<h1>Форма</h1>

<form action="<?php echo JRoute::_( 'index.php?view=form' )?>" method="post" class="form-validate">

<div class="control-group form-inline">
            <div class="control-label"><?php echo $this->form->getLabel( 'fam' ); ?></div>
            <div class="controls"><?php echo $this->form->getInput( 'fam' ); ?></div>
        </div>

<div class="control-group form-inline">
            <div class="control-label"><?php echo $this->form->getLabel( 'name' ); ?></div>
            <div class="controls"><?php echo $this->form->getInput( 'name' ); ?></div>
        </div>


<input type="hidden" name="task" value="form.save" />
        <input type="submit" value="Отправить" />
        <?php echo JHtml::_( 'behavior.formvalidation' ); ?>
</form>
</div>
*

zomby6888

  • Завсегдатай
  • 1473
  • 171 / 3
включите отображение ошибок
интернет-блог: http://websiteprog.ru
*

DaGGeR

  • Осваиваюсь на форуме
  • 36
  • 0 / 0
включите отображение ошибок
как раз таки отображение ошибок включено, но выдает "Неверный параметр"
вот и весь бред в этом...
*

zomby6888

  • Завсегдатай
  • 1473
  • 171 / 3
А кстатии кнопка отправки формы там вроде должна иметь класс validate. может в этом дело:
Код: php
<button type="submit" class="validate">Submit form</button>
ссылку можете скинуть на страничку с формой?
интернет-блог: http://websiteprog.ru
*

DaGGeR

  • Осваиваюсь на форуме
  • 36
  • 0 / 0
ссылку можете скинуть на страничку с формой?
я на денвере делаю)
заменил кнопку, теперь кроме иероглифов выдало:
Спойлер
[свернуть]
*

zomby6888

  • Завсегдатай
  • 1473
  • 171 / 3
На это можно не обращать внимания
интернет-блог: http://websiteprog.ru
*

DaGGeR

  • Осваиваюсь на форуме
  • 36
  • 0 / 0
На это можно не обращать внимания
а в чём тогда ошибка?  :o
*

zomby6888

  • Завсегдатай
  • 1473
  • 171 / 3
Ну ваш компонент ее возможно неправильно обрабатывает. Содержимое вашего контроллера хотябы покажите. Кстатии он у вас в какой кодировке сохранен?
интернет-блог: http://websiteprog.ru
*

DaGGeR

  • Осваиваюсь на форуме
  • 36
  • 0 / 0
Ну ваш компонент ее возможно неправильно обрабатывает. Содержимое вашего контроллера хотябы покажите. Кстатии он у вас в какой кодировке сохранен?
кодировка UTF(без BOM)

ну а контроллер пользовательской части вот:
Код
<?php


defined( '_JEXEC' ) or die;


class FormController extends JControllerLegacy
{


function display( $cachable = false, $urlparams = array() )
{
$this->default_view = 'archives';
parent::display( $cachable, $urlparams );
}

}
« Последнее редактирование: 15.05.2014, 18:05:15 от DaGGeR »
*

DaGGeR

  • Осваиваюсь на форуме
  • 36
  • 0 / 0
вот ещё проблема, пытался добавить капчу по этому уроку http://ссылка вырезана, так как домен распространяет вирусы/blog/joomla/uroki-po-sozdaniyu-komponentov-dlya-joomla-chast-5-sozdanie-svoego-polya
версия Joomla у меня 2.5, в итоге при отправке данных ошибка Fatal error: Call to a member function get() on a non-object
ругается на строку
Код
 $data = $this->input->post->get( 'jform', array(), 'array' );
хотель бы узнать, что не так?

так же привожу весь код контроллера формы
Код
<?php

defined( '_JEXEC' ) or die;

jimport( 'joomla.application.component.controllerform' );


class FormControllerForm extends JControllerForm
{


function __construct( $config = array() )
{
$this->view_list = 'result';
parent::__construct( $config );
}


public function allowSave()
{
return true;
}


public function save( $key = null, $urlVar = null )
{
   
    $app = JFactory::getApplication();
    $data = $this->input->post->get( 'jform', array(), 'array' );
    $model = $this->getModel();
    $form = $model->getForm( $data, false );
    $validData = $model->validate( $form, $data );
    $recordId = $this->input->getInt( $urlVar );
    $context = "$this->option.edit.$this->context";
    $session = JFactory::getSession();
    if ( (int)$session->get( 'mycaptcha' )!= (int)$data['mycaptcha'] ) {
        $app->setUserState( $context . '.data', $validData );
        $this->setError( JText::sprintf( 'Неверная сумма цифр', $this->getModel()->getError() ) );
        $this->setMessage( $this->getError(), 'error' );
        $this->setRedirect(
            JRoute::_(
                'index.php?option=' . $this->option . '&view=' . $this->view_item
                . $this->getRedirectToItemAppend( $recordId, $urlVar ), false
            )
        );
 
        return false;
    }
    return parent::save( $key, $urlVar );
}
}
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться