Новости 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 Ответов
  • 33627 Просмотров
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
В меню, когда указываешь тип "Материал", появляется возможность выбора этого материала: поле с кнопкой вызова модального окна с формой со списком материалов.
Имеются ли штатные средства J3 для указания в представлении компонента аналогичного поля, только для выбора пользователя, при этом с фильтром и полем поиска в форме (в идеале)?
*

Aleks.Denezh

  • Живу я здесь
  • 3401
  • 428 / 4
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Спс. Это вариант для xml-конфига. А как его добавить в шаблон представления (конфиг или само поле)?

В представлении:
Код: html4strict
    <div class="control-group">
      <div class="controls mfix">
        <label for="cl_login" class="control-label"><?php echo JText::_('COM_MFO_FORM_LOGIN'); ?></label>
        <input class="input_box" id="cl_login" name="cl_login" type="text" size="57" />
        <input class="btn btn-danger" type="button" value="<?php echo JText::_('COM_MFO_FORM_CLLOGIN'); ?>" onclick="ClearLoginButton()"/>
      </div>
    </div>
Как можно input_box заменить на поле со списком выбора пользователя?
« Последнее редактирование: 21.04.2014, 11:18:44 от AlekVolsk »
*

Aleks.Denezh

  • Живу я здесь
  • 3401
  • 428 / 4
Вам нужно при создании пункта меню сделать выбор юзера?
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Нет, в отдельном представлении в своем компоненте.
*

Arkadiy

  • Гуру
  • 5317
  • 463 / 2
  • Крепитесь, други.
Если бы был XML, то просто тип поля указать, а в HTML только взять это поле в другом месте и перенести его код себе.
*

Aleks.Denezh

  • Живу я здесь
  • 3401
  • 428 / 4
Нет, в отдельном представлении в своем компоненте.
Так получается у вас форма же, в которой нужно выбрать это поле, так почему вы не используете XML для формы?
изучите файл libraries/cms/form/field/user.php (это в тройке), там код как вставляется такое поле!
« Последнее редактирование: 21.04.2014, 12:33:27 от Istaan »
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Спс.
Пока не изучил user.php, сделал проверку на корректность ручного ввода логина, будет ли так корректно:
Код: php
  protected function _ClearLoginData()
  {
    $db = JFactory::getDbo();
    $login = $db->quote(JFactory::getApplication()->input->getString('cl_login'));
    $count_users = $db->setQuery('select count(id) from #__users where username = '.$login)->loadAssoc();
    if (($count_users['count'] == 0)||(empty($count_users))) {
      JError::raiseWarning('', JText::_('COM_MFO_FORM_LOGIN_EXIST_ERROR'));
      return false;
    }
    $db->setQuery('DELETE FROM #__mfo_docums WHERE client = '.$login)->execute();
    $db->query();
    $db->setQuery('DELETE FROM #__mfo_accounts  WHERE client = '.$login)->execute();
    $db->query();
    return true;
  }
*

Aleks.Denezh

  • Живу я здесь
  • 3401
  • 428 / 4
Код: php
$cont_users = $db->setQuery('select count(id) from #__users where username = '.$db->quote($login))->loadResult();
if(!$cont_users){
      JError::raiseWarning('', JText::_('COM_MFO_FORM_LOGIN_EXIST_ERROR'));
      return false;
}

Код: php
$db->setQuery('DELETE FROM #__mfo_docums WHERE client = '.$db->quote($login))->execute();
$db->query();
что это? вы два раза выполняете запрос один и тот же!
Сначала  через ->execute(); потом ниже этот же запрос в строке $db->query();! $db->query(); - это тоже самое что и execute();
Оставить просто так:
Код: php
$db->setQuery('DELETE FROM #__mfo_docums WHERE client = '.$db->quote($login))->execute();
$db->setQuery('DELETE FROM #__mfo_accounts  WHERE client = '.$db->quote($login))->execute();
return true;
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
$db->query(); - это тоже самое что и execute();
Вроде бы такая мелочь, а даже об этом толком почитать негде.
Спасибо!
*

Aleks.Denezh

  • Живу я здесь
  • 3401
  • 428 / 4
Вроде бы такая мелочь, а даже об этом толком почитать негде.
Спасибо!
Каким редактором вы пользуетесь для написания скриптов? Просто например в PhpStorm такие методы автоматом подчеркиваются с помощью IDE!
Вот посмотрите:

Видите метод quote перечеркнут! Если наведем на него увидим подсказку "Method query is deprecated" что переводится как "Метод query устарел"!
Если мы с нажатым CTRL нажмем левой кнопкой по перечеркнутому методу query то попадем в в класс JDatabase в котором описан метод query и там будет такое:
Код: php
	/**
* Execute the SQL statement.
*
* @return  mixed  A database cursor resource on success, boolean false on failure.
*
* @since   11.1
* @throws  RuntimeException
* @deprecated  13.1 (Platform) & 4.0 (CMS)
*/
public function query()
{
JLog::add('JDatabase::query() is deprecated, use JDatabaseDriver::execute() instead.', JLog::WARNING, 'deprecated');

return $this->execute();
}
Посмотрите внимательно код метода, и можете почитать комментарии к методу!
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
:( у меня самый начальный уровень новичка (типа "чайник")
notepad++
*

Aleks.Denezh

  • Живу я здесь
  • 3401
  • 428 / 4
:( у меня самый начальный уровень новичка (типа "чайник")
notepad++
Переходите на нормальную среду для разработки )
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
под рукой embarcadero radstudio, в комплекте radphp, но я не знаю, имеется ли там поддержка J?
*

Aleks.Denezh

  • Живу я здесь
  • 3401
  • 428 / 4
под рукой embarcadero radstudio, в комплекте radphp, но я не знаю, имеется ли там поддержка J?
Я же вам уже написал какой редактор считается лучшим для PHP - PhpStorm )
*

zomby6888

  • Завсегдатай
  • 1473
  • 171 / 3
Код: php
$login = "1 OR 1 = 1"
$db->setQuery('DELETE FROM #__mfo_docums WHERE client = '.$db->quote($login))->execute();
поздравляю, ваша таблица пуста))
интернет-блог: http://websiteprog.ru
*

Arkadiy

  • Гуру
  • 5317
  • 463 / 2
  • Крепитесь, други.
под рукой embarcadero radstudio, в комплекте radphp, но я не знаю, имеется ли там поддержка J?
Я же вам уже написал какой редактор считается лучшим для PHP - PhpStorm )
Из бесплатных лучший NetBeans, ну а платный PhpStorm
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Код: php
$login = "1 OR 1 = 1"
$db->setQuery('DELETE FROM #__mfo_docums WHERE client = '.$db->quote($login))->execute();
поздравляю, ваша таблица пуста))
Об этом я спрашивал еще в #81 посте. Отсюда и рассматривается необходимость проверки логина. а еще лучше его выбора из списка (см историю переписки последних 25 постов)
*

Aleks.Denezh

  • Живу я здесь
  • 3401
  • 428 / 4
Код: php
$login = "1 OR 1 = 1"
$db->setQuery('DELETE FROM #__mfo_docums WHERE client = '.$db->quote($login))->execute();
поздравляю, ваша таблица пуста))

Только что выполнил:
Код: php
$login = "1 OR 1 = 1";
$db->setQuery( 'DELETE FROM #__article WHERE title = ' . $db->quote( $login ) )->execute();
print_r( $db->getErrorMsg() );
Почему моя таблица не пуста? Что я делаю не так?
А я могу сказать что я делаю не так!
Строка результирующая увы DELETE FROM dep_article WHERE title = '1 OR 1 = 1' а не как вам хотелось DELETE FROM dep_article WHERE title = 1 OR 1 = 1, и пытается запрос удалить всего лишь строку  '1 OR 1 = 1'..
Так что ваш коварный план, разбился как рыба об лед..
Проверять надо перед тем как такие предположения делать!
« Последнее редактирование: 21.04.2014, 13:55:04 от Istaan »
*

AlekVolsk

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

Aleks.Denezh

  • Живу я здесь
  • 3401
  • 428 / 4
Я, кстати, не вижу логики в "1 OR 1 = 1":
Я выше расписал в чем логика )
Если выполнить запрос:
Код: sql
DELETE FROM prefix_mfo_docums WHERE title = 1 OR 1 = 1
тогда да у нас удалятся все строки из таблицы Но у нас то что передается через $_REQUEST заворачивается Через $db->quote() в кавычки! И на выходе мы имеем запрос такого вида:
Код: sql
DELETE FROM prefix_mfo_docums WHERE title = '1 OR 1 = 1' 
И уже SQL инъекция не срабатывает! Потому что условие в кавычках одинарных и считается строкой ) И запрос совсем другой получается )
*

zomby6888

  • Завсегдатай
  • 1473
  • 171 / 3
ну да точняк в этом и смысл db->qoute(), однако думаю что все же это не панацея . Почему нет в Joomla подготовленных запросов?
интернет-блог: http://websiteprog.ru
*

Aleks.Denezh

  • Живу я здесь
  • 3401
  • 428 / 4
ну да точняк в этом и смысл db->qoute(), однако думаю что все же это не панацея . Почему нет в Joomla подготовленных запросов?
Может потому что это не совсем фреймворк?)
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Мне непонятен сам механизм работы title 1, если title - это строковое поле, то почему не возникает исключение при попытке передачи значения не-строки?
*

Aleks.Denezh

  • Живу я здесь
  • 3401
  • 428 / 4
Мне непонятен сам механизм работы title 1, если title - это строковое поле, то почему не возникает исключение при попытке передачи значения не-строки?
Учловие если title = 1 ИЛИ 1=1 вторая часть запроса всегда верна, и удалится все!
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Во фронте необходимо реализовать следующее.
Одно представление: список договоров юзера. С этим проблем нет, это одна таблица. При двойном клике на строку (конкретный договор) или при выделении строки и нажатии на кнопку необходимо вывести второе представление.
Второе представление: список документов по договору, это другая таблица. Тому самому, что был выделен (по которому был двойной клик) в первом представлении, при этом данные по этому договору (некоторые столбцы первой таблицы) также должны быть отображены.

Как альтернатива.
Оба представления объединяем в одно, документы по договору выводим в модальном окне, или вложенной таблицей сразу под строкой договора.

Как можно реализовать? Представления я нарисую, интересует, как построить модели, таблицы (JTable) и прочее сопутствующее. Где можно образец посмотреть?
*

b2z

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

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Не представляю себе, как связать два представления в данном случае
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Как из модели одной модели модно передать переменную (ее значение) в другую модель?
Через урл возможно такое?
*

passer

  • Завсегдатай
  • 1013
  • 75 / 3
Зачем. Выведите данные из двух моделей/таблиц в одном представлении и все. Или если таблицы связанные то в модели второго представления напишите метод с запросом из двух связанных таблиц (join) и вызовите его в преставлении.
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться