Новости Joomla

SW JProjects v.2.6.1 - компонент каталога расширений для веб-приложений

👩‍💻 SW JProjects v.2.6.1 - компонент каталога расширений для веб-приложений.

Компонент позволяет сделать свой мини-Joomla Extensions Directory - каталог расширений для CMS (не только для Joomla) или файлов. Есть возможность скачивания по лицензионным ключам создания кастомных схем данных для сервера обновлений.

v.2.6.1. Что нового?

  • Правки наследования схем серверов обновлений. Улучшена логика наследования схем серверов обновлений для проектов компонент - категория - проект.
  • Не стабильные релизы в сервере обновлений. Теперь в данные сервера обновлений попадают все версии (alpha, beta и т.д.), а не только stable.
  • Косметические изменения. В шаблоне по умолчанию сделаны замены некоторых CSS-классов, уточнено присвоение атрибутов loading=lazy и fetchpriority.
  • Рефакторинг и правки кода. Текущее обновление кодовой базы.
  • Исправление ошибок.

Больше спасибо за помощь в тестировании участникам нашего сообщества Александру Новикову (@pro_portal) и Александру Судьбинову (@alexrevo).

Событие Pizza, Bugs & Fun - 29-30 января 2026 года.

Событие Pizza, Bugs & Fun  - 29-30  января 2026 года.

Уже несколько лет в мире Joomla проводятся мероприятия "Pizza, Bugs & Fun" (#PBF), где каждый может посвятить несколько часов своего мозгового времени тому, чтобы наша любимая CMS стала ближе к идеалу.

Ссылки на видео и статьи из этого поста рассказывает об организационных вопросах, которые пригодятся для участия в PBF, а так же что и как делать.

В рамках события PBF все желающие могут собираться в общий онлайн чат, обсудить вопросы Joomla и приложить к их разрешению свою руку. Самый классный вариант, когда эта встреча происходит оффлайн: тогда организовывается пицца, напитки по вкусу и несколько часов совместного творчества.

Каждый помогает тем, что он умеет:

  • кто-то пишет недостающую документацию,
  • кто-то пишет код,
  • кто-то тестирует как исправлены ошибки или сделан новый функционал.

На сайте события есть карта, можно "захостить" свою локацию. Практически все движки в мире развиваются за счёт спонсирующих их компаний. Joomla одна из немногих, где развитие идёт только усилиями международного сообщества энтузиастов.

https://www.youtube.com/watch?v=a-FuVKXg_Uw 

На момент написания данного поста в репозитории Joomla 810 открытых Issue (как правило это баги) и 236 Pull request (PR, исправление багов и новый функционал). Все PR обязательно тестируются минимум двумя участниками сообщества, дабы в конечный код движка не проскочила ошибка.

Если каждый из участников только нашего сообщества сделает даже одно тестирование, то, боюсь, PR и Issue на всех не хватит 😀 И ничего не останется нашим коллегам из международных Joomla-чатов.

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

b2z

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

Aleks.Denezh

  • Живу я здесь
  • 3401
  • 428 / 4
В компоненте не используется хелпер, это будет работать без хелпера? Куда тогда код вставить? Или лучше создать хелпер, даже если пустой?
Это не хелпер компонента! Это конфигурация компонента!
Файл config.xml который лежит в administrator/ваш_компонент/config.xml
Результат работы данного файла вы можете увидеть если в любом компоненте нажмете кнопку настройки
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Смутило слово Helper в названии класса, сори.
Где лучше подключать параметры, чтобы были доступны и в модели и в шаблоне представления? Везде сразу? Как будет правильнее?
*

b2z

  • Глобальный модератор
  • 7288
  • 778 / 0
  • Разраблю понемногу
В смысле где? Они итак будут везде доступны, так как способ их получения через JComponentHelper универсален.
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Делаю по примеру отсюда:
Код: php
$xmlstr = <<<XML
<?xml version='1.0' encoding="utf-8"?>
<orginfo>
  <param>query</param>
</orginfo>
XML;

Parse error: syntax error, unexpected T_VARIABLE in /models/load.php
*

zomby6888

  • Завсегдатай
  • 1473
  • 171 / 3
вторая строчка по моему лишняя, я бы вобще XML через DOMDocument парсил, не надо никаких библиотек лишних. Хотя если у Joomla есть нативная поддержка simplexml..
интернет-блог: http://websiteprog.ru
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Да, в J полная поддержка simplexml, как выяснилось, J без simplexml жить не может: все xml-конфиги через simplexml парсятся.

А ларчик просто открывался: 40мин тупил! точку с запятой в конце предыдущей строки не поставил! Старею...
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Я отправил файл на ftp. Через 10 сеукнд мне нужно забрать другой файл с ftp и обработать его. Как можно реализовать тайм-аут на эти 10 секунд?
*

AlekVolsk

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

Не нашел аналог file_exists для ftp.

Думаю, придется считывать список файлов и искать в списке нужный.
« Последнее редактирование: 02.04.2014, 23:08:06 от AlekVolsk »
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Прошу спецов посмотреть и указать на грубые ошибки и слабые места в следующей функции, my_component/models/model_name.php.
Функция формирует файл XML с запросом на данные, отправляет его на ftp, через там-аут забирает с ftp xml-файл-ответ и импортирует данные из него в базу.
Спойлер
[свернуть]
*

zomby6888

  • Завсегдатай
  • 1473
  • 171 / 3
вместо таких страшных конструкций '\''.$org_fullname.'\' , можно использовать $db->quote($org_fullname). Да и данные неплохо бы пофильтровать http://ru2.php.net/manual/ru/function.filter-var.php
интернет-блог: http://websiteprog.ru
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
$db->quote() перед двойными кавычками в переменной ставит \ - недопустимо, есть альтернативное решение?
Про фильтрацию спрашивал ранее, сделали вывод, что не обязательно - данные формируются в 1С, хотя я рассмотрю этот вопрос позднее - даже в 1С могут всякого напихать, были прецеденты.
*

zomby6888

  • Завсегдатай
  • 1473
  • 171 / 3
у $db->quote() есть второй параметр, устанавливаете его в false и он не будет экранировать кавычки внутри строки $db->quote($org_fullname,false)
интернет-блог: http://websiteprog.ru
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
В J3 чем $db->quote() отличается от $db->q()? Блин, нет нормальной литературы по апи на русском...

В общем, разобрался: $db->q() является алиасом для $db->quote()
« Последнее редактирование: 03.04.2014, 08:16:39 от AlekVolsk »
*

b2z

  • Глобальный модератор
  • 7288
  • 778 / 0
  • Разраблю понемногу
В J3 чем $db->quote() отличается от $db->q()? Блин, нет нормальной литературы по апи на русском...

В общем, разобрался: $db->q() является алиасом для $db->quote()
Кстати, использование алиаса медленее, чем использование прямого метода. Было тестирование =) Литература по API готовится. Я сел за перевод документации.
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Литература по API готовится. Я сел за перевод документации.
Я думаю, Вы и сами не представляете, сколько народу будет Вам Благодарно!
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Как в одном представлении/одной модели можно получить доступ к двум таблицам, без join-объединения? Где можно пример посмотреть?
*

b2z

  • Глобальный модератор
  • 7288
  • 778 / 0
  • Разраблю понемногу
Как в одном представлении/одной модели можно получить доступ к двум таблицам, без join-объединения?
Ну если без join, то два разных селекта.
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
А JTable при этом подключать?
По нажатии 2х кнопок в представлении в админке необходимо в модели в 2х разных таблицах удалить данные по условию. Условие в зависимости от нажатой кнопки в модель передается. Как при этом работает JTable? И нужен ли он вообще в данном случае?
*

b2z

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

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Можно рецензию спецов, что не так в этом запросе с безопасностью ($login вводится клиентом в представлении):
Код: php
  {
    $login = JFactory::getApplication()->input->getString('cl_login');
    $db = JFactory::getDbo();
    $query = 'DELETE FROM #__mfo_docums WHERE client = '.$db->quote($login);
    $db->setQuery($query);
    $db->query();
    $query = 'DELETE FROM #__mfo_accounts WHERE client = '.$db->quote($login);
    $db->setQuery($query);
    $db->query();
    return true;
  }
*

b2z

  • Глобальный модератор
  • 7288
  • 778 / 0
  • Разраблю понемногу
С безопасностью все ок, логин экранирован.

Единственное, почему всегда возвращается true? А если вдруг произойдет ошибка при удалении? И еще, если пишите под тройку, до вместо query() лучше использовать execute(), так как query объявлен deprecated.
*

passer

  • Завсегдатай
  • 1013
  • 75 / 3
$login вводится клиентом в представлении
Это значит любой пользователь, вводя произвольный логин (не обязательно свой) может удалять записи из таблиц  #__mfo_docums #__mfo_accounts. Может так и задумано, но настораживает. Ну и если таблицы связанные лучше в транзакцию обьединить.
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Так будет правильно?
Код: php
  {
    $login = JFactory::getApplication()->input->getString('cl_login');
    $db = JFactory::getDbo();
    $query = 'DELETE FROM #__mfo_docums WHERE client = '.$db->quote($login);
    $db->execute($query);
    $query = 'DELETE FROM #__mfo_accounts WHERE client = '.$db->quote($login);
    $db->execute($query);
    return true;
  }
 

Плохо могу представить себе, когда может произойти ошибка при удалении. Разве если только кол-во строк в таблицах WHERE client = $db->quote($login) будет равно нулю? Но и тогда ошибки быть не должно, имхо. Как тогда правильно обрабатывать возможную ошибку?

Это значит любой пользователь, вводя произвольный логин (не обязательно свой) может удалять записи из таблиц  #__mfo_docums #__mfo_accounts. Может так и задумано, но настораживает. Ну и если таблицы связанные лучше в транзакцию обьединить.
Это в админке админ задает - при необходимости - логин пользователя и очищает из балы его данные. Во фронте аналогичные запросы будут (не реализовано пока) выполняться в личном кабинете, при авторизации либо нажатии кнопки "Обновить", когда $login будет равен логину авторизировавшегося пользователя.
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Нашел на виртпросторах:
$db->setQuery($query)->execute();

Для не select-запросов, я правильно понял?
*

Aleks.Denezh

  • Живу я здесь
  • 3401
  • 428 / 4
Плохо могу представить себе, когда может произойти ошибка при удалении. Разве если только кол-во строк в таблицах WHERE client = $db->quote($login) будет равно нулю? Но и тогда ошибки быть не должно, имхо. Как тогда правильно обрабатывать возможную ошибку?
Когда юзер ввел несуществующий cl_login а ему все равно выдало что юзер удален!
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Также на виртпросторах нашел:
Код: php
				$q = 'SELECT `order_stock_handle` FROM `#__virtuemart_orderstates`';
$this->_db->setQuery($q);
$res = $this->_db->execute();
$err = $this->_db->getErrorMsg();
if(empty($res) and empty($err) ){
$q = 'UPDATE `#__virtuemart_orderstates` SET `order_stock_handle`="'.$v.'" WHERE  `order_status_code`="'.$k.'" ;';
$this->_db->setQuery($q);

if(!$this->_db->execute()){
$app = JFactory::getApplication();
$app->enqueueMessage('Error: Install alterTable '.$this->_db->getErrorMsg() );
$ok = false;
}
}
Как возможный пример обработки ошибки, пойдет?


Когда юзер ввел несуществующий cl_login а ему все равно выдало что юзер удален!
А ему ничего не выдает :) пока не выдает...
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Когда юзер ввел несуществующий cl_login а ему все равно выдало что юзер удален!
Если юзер введет несуществующий cl_login, то из таблиц будет удалено 0 строк. Проверка на наличие, существует ли пользователь, не производится. Хотя, имхо, неплохо бы добавить, но как лучше реализовать:
1. просто сделать запрос на кол-во записей 'select count(id) from #__users where username = '.$db->quote($login) и посмотреть, вернет 0 или больше?
2. или же в J имеется спец.функционал для этого?
А то действительно, ошибся в воде на символ, запрос на удаление успешен, а по факту ненужные уже данные до сих пор имеют место быть.
И, кстати, есть информация по несуществующим символам для логинов в J? Может, целесообразнее еще и так:
$db->quote(trim(strip_tags($login)))?
*

b2z

  • Глобальный модератор
  • 7288
  • 778 / 0
  • Разраблю понемногу
Цитировать
select count(id) from #__users where username = '.$db->quote($login)
Да, так можно.

$db->quote(trim(strip_tags($login))) - нет смысла
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться