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

olejenya

  • Захожу иногда
  • 218
  • 3 / 0
Component+Ajax+json
« : 18.09.2013, 15:53:18 »
Привет всем. Помогите разобраться в структуре и как что правильно подключить.
У меня есть страница категорий из нее я передаю ID товара
Спойлер
[свернуть]
Почитав про компоненты и AJAX я в контролере добавил  код каторый мне надо для записи в сесию и вывода сообщений .
Спойлер
[свернуть]
и собственно сам скрипт которым я хотел это реализовать.
Спойлер
[свернуть]
Но вот когда я проверяю запрос у фаербаге, то вкладка JSON не появляеться и страница пустая ниче не передаеться.Что я не так делаю ?Куда рыть дальше?
*

SmokerMan

  • Гуру
  • 5291
  • 720 / 26
Re: Component+Ajax+json
« Ответ #1 : 18.09.2013, 16:39:43 »
1. Зачем сессию стартовать не понятно, она и так стартуется при инициализации приложения.
2. В конце метода контроллера должен быть die(json_encode($json));
3. Из ссылки убрать '&format=raw'
4. Не надо ни на какие вкладки смотреть, надо смотреть ответ, который приходит на запрос. Вкладка консоль.

*

olejenya

  • Захожу иногда
  • 218
  • 3 / 0
Re: Component+Ajax+json
« Ответ #2 : 18.09.2013, 17:07:56 »
1. Зачем сессию стартовать не понятно, она и так стартуется при инициализации приложения.
2. В конце метода контроллера должен быть die(json_encode($json));
3. Из ссылки убрать '&format=raw'
4. Не надо ни на какие вкладки смотреть, надо смотреть ответ, который приходит на запрос. Вкладка консоль.


Спасибо.
1.убрал.
2.заменил.
3.Убрал
4.Ответа не было.Поменял конструкцию на такую
Спойлер
[свернуть]
То сечас записывает в сесию переменные.Вопрос как мне вывести сообщения, типа что товар уже добавлен или успешно добавлен?
-----
пытаюсь написать правильные условия .

-------------
спасибо за подсказки.Все кажеться работает.Особо не тестил.но AJAX отправляет сообщения проверок возвращает, в сесию записываться.Вот код.Мб что то Неправильно и надо подредактировать?
Спойлер
[свернуть]
Хочу сразу спросить за такую же реализацию токо в модуле?Как в нем обновить?Там уже сразу будет выводиться сесия.Так как сообщения и проверка берет на себя компонент .Дайте ссылочку полезную)
« Последнее редактирование: 18.09.2013, 18:08:58 от olejenya »
*

Aleks.Denezh

  • Живу я здесь
  • 3404
  • 428 / 4
Re: Component+Ajax+json
« Ответ #3 : 18.09.2013, 19:52:07 »
у вас неправильна логика, вы должны отдавать не строку а JSON
например
Код: php
public function add() {
  if ((!in_array($_POST['product_id'], $_SESSION['ids'])) && (count($_SESSION['ids'])<= 3) )
    $this->showJSON(true, 'Tovar bul uspeshno dobavlen');
  } else {
         if (!in_array($_POST['product_id'], $_SESSION['ids'])) {
              $this->showJSON(false,'Limit tovarov dlya sravneniya ravno 4');
            }else {
               $this->showJSON(false, 'Etot tovar bul dobavlen ranie');
            }           
      }
}

public function showJSON($result, $message=''){
echo json_encode(array('result'=>$result, 'message'=>$message));
exit;
}

и JavaScript
Код: javascript
function addToCompare(product_id) {
$.getJson('index.php?option=com_compare&task=add&product_id=' + product_id, function(json){
if(json.result){
//выполняем что то если действия успешны
}
else{
//выполняем что то если действия неудачны
}
alert(json.message)
});
}
*

olejenya

  • Захожу иногда
  • 218
  • 3 / 0
Re: Component+Ajax+json
« Ответ #4 : 18.09.2013, 22:32:00 »
у вас неправильна логика, вы должны отдавать не строку а JSON
например
Код: php
public function add() {
  if ((!in_array($_POST['product_id'], $_SESSION['ids'])) && (count($_SESSION['ids'])<= 3) )
    $this->showJSON(true, 'Tovar bul uspeshno dobavlen');
  } else {
         if (!in_array($_POST['product_id'], $_SESSION['ids'])) {
              $this->showJSON(false,'Limit tovarov dlya sravneniya ravno 4');
            }else {
               $this->showJSON(false, 'Etot tovar bul dobavlen ranie');
            }           
      }
}

public function showJSON($result, $message=''){
echo json_encode(array('result'=>$result, 'message'=>$message));
exit;
}

и JavaScript
Код: javascript
function addToCompare(product_id) {
$.getJson('index.php?option=com_compare&task=add&product_id=' + product_id, function(json){
if(json.result){
//выполняем что то если действия успешны
}
else{
//выполняем что то если действия неудачны
}
alert(json.message)
});
}
Спасибо большое.Это как раз то что я и хотел изначально.Но не понимал как джейсон задействовать.Сейчас буду пробовать.И можно сразу вопрос.Если мне кроме меседжа надо вывести например тайтл, как это сделать?
*

Aleks.Denezh

  • Живу я здесь
  • 3404
  • 428 / 4
Re: Component+Ajax+json
« Ответ #5 : 18.09.2013, 22:55:45 »
Спасибо большое.Это как раз то что я и хотел изначально.Но не понимал как джейсон задействовать.Сейчас буду пробовать.И можно сразу вопрос.Если мне кроме меседжа надо вывести например тайтл, как это сделать?
всего лишь добавляете новую переменную, например:
Код: php
public function showJSON($result, $message='', $title=''){
echo json_encode(array('result'=>$result, 'message'=>$message, 'title'=>$title));
exit;
}
тоесть по сути вам надо сформировать асоциированный массив который вы прогоните через json_encode b отдадите (просто ради интереса в строке браузера введите
yoursite.com/index.php?option=com_compare&task=add&product_id=1 и посмотрите что там выводит )

а дальше в скрипте $.getJson('index.php?option=com_compare&task=add&product_id=' + product_id, function(json){alert(json.tille})
тоесть json точка и ключ из массива который вы отдали скриптом )
*

olejenya

  • Захожу иногда
  • 218
  • 3 / 0
Re: Component+Ajax+json
« Ответ #6 : 18.09.2013, 22:59:01 »
Спасибо.2 дня гуглил, сегодня решил написать на форуме и вот оно счастье))А то я принимаю HTML, а без json_encode передает весь HTML.Но теперь как бы все ясно, ща буду переписывать и вникать, что бы отложилось в макушке))
*

Aleks.Denezh

  • Живу я здесь
  • 3404
  • 428 / 4
Re: Component+Ajax+json
« Ответ #7 : 18.09.2013, 23:02:15 »
Спасибо.2 дня гуглил, сегодня решил написать на форуме и вот оно счастье))А то я принимаю HTML, а без json_encode передает весь HTML.Но теперь как бы все ясно, ща буду переписывать и вникать, что бы отложилось в макушке))
незачто, вы там про модуль спрашивали выше вроде, так что бы из модуля AJAX послать вам нужно будет к компоненту стучаться (точно так же как и из компонента) либо в плагин!
*

olejenya

  • Захожу иногда
  • 218
  • 3 / 0
Re: Component+Ajax+json
« Ответ #8 : 18.09.2013, 23:23:13 »
незачто, вы там про модуль спрашивали выше вроде, так что бы из модуля AJAX послать вам нужно будет к компоненту стучаться (точно так же как и из компонента) либо в плагин!
Нет мне не из модуля послать.А наобороть в модуль и без перезагрузки обновлять.Если выводить те самые продукты из сесии.
Ваш скрипт показывает ошибку, а мой категорчески не хочет выводить JASON, но в ответах он есть.
Ваша ошибка в скрипте
ypeError: jQuery.getJson is not a function

-------
все работает.Еще раз спасибо.Вопрос.Я теперь  в шаблоне могу из сесии спокойно вытягивать все что мне надо?Это правильно?Тему не закрываю))Еще есть моудль и вывод самого щаблона в котором надо будет удлять из сесии и обновлять или скрывать ID.
« Последнее редактирование: 18.09.2013, 23:35:15 от olejenya »
*

Aleks.Denezh

  • Живу я здесь
  • 3404
  • 428 / 4
Re: Component+Ajax+json
« Ответ #9 : 19.09.2013, 00:29:55 »
все работает.Еще раз спасибо.Вопрос.Я теперь  в шаблоне могу из сесии спокойно вытягивать все что мне надо?Это правильно?Тему не закрываю))Еще есть моудль и вывод самого щаблона в котором надо будет удлять из сесии и обновлять или скрывать ID.
Да вы можете вытягивать из сессии данные где вам угодно )
а модуль вам не обязательно же весь обновлять, допустим у вас есть строка в модуле:
<div class="cart-info">В вашей корзине товаров: <strong>10</strong> на сумму <span>2000</span>руб.</div>
никто же вам не мешает в json сформировать данные в виде строки array('message'=>'lala', 'result'=>$result, 'module'=>'<strong>11</strong> на сумму <span>2200</span>руб.')
а дальше как получите данные банально:
$('.cart-info').html(json.module);
*

olejenya

  • Захожу иногда
  • 218
  • 3 / 0
Re: Component+Ajax+json
« Ответ #10 : 20.09.2013, 16:59:54 »
Столкнулся с такой проблемой как вывод картинки в модуль.Притом я пытаюсь передать путь к картинки.Но что то ничего не получается.Помогите пожалуйста))
понял сам свои ошибки))
« Последнее редактирование: 20.09.2013, 18:04:09 от olejenya »
*

olejenya

  • Захожу иногда
  • 218
  • 3 / 0
Re: Component+Ajax+json
« Ответ #11 : 24.09.2013, 23:20:22 »
Привет Istaan .Спасибо за помощь с компонентом и модулем все работает.Теперь вот хочу обратно побаловаться аяксом и решением проблемы как быстрый просмотр.
1.Пытался сделать штатными средствами Joomla.Возвращает в айфрейме и все скрипты почему то перестают работать.В плагинах фенсибокс все тоже.
2.Решил сделать это через компонент.Но мне надо возвращать много инфы и плюс постройка через условия выводы циклы.и как потом все запихнуть в переменную и вывести?Мб это и Неправильно?
Вопрос можно по такой методики как с джейсоном только вывести уже в штмл?
То есть я сделаю разметку, по вывожу все что мне надо и при аяксе возвращаю на страницу категорий этот штмл в виде быстрого просмотра?И сразу вопрос.Как быть со скриптами?Их при аяксе надо как то обновлять?
3.Потом решил попытаться вывести через плагин.Создал поагин, в нем файлик AJAX.В скрипте указал путь  к файлику.Проверил выводит ли штмл.Все вывело.Потом когда попытался через PHP выводить.ТО все пустая страница.Как праильно надо ?Посоветуйте))
*

b2z

  • Глобальный модератор
  • 7284
  • 778 / 0
  • Разраблю понемногу
Re: Component+Ajax+json
« Ответ #12 : 25.09.2013, 22:41:12 »
olejenya - создайте отдельную тему, не надо все в одной спрашивать.
*

olejenya

  • Захожу иногда
  • 218
  • 3 / 0
Re: Component+Ajax+json
« Ответ #13 : 25.09.2013, 23:03:39 »
olejenya - создайте отдельную тему, не надо все в одной спрашивать.
Та я уже их по на создавал и нигде ответа нет((Даже у вас на блоге запись сделал))
*

b2z

  • Глобальный модератор
  • 7284
  • 778 / 0
  • Разраблю понемногу
Re: Component+Ajax+json
« Ответ #14 : 25.09.2013, 23:11:29 »
Ну значит никто не знает ответа, а кто знает еще не прочитал тему.
*

olejenya

  • Захожу иногда
  • 218
  • 3 / 0
Re: Component+Ajax+json
« Ответ #15 : 03.02.2015, 22:01:52 »
Привет еще раз, появилась проблема с возвратом контента.
В общем думал все работает норм.Но когда в описание вставляешь картинку, то при обработке аяксом, выдает ошибку :
Путь не найден "
и возвращает картинку
<img src="images/joomla_black.gif" alt="" />
Понтяно, что путь не найден из за index.php/en/ , почему обращение идет к картинке вот именно с таким путем??И как сделать правильно и нормально

Код
jQuery.ajax({
url: 'index.php?action=test',
type: 'get',
data: 'product_id=' + product_id,
success: function (data) {
                    jQuery('#quick_view_popup').html(data);
}
сам плагин

public function onAfterRender(){
if (!defined('DS')) define('DS', DIRECTORY_SEPARATOR);

$input = JFactory::getApplication()->input;
if($input->getCmd('action')!== 'test'){
return;
}
$region = $input->getInt('product_id', 0);
if ($region) {
                  код возвращает, вывожу переменуую контента
               }
}

*

Aleks.Denezh

  • Живу я здесь
  • 3404
  • 428 / 4
Re: Component+Ajax+json
« Ответ #16 : 04.02.2015, 00:34:42 »
<img src="<?php echo JUri::base(); ?>images/joomla_black.gif" alt="" />
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Как закрыть страницу сайт/index.php/component/users/?view=registration?

Автор alentero

Ответов: 6
Просмотров: 10507
Последний ответ 07.11.2015, 00:02:16
от Vol^T
Создание поиска c json ответом

Автор OmniWizard

Ответов: 8
Просмотров: 1424
Последний ответ 16.12.2013, 21:09:35
от OmniWizard
Красивая подсказка с помощью hasTip + AJAX

Автор Aeliot

Ответов: 7
Просмотров: 1389
Последний ответ 07.11.2013, 16:43:15
от Aeliot
Использование AJAX в Joomla 2.5/3.0

Автор platonische

Ответов: 2
Просмотров: 5329
Последний ответ 28.05.2013, 01:27:50
от platonische
AJAX и Joomla

Автор skyer

Ответов: 31
Просмотров: 7035
Последний ответ 22.11.2011, 01:08:43
от skyer