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

platonische

  • Давно я тут
  • 523
  • 2 / 1
  • Парусные экспедиции vk.com/tc670
Как написать запрос с использованием OR в where?
Вот запрос который не работает.

Спойлер
[свернуть]

Если точнее вот этот кусок интресует

Код: php-brief
			$query->where('a.over_image='. $db->q( $this->getState('message.check_status') ).'' );
$query->where('a.over_starttime <= (STR_TO_DATE(\'' . date('Y-m-d H:M:S').'\', \'%Y-%m-%d %H:%i:%s\'))' );
$query->where('( a.over_endtime >= (STR_TO_DATE(\'' . date('Y-m-d H:M:S').'\', \'%Y-%m-%d %H:%i:%s\'))
OR a.over_endtime = (STR_TO_DATE(\'0000-00-00 00:00:00\', \'%Y-%m-%d %H:%i:%s\')) )
');
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Re: SQL запрос в оператором OR в where
« Ответ #1 : 28.11.2016, 01:54:11 »
$query->where('a.over_image='$db->q$this->getState('message.check_status') ) );
$query->where('a.over_starttime <= ' $query->currentTimestamp() );
$query->where('( a.over_endtime >= ' $query->currentTimestamp(). ') OR (a.over_endtime = "0000-00-00 00:00:00")' );


условия для OR и AND заключаются в кавычки

если вы хотите подставить текущее время, то вставьте просто $query->currentTimestamp(), если вы хотите конкретное время задать, то укажите просто строку в известном вам формате, строки указываются в двойных кавычках, $query->currentTimestamp() двойными кавычками обрамлять не надо
пруф: https://api.joomla.org/cms-3/classes/JDatabaseQuery.html
« Последнее редактирование: 28.11.2016, 02:05:20 от AlekVolsk »
*

platonische

  • Давно я тут
  • 523
  • 2 / 1
  • Парусные экспедиции vk.com/tc670
Re: SQL запрос в оператором OR в where
« Ответ #2 : 28.11.2016, 10:36:26 »
Поправлю вас. Структура моя правильная была, а вот в условиях что-то накосячино.

Собственно вот рапрос который отработал правильно:
Код: php-brief
			$query->where('a.over_starttime <=' . $query->currentTimestamp());
$query->where('( a.over_endtime >=' . $query->currentTimestamp().'  OR  a.over_endtime = "0000-00-00 00:00:00" )');
*

Septdir

  • Живу я здесь
  • 3370
  • 168 / 4
Re: SQL запрос в оператором OR в where
« Ответ #3 : 28.11.2016, 12:08:54 »
Код: php-brief
 "0000-00-00 00:00:00"
Так удобнее
Код: php
JFactory::getDbo()->getNullDate()
Ну а для текущий можно так
Код: php
JFactory::getDate()->toSql()
Не можете справиться с задачей сами пишите, решу ее за вас, не бесплатно*.
*Интересная задача, Деньги или Бартер. Натурой не беру!
CodersRank | Контакты | Мой GitHub | Workshop
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Re: SQL запрос в оператором OR в where
« Ответ #4 : 28.11.2016, 15:15:11 »
Так удобнее
Код: php
JFactory::getDbo()->getNullDate()
Ну а для текущий можно так
Код: php
JFactory::getDate()->toSql()
нет, так не удобнее:
1) нафига для нулевой даты делать вызов функции, когда это вообще константное значение
2) $query->currentTimestamp() работает быстрее, работает напрямую в едином пространстве запроса, вариант с фабрикой в данном случае - чуточку через назад
*

Septdir

  • Живу я здесь
  • 3370
  • 168 / 4
Re: SQL запрос в оператором OR в where
« Ответ #5 : 28.11.2016, 15:25:48 »
1) нафига для нулевой даты делать вызов функции, когда это вообще константное значение
Читать да и писать удобнее учитывая что чаще всего пишется так
Код: php
$db->getNullDate()
2) $query->currentTimestamp() работает быстрее, работает напрямую в едином пространстве запроса, вариант с фабрикой в данном случае - чуточку через назад
А оно учитывает высталенную пользователем временную зону, но я тут не уверен, просто в свое время когда учился подглядел это в каком-то компоненте (для publish_up)в от и юзаю с тех пор
Не можете справиться с задачей сами пишите, решу ее за вас, не бесплатно*.
*Интересная задача, Деньги или Бартер. Натурой не беру!
CodersRank | Контакты | Мой GitHub | Workshop
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
Re: SQL запрос в оператором OR в where
« Ответ #6 : 28.11.2016, 15:31:22 »
$query->currentTimestamp() работает быстрее
Еще быстрее: CURRENT_TIMESTAMP() или NOW() :).
Не будь паразитом, сделай что-нибудь самостоятельно!
*

zomby6888

  • Завсегдатай
  • 1473
  • 171 / 3
Re: SQL запрос в оператором OR в where
« Ответ #7 : 28.11.2016, 15:42:17 »
Цитировать
Еще быстрее: CURRENT_TIMESTAMP() или NOW()

Согласен. Почему не использовать функции MySQL? К тому же зачем в одном и том же месте вызывать $query->currentTimestamp() несколько раз. Запишите значение в переменную и используйте ее.
« Последнее редактирование: 28.11.2016, 15:45:54 от zomby6888 »
интернет-блог: http://websiteprog.ru
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Re: SQL запрос в оператором OR в where
« Ответ #8 : 28.11.2016, 21:49:02 »
А оно учитывает высталенную пользователем временную зону, но я тут не уверен, просто в свое время когда учился подглядел это в каком-то компоненте (для publish_up)в от и юзаю с тех пор
да, учитывает

Еще быстрее: CURRENT_TIMESTAMP() или NOW() :).
тоже верно, но тут как раз не учитывается временная зона пользователя )

К тому же зачем в одном и том же месте вызывать $query->currentTimestamp() несколько раз. Запишите значение в переменную и используйте ее.
так же верно, но мне лень было расписывать: я тупо скопипастил строчку и подставил ее вместо того г, что было дано изначально
*

zomby6888

  • Завсегдатай
  • 1473
  • 171 / 3
Re: SQL запрос в оператором OR в where
« Ответ #9 : 28.11.2016, 22:11:19 »
Я посмотрел, эта функция всего лишь обертка для MySQL функции:

https://github.com/joomla/joomla-cms/blob/staging/libraries/joomla/database/query.php#L638

Соответственно и временная зона будет та что установлена в мускуле (по дефолту это время которое установлено на сервере) и оно конечно может отличатся от той зоны что установлена в админке Joomla. Да и кстатии результат еще будет зависеть от типа поля в БД timestamp или datetime. Datetime хранит дату как есть и временную зону не учитывает
« Последнее редактирование: 28.11.2016, 22:23:02 от zomby6888 »
интернет-блог: http://websiteprog.ru
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Re: SQL запрос в оператором OR в where
« Ответ #10 : 28.11.2016, 22:55:51 »
вот хрень... в свое время я наблюдал совсем другой код...
*

b2z

  • Глобальный модератор
  • 7287
  • 778 / 0
  • Разраблю понемногу
Re: SQL запрос в оператором OR в where
« Ответ #11 : 29.11.2016, 10:10:16 »
Datetime хранит дату как есть и временную зону не учитывает
Это да, но по факту всё зависит от того, как туда её запишешь. Часто на форуме всплывает тема с датами и очень многие пишут туда не UTC, что очень плохо.

Если нужно учитывать временную зону, то используйте метод date() класса JHtml, который конвертирует UTC, учитывая настройки.

Временная зона пользователя:
Код: php
$now = JHtml::_('date', 'now', $db->getDateFormat());

Временная зона из админки Joomla:
Код: php
$now = JHtml::_('date', 'now', $db->getDateFormat(), false);

Если чистый UTC, то:
Код: php
$now = JFactory::getDate('now', 'UTC')->toSql();
*

zomby6888

  • Завсегдатай
  • 1473
  • 171 / 3
Re: SQL запрос в оператором OR в where
« Ответ #12 : 29.11.2016, 15:22:12 »
Можно также использовать функцию MySQL UTC_TIMESTAMP(), если при этом на сервере установлена правильная временная зона. Она кстатии должна совпадать с той зоной что установлена в админке чтобы не было никаких проблем.
интернет-блог: http://websiteprog.ru
*

Septdir

  • Живу я здесь
  • 3370
  • 168 / 4
Re: SQL запрос в оператором OR в where
« Ответ #13 : 29.11.2016, 15:23:16 »
Можно также использовать функцию MySQL UTC_TIMESTAMP(), если при этом на сервере установлена правильная временная зона. Она кстатии должна совпадать с той зоной что установлена в админке чтобы не было никаких проблем.
Каждый пользователь в профиле может выставить свою временную отличную от по умолчанию в админке, серверной и даже от зоны выставленной в его ОС, это тоже надо учитывать.

Какой вариант в итоге наиболее верный спорить не буду ибо даты лично для меня всегда были гемором, но почитать дискуссию на тему как же все таки верно, что все учесть с удовольствием почитаю
« Последнее редактирование: 29.11.2016, 15:30:10 от Septdir »
Не можете справиться с задачей сами пишите, решу ее за вас, не бесплатно*.
*Интересная задача, Деньги или Бартер. Натурой не беру!
CodersRank | Контакты | Мой GitHub | Workshop
*

dmitry_stas

  • Легенда
  • 13151
  • 1234 / 8
Re: SQL запрос в оператором OR в where
« Ответ #14 : 29.11.2016, 16:47:52 »
Каждый пользователь в профиле может выставить свою временную отличную от по умолчанию в админке, серверной и даже от зоны выставленной в его ОС, это тоже надо учитывать.
этого никак не учесть :) если юзеру охота жить в -8 при том что реально он живет в +3 и время у него на компьютере +3 - то это его личное дело :)

Какой вариант в итоге наиболее верный спорить не буду ибо даты лично для меня всегда были гемором, но почитать дискуссию на тему как же все таки верно, что все учесть с удовольствием почитаю

верные варианты

Временная зона пользователя:
Код: php
$now = JHtml::_('date', 'now', $db->getDateFormat());

Временная зона из админки Joomla:
Код: php
$now = JHtml::_('date', 'now', $db->getDateFormat(), false);

Если чистый UTC, то:
Код: php
$now = JFactory::getDate('now', 'UTC')->toSql();

главное как уже сказали хранить в UTC, а не во времени юзера, и ни в каком другом чем попало. а если кого то угораздило на сервере иметь не
совпадать с той зоной что установлена в админке
то это тоже уже проблемы не Joomla, теперь это гемор админа, как он будет сохранять в UTC :)
Тут дарят бакс просто за регистрацию! Успей получить!
Все советы на форуме раздаю бесплатно, то есть даром. Индивидуально бесплатно консультирую только по вопросам стоимости индивидуальных консультаций
*

zomby6888

  • Завсегдатай
  • 1473
  • 171 / 3
Re: SQL запрос в оператором OR в where
« Ответ #15 : 29.11.2016, 19:14:11 »
Тип поля timstamp всегда хранит время в UTC и гораздо больше подходит для хранения кратковременных дат. Если время на сервере устновлено правильно и правильно настроена временная зона в php то никаких дополнительно функций не требуется. Я честно незнаю почему разработчики Joomla использует datetime для хранения времени создания и обновления в таблицах и все эти функции преобразования
интернет-блог: http://websiteprog.ru
*

zomby6888

  • Завсегдатай
  • 1473
  • 171 / 3
Re: SQL запрос в оператором OR в where
« Ответ #16 : 30.11.2016, 18:07:02 »
Кстатии, если все же будете пользоваться встроенными функциями Joomla для хранения времени в utc то имейте ввиду:

Код: php
$db = JFactory::getDBO();
$current_timestamp = $db->getQuery(true)->currentTimestamp();
$utc_timestamp = 'UTC_TIMESTAMP()';
$now = JFactory::getDate('now', 'UTC')->toSql();
echo $db->setQuery('SELECT IF('. $current_timestamp .'='. $db->q($now). ', "true", "false" )')->loadResult();     //false
echo $db->setQuery('SELECT IF('. $utc_timestamp .'='. $db->q($now). ', "true", "false" )')->loadResult();         //true

Так как для $utc_timestamp у них встроенного метода нету, то создается ощущение что они сами хранят время не в utc. И вообщем то похоже так и есть:

https://github.com/joomla/joomla-cms/blob/staging/libraries/legacy/table/content.php#L318
« Последнее редактирование: 30.11.2016, 18:19:57 от zomby6888 »
интернет-блог: http://websiteprog.ru
*

b2z

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

zomby6888

  • Завсегдатай
  • 1473
  • 171 / 3
Re: SQL запрос в оператором OR в where
« Ответ #18 : 30.11.2016, 18:26:47 »
Datetime больше подходит для хранения дат или исторический событий типа дней рождения и так далее, где временные зоны не важны. Timestamp помимо того что учитывает временные зоны, имеет еще некоторые встроенные функции для автоматического обновления текущей даты и больше подходит для хранения кратковременных дат: логи, даты создания/обновления. У каждого типа данных своя область применения, поэтому они и сосуществуют вместе, ИМХО.  
« Последнее редактирование: 30.11.2016, 18:31:23 от zomby6888 »
интернет-блог: http://websiteprog.ru
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

SQL запрос с JOIN LEFT use IN

Автор platonische

Ответов: 12
Просмотров: 822
Последний ответ 20.10.2017, 10:57:08
от platonische
Поиск на сайте - SQL запрос

Автор john.deff

Ответов: 11
Просмотров: 1101
Последний ответ 08.08.2016, 10:08:29
от john.deff
Sql запрос JOIN и LIMIT

Автор platonische

Ответов: 6
Просмотров: 1261
Последний ответ 06.04.2016, 14:31:09
от zomby6888
SQL запрос

Автор spirit1086

Ответов: 10
Просмотров: 1366
Последний ответ 13.02.2015, 11:22:53
от spirit1086
[Решено] Post запрос в модели компонента

Автор saharin88

Ответов: 11
Просмотров: 2048
Последний ответ 20.10.2014, 18:09:49
от saharin88