Новости Joomla

Свои типы полей в Joomla.Это большая тема, о которой можно говорить очень много

Свои типы полей в Joomla.Это большая тема, о которой можно говорить очень много

👩‍💻 Свои типы полей в Joomla.Это большая тема, о которой можно говорить очень много. Самое главное, что возможности применения ограничиваются только вашей больной фантазией. Вы строите интерфейс своего модуля или плагина и вам нужно подтянуть данные из сторонней системы (список чего-нибудь по какому-нибудь API), чтобы сохранить выбранный id в Joomla. Или сделать какую-то проверку и в зависимости от неё показать то или иное сообщение пользователю. Для этого подойдут свои пользовательские типы полей. Интерфейс Joomla по большей части описан в XML-файлах. У каждого из них свои параметры. Некоторые не описаны в документации (manual.joomla.org), поэтому самым любопытным будет полезно заглянуть в собственно файлы фреймворка по пути

libraries/src/Form/FormField.php, а так же в
libraries/src/Form/Fields. У каждого класса поля перечислены его специфические свойства, которые можно описывать в XML. А в своём типе поля вы можете устанавливать эти значения программно. В моём модуле WT Quick links под капотом происходят изменения. Теперь для работы (в админке) ему нужен вспомогательный плагин. А в самом модуле нам бы проверить, а не выключен ли он? В Joomla есть тип поля Note - заметка. Его можно использовать для вывода примечаний.

<field type="note"     name="your_note_for_user"     label="Заголовок примечания"     title="Альтернативный способ для заголовка"     description="Текст примечания"     class="col-12 alert alert-info"     heading="h1"     close="true"/>
heading - указывать уровень заголовка.
close - позволяет закрыть это примечание. В классе поля
libraries/src/Form/Field/NoteField.php описана логика вывода. И в принципе оно нам подходит для нашей задачи. Но оно будет выводить сообщение всегда, а нам нужно только тогда, когда плагин отключён.Поэтому берём и создаём свой класс поля, который мы унаследуем от
NoteField. Это значит, что у нас в руках будет весь инструментарий стандартного поля
Note + то, что мы сами добавим. В XML-манифест добавляем наше поле
<field type="systempluginstatus"      name="systempluginstatus"     addfieldprefix="Joomla\Module\Wtquicklinks\Site\Fields"/>
-
type - имя файла и класса,-
addfieldprefix - указываем namespace к нашему классу, может быть любой нам нужный-
name - нельзя полю без имени...Это означает, что Joomla будет использовать класс поля из файла
modules/mod_wt_quick_links/src/Fields/SystempluginstatusField.php.А в классе поля будет написано следующее:
<?php// namespace для атрибута addfieldprefixnamespace Joomla\Module\Wtquicklinks\Site\Fields;// нельзя напрямую обращаться к этому файлуdefined('_JEXEC') or die;// подключаем родительский класс для переопределенияuse Joomla\CMS\Form\Field\NoteField;use Joomla\CMS\Language\Text;use Joomla\CMS\Plugin\PluginHelper;// имя класса и имя файла точь-в-точьclass SystempluginstatusField extends NoteField{     protected $type = 'Systempluginstatus';     protected function getLabel()          {               // если плагин не включён               if(PluginHelper::isEnabled('system','wtquicklinks')) {                    // меняем свойства родительского класса                    $this->class = 'alert alert-danger w-100';                    $this->element['label'] = '⚠️ А-а-а-а!';                    $this->element['description'] = 'Плагин не включён!!';                    // и просто рендерим его с нашими свойствами                    return parent::getLabel();               }          // А иначе всё хорошо, скрываем поле из виду.          $this->parentclass = 'd-none';          return '';     }}
Просто и удобно. И людям приятно, что о них позаботились и рассказали почему что-то не работает.@webtolkru#joomla #php #webdev #разработка

Обновлена информация в Плане развития Joomla

👩‍💻 Обновлена информация в Плане развития Joomla.Здесь собрана информация о датах релизов, описаны принципы версионирования, указаны ответственные за релизы, а так же даты окончания поддержки релизов. Опираясь на эту информацию вы можете планировать развитие ваших интернет-проектов.👩‍💻 Что нового?⛔️ Joomla 4.Дата окончания исправления ошибок безопасности в версии 4.x - 14 октября 2025г. ⚠️ После этой даты Joomla 4 прекратит получать какие-либо обновления, в том числе безопасности - вообще. Рекомендуем обновить ваши сайты до актуальной Joomla 5.✅ Joomla 5.- Дата окончания исправления ошибок в версии 5.x - 13 октября 2026г.- Дата окончания исправления ошибок безопасности в версии 5.x - 12 октября 2027 года.- Текущая актуальная (на момент написания заметки) версия - 5.3.1.- Опубликовано расписание выхода релизов Joomla 5.4. Стабильный релиз ожидается 14 октября 2025 года.✅ Joomla 6.- Дата окончания исправления ошибок в версии 6.x - 17 октября 2028г.- Дата окончания исправления ошибок безопасности в версии 6.x - 16 октября 2029г.- Опубликовано расписание выхода релизов Joomla 6.0. Стабильный релиз ожидается 14 октября 2025 года.- Для разработчиков уже доступна Joomla 6.0.0-alpha1.✅ Joomla! Framework.Обновлена информация о Joomla! Framework - полноценном PHP-фреймворке для разработки. Он в версиях 1.х и 2.х был самостоятельным параллельным проектом, однако начиная с версии Joomla 4.0 стал её основой. Добавлена информация о Joomla! Framework 3.x, который вышел 6 октября 2023 года. Его можно использовать в тех случаях, когда вам в проекте не нужна CMS Joomla целиком.Подробнее на сайте Joomla-сообщества Joomlaportal.ru#joomla #community

Компания JetBrains рассказала о своей поддержке Joomla

Компания JetBrains рассказала о своей поддержке Joomla

JetBrains - один из мировых лидеров в разработке программного обеспечения для разработчиков. Её программные продукты - это IDE - профессиональные среды разработки, которые отличаются от простого блокнота/редактора с плагинами набором всевозможных инструментов для разработчиков, глубоким анализом кодовой базы, подсказками по ней и по языку программирования, отладкой ошибок и многим-многим другим. Одним из самых известных продуктов компании является IDE PHP Storm, который можно назвать отраслевым стандартом PHP-разработчика.

В статье How PhpStorm Helps Maintain PHP Open-Source Projects: Interviews and Real-World Examples в блоге компании описываются Open Source проекты, которым JetBrains оказывает поддержку (это могут быть бесплатные лицензии для разработчиков для некоммерческих проектов).

В список попали:

  • PHPUnit - фреймворк для unit-тестирования в PHP
  • Doctrine DBAL - библиотека для PHP, которая предоставляет лёгкий и гибкий слой для коммуникации с базой данных. Она поддерживает различные базы данных через единый и согласованный API.
  • CodeIgniter — популярный MVC-фреймворк для разработки на PHP
  • Joomla! - наша любимая CMS.

Эти названия (кроме "Joomla") чаще всего не слышат вебмастера и разработчики обычных сайтов и интернет-магазинов. Но эти названия хорошо знакомы PHP-разработчикам, которые создают сложные и высоконагруженные проекты и микросервисы. То, что Joomla оказалась в одном ряду с такими программными инструментами - делает ей честь.

🙏 За ссылку спасибо участнику нашего сообщества Ринату Кажетову (@rkazhet).

Подпишитесь на @joomlafeed

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

Shustry

  • Гуру
  • 6434
  • 745 / 3
Неоднократно на форуме читал, что…

Код: php
$option = JRequest::getVar('option');

…устарело. И принято так:

Код: php
$input = JFactory::getApplication()->input;
$option = $input->getCmd('option', '');

Можете популярно объяснить, почему?
*

Arkadiy

  • Гуру
  • 5317
  • 463 / 2
  • Крепитесь, други.
Первое скоро уберут из фреймворка, придется переделывать. По функционалу ничем не отличаются.
*

Shustry

  • Гуру
  • 6434
  • 745 / 3
Спасибо. Там и предполагал.
*

Fedor Vlasenko

  • Живу я здесь
  • 3845
  • 733 / 7
  • https://fedor-vlasenko.web.app
И то и другое - это сахар. Причем умереть оба должны за ненадобностью.
Функции фильтрации уже встроены в язык
Фильтрация данных
*

b2z

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

b2z

  • Глобальный модератор
  • 7284
  • 778 / 0
  • Разраблю понемногу
Все равно, не думаю что от этого откажутся. Практически во всех фреймворках есть свой класс, который отвечает за окружение.
*

Fedor Vlasenko

  • Живу я здесь
  • 3845
  • 733 / 7
  • https://fedor-vlasenko.web.app
Код: php-brief
$id = filter_input(INPUT_GET, 'id', FILTER_VALIDATE_INT);
var_dump($id);
твой сайт?id=5
это уже встроено в язык, значит работает быстрее и лучше
*

Aleks.Denezh

  • Живу я здесь
  • 3404
  • 428 / 4
Код: php-brief
$id = filter_input(INPUT_GET, 'id', FILTER_VALIDATE_INT);
var_dump($id);
твой сайт?id=5
это уже встроено в язык, значит работает быстрее и лучше
Федь в тех сайтах где нужна будет такая скорость думаю не будут вообще юзать Joomla )
*

Arkadiy

  • Гуру
  • 5317
  • 463 / 2
  • Крепитесь, други.
И то и другое - это сахар. Причем умереть оба должны за ненадобностью.
Функции фильтрации уже встроены в язык
Фильтрация данных
Прикольное заявление, давайте откажемся от классов работы с базой данных, ведь это все есть в пыхе, давайте откажемся от фреймворков и cms, ведь все это можно написать на пыхе.
*

Fedor Vlasenko

  • Живу я здесь
  • 3845
  • 733 / 7
  • https://fedor-vlasenko.web.app
Цитировать
давайте откажемся от классов работы с базой данных
причем здесь это. Вы пишите все так и не разобравшись. Встроенные в рhp функции и методы фильтрации более продвинуты чем в Joomla
Так как это встроено в сам язык, то соответственно должно работать быстрее и меньше потреблять ресурсов.
и если этот код
Код: php-brief
$input = JFactory::getApplication()->input;
$option = $input->getCmd('option', '');
можно смело заменить на
Код: php-brief
$option = filter_input(INPUT_GET, 'option', FILTER_SANITIZE_STRING);
то почему бы и не заменить. Зачем учить кучу синтаксиса для разных фреймворков и систем если нативного php достаточно.
Да язык развивается и включает в себя лучшие разработки
http://www.php.net/manual/ru/appendices.php
Вы столкнулись с новыми возможностями языка
*

Arkadiy

  • Гуру
  • 5317
  • 463 / 2
  • Крепитесь, други.
Вот и я о том-же, зачем учить способы общения с базой данных разных фреймворков когда можно просто и гораздо более производительно
Код
mysql_connect('localhost', 'mysql_user', 'mysql_password')
и дальше в том-же духе.
Я не думаю что разработчики Joomla глупы и не используюь очевидное, скорее наоборот, я допущу, вы чего-то недопонимаете, иначе вы бы писали cms, а разработчики Joomla флеймили на форумах т.к. ваш ответ в рамках заданного в топике вопроса кроме как флеймом никак не назвать.
*

Fedor Vlasenko

  • Живу я здесь
  • 3845
  • 733 / 7
  • https://fedor-vlasenko.web.app
Arkadiy, изучайте документацию php. Приведенный вами код 2раза используется в Joomla.
Еще раз при проектировании движка данных функций может и не было или не рассматривались.
Когда "сахар" дает меньше возможностей языка от этого сахара нужно избавляться.
И да я пишу свой маленький велосипед вот тут вы да угадали. В данном случае время нас рассудит
И почему вы считаете показ альтернативных подходов флеймом.
Многие этого не знали, пропустили, да и не всегда успеваешь гнаться за новыми подходами в программировании
*

varX

  • Живу я здесь
  • 2465
  • 141 / 5
  • разработка компонентов
Я всегда отдаю предпочтение стандарту php, чем функциям Joomla. Элементарно, чтобы улучшить совместимость расширений в нестабильном фреймворке. Просто нужно понимать, когда нужно писать JRequest::getVar('option');, а когда можно $_GET['option'];.

По теме, основных различий два:
1. Количество символов в записи, соответственно 33 против 18;
2. Шансы, на то что первая функция проживет дольше выше.
Разработка и ремонт. VirtueMart. JoomShopping. Свои компоненты. Принимаю заявки на plasma-web.ru.
*

Aleks.Denezh

  • Живу я здесь
  • 3404
  • 428 / 4
Я всегда отдаю предпочтение стандарту php, чем функциям Joomla. Элементарно, чтобы улучшить совместимость расширений в нестабильном фреймворке. Просто нужно понимать, когда нужно писать JRequest::getVar('option');, а когда можно $_GET['option'];.
Что бы улучшить совместимость расширений в нестабильном фреймворке лучше уж писать под разные ветки, разный расширения, либо писать апдейты сразу, ато как посмотришь порой код таких расширений где такой подход как вы используют и хочется взять и сделать так:
*

varX

  • Живу я здесь
  • 2465
  • 141 / 5
  • разработка компонентов
Вы какую-то ерунду написали про какой-то подход.  Подход существует только один и определяется общепринятыми нормами составления кода. А вот чрезмерное использование классов Joomla, там где они не нужны, это плохие нормы кодирования, кроме того программисты, не знакомые с CMC Joomla, вообще в восторге.
Разработка и ремонт. VirtueMart. JoomShopping. Свои компоненты. Принимаю заявки на plasma-web.ru.
*

Aleks.Denezh

  • Живу я здесь
  • 3404
  • 428 / 4
Вы какую-то ерунду написали про какой-то подход.  Подход существует только один и определяется общепринятыми нормами составления кода. А вот чрезмерное использование классов Joomla, там где они не нужны, это плохие нормы кодирования, кроме того программисты, не знакомые с CMC Joomla, вообще в восторге.
В тоже время есть стандарты кодирования для системы, и когда видишь в компоненте собственную реализацию кучу  плюшек которая есть в стандартном пакете системы, когда пишут свой класс для вывода списка записей и притуливают свою пагинацию, это вообще фейспалм.. А программисты незнакомые с Joomla пусть с ней познакомятся или сидят на другой системе! Потому что уже видел сайты после таких программистов, когда главку определяют на 40 строк кода...
*

varX

  • Живу я здесь
  • 2465
  • 141 / 5
  • разработка компонентов
В тоже время есть стандарты кодирования для системы, и когда видишь в компоненте собственную реализацию кучу  плюшек которая есть в стандартном пакете системы, когда пишут свой класс для вывода списка записей и притуливают свою пагинацию, это вообще фейспалм.. А программисты незнакомые с Joomla пусть с ней познакомятся или сидят на другой системе! Потому что уже видел сайты после таких программистов, когда главку определяют на 40 строк кода...

Напишите несколько популярных компонентов, попробуйте их поддерживать, погоняйтесь за всеми новыми релизами Joomla. По другому, не поймете.
Разработка и ремонт. VirtueMart. JoomShopping. Свои компоненты. Принимаю заявки на plasma-web.ru.
*

Aleks.Denezh

  • Живу я здесь
  • 3404
  • 428 / 4
Напишите несколько популярных компонентов, попробуйте их поддерживать, погоняйтесь за всеми новыми релизами Joomla. По другому, не поймете.
В ветках 1.7-3.x это не проблема, изменения будут в основном косметические!
Но они не будут вызывать панику и программиста который решит выполнить наработку в этом компоненте, когда разраб пытается в одном компоненте впихнуть все что бы работало в 1.0-3.х
*

Shustry

  • Гуру
  • 6434
  • 745 / 3
Фигасе холивар развернулся. Мне всегда такая форма записи нравилась, чисто из эстетических соображений: $option = JRequest::getVar('option'); Почему её убирают из Joomla? Из соображений безопасности?
*

varX

  • Живу я здесь
  • 2465
  • 141 / 5
  • разработка компонентов
Фигасе холивар развернулся. Мне всегда такая форма записи нравилась, чисто из эстетических соображений: $option = JRequest::getVar('option'); Почему её убирают из Joomla? Из соображений безопасности?


Думаю, просто избавляются от дублирующего содержимого, и пытаются привести код к одинаковому написанию.
Разработка и ремонт. VirtueMart. JoomShopping. Свои компоненты. Принимаю заявки на plasma-web.ru.
*

b2z

  • Глобальный модератор
  • 7284
  • 778 / 0
  • Разраблю понемногу
Фигасе холивар развернулся. Мне всегда такая форма записи нравилась, чисто из эстетических соображений: $option = JRequest::getVar('option'); Почему её убирают из Joomla? Из соображений безопасности?
Новые классы в Joomla 2.5 CMS
*

Fedor Vlasenko

  • Живу я здесь
  • 3845
  • 733 / 7
  • https://fedor-vlasenko.web.app
Мне всегда такая форма записи нравилась, чисто из эстетических соображений: $option = JRequest::getVar('option');
Выпиливать дерьмо трудно ибо на него все мухи слетаются
Что видно из JRequest::getVar('option');
какая то статическая функция класса JRequest,.
Более понятнее здесь
Код: php-brief
$option = filter_input(INPUT_GET, 'option', FILTER_SANITIZE_STRING);
я четко беру переменную из GET   'option' и фильтрую ее как строковую.
Все понятно в синтаксисе, не надо никаких догадок
Это должно однозначно войти в новые версии Joomla
И да об этом я уже написал, думаю через пол-года год дойдет
https://groups.google.com/forum/#!topic/joomla-dev-general/_R-PNIu6cCk
Кому синтаксис не нравится и непонятен?
Ведь это красиво. Это пример здесь используются регулярные выражения поэтому решение данной задачи можно написать лучше.
Код: php-brief
$data = filter_input_array(INPUT_GET,
array(
'option'=> array(
'filter' => FILTER_VALIDATE_REGEXP,
'flags'  => FILTER_NULL_ON_FAILURE,
'options'=> array('regexp'=>'/^com_content$/i')
),
'view' => array(
'filter' => FILTER_VALIDATE_REGEXP,
'flags'  => FILTER_NULL_ON_FAILURE,
'options'=> array('regexp'=>'/^category$/i')
),
'layout'=> array(
'filter' => FILTER_VALIDATE_REGEXP,
'flags'  => FILTER_NULL_ON_FAILURE,
'options'=> array('regexp'=>'/^blog$/i')
)
)
);
$showBlog = in_array(NULL, $data) === false;
 
if($showBlog):
//Код будет исполнятся в блоге категории
endif;
 
Mark Dexter
Цитировать
That's an interesting idea...
*

b2z

  • Глобальный модератор
  • 7284
  • 778 / 0
  • Разраблю понемногу
Федор, предложить одно, но кто это будет делать? Не хочешь попробовать? Как раз в Joomla 4 можно будет нарушить обратную совместимость. Кстати Марк пишет об JFilterInput, а не о JRequest/JInput.
*

b2z

  • Глобальный модератор
  • 7284
  • 778 / 0
  • Разраблю понемногу
Кстати, завязалось обсуждение. Don Gilbert пытается объяснить Федору в чем минус использования JInput.

Вкратце - filter_input не работает с измененными значениями в $_GET, $_POST, $_REQUEST, $_SERVER и $_ENV.
*

Fedor Vlasenko

  • Живу я здесь
  • 3845
  • 733 / 7
  • https://fedor-vlasenko.web.app
Вкратце - filter_input не работает с измененными значениями в $_GET, $_POST, $_REQUEST, $_SERVER и $_ENV.
Именно так. Потому как JInput также не делает этого
Единственно что он записывает так это
Код: php-brief
$app->input->get->set('task', 'add'); //мне одному кажется что эта строка длинная и воняет
//записывает в $_REQUEST
// и это эквивалентно
$_REQUEST['task'] = 'add';
Код: php-brief
$inp = new JInput();
$inp->set('test', 100);
echo '<pre>';
echo '<h2>GET</h2>';
print_r($_GET);
echo '<h2>POST</h2>';
print_r($_POST);
echo '<h2>REQUEST</h2>';
print_r($_REQUEST);
echo '</pre>';
die;
*

b2z

  • Глобальный модератор
  • 7284
  • 778 / 0
  • Разраблю понемногу
Федор, но дальше ты уже не можешь использовать filter_input:
Код: php
$_REQUEST['task'] = 'add';

print_r($_REQUEST) выдаст add, но если в task до этого было установлено другое значение, то filter_input(INPUT_GET, 'task', FILTER_SANITIZE_STRING); выдаст не add, а другое значение.
*

Shustry

  • Гуру
  • 6434
  • 745 / 3
Как всё-таки грамотней всего получить значения: компонент, вид, лэйаут, темплейт?
*

b2z

  • Глобальный модератор
  • 7284
  • 778 / 0
  • Разраблю понемногу
Как всё-таки грамотней всего получить значения: компонент, вид, лэйаут, темплейт?
На данный момент:
Код: php
$input = JFactory::getApplication()->input;
$option = $input->getCmd('option', '');
*

Shustry

  • Гуру
  • 6434
  • 745 / 3
А зачем второй пустой атрибут в getCmd?
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Использование JFactory в подключаемых php файлах

Автор oopros

Ответов: 3
Просмотров: 2480
Последний ответ 29.11.2016, 15:25:12
от b2z
Вопрос по PROFILER и JFactory

Автор Haybul

Ответов: 2
Просмотров: 1820
Последний ответ 02.08.2014, 04:33:57
от Haybul
[Решено] Что лучше, что правильно JHtml::метод(параметры) или JHtml::_(метод, параметры)?

Автор MansEL

Ответов: 7
Просмотров: 1547
Последний ответ 01.07.2014, 18:24:15
от b2z
Joomla 3.1 не находит JRequest. Не работает AJAX!

Автор justquestion

Ответов: 2
Просмотров: 3417
Последний ответ 11.10.2013, 12:42:08
от Aleks.Denezh
Как прикрепить файл к письму через форму input type="file"?

Автор DiEV

Ответов: 15
Просмотров: 9562
Последний ответ 09.06.2013, 10:02:10
от Aleks.Denezh