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

serrggeee

  • Осваиваюсь на форуме
  • 16
  • 0 / 0
jdoc:include type="head"
« : 08.10.2015, 13:05:57 »
Здравствуйте у меня в шаблоне есть такой тег <jdoc:include type="head" />, этот тег генерирует javascript на странице в части head. Мне нужно отредактировать этот код, не знаю как сделать, где этот класс определяется я нашел в вайле head.php
Код
class JDocumentRendererHead extends JDocumentRenderer
вот когд где создается js
Код
// Generate script declarations
foreach ($document->_script as $type => $content)
{
$buffer .= $tab . '<script type="' . $type . '">' . $lnEnd;

// This is for full XHTML support.
if ($document->_mime != 'text/html')
{
$buffer .= $tab . $tab . '<![CDATA[' . $lnEnd;
}

$buffer .= $content . $lnEnd;

// See above note
if ($document->_mime != 'text/html')
{
$buffer .= $tab . $tab . ']]>' . $lnEnd;
}
$buffer .= $tab . '</script>' . $lnEnd;
}

как я понимаю все данные лежет в базе судя по вот этому foreach ($document->_script as $type => $content), объясните как эго поменять.
*

Grigory S.

  • Давно я тут
  • 658
  • 70 / 0
  • (с)
Re: jdoc:include type="head"
« Ответ #1 : 08.10.2015, 13:46:31 »
А что именно вам нужно отредактировать?

Сюда попадают всё js, которые подключены через
Код: php
JFactory::getDocument()->addScript('...');
JHtml::_('script', '...');
Не задав правильный вопрос, невозможно получить правильный ответ.
Для "спасибок" существует кнопочка "+".
*

serrggeee

  • Осваиваюсь на форуме
  • 16
  • 0 / 0
Re: jdoc:include type="head"
« Ответ #2 : 08.10.2015, 14:08:37 »
а как я могу его редактировать?
*

Grigory S.

  • Давно я тут
  • 658
  • 70 / 0
  • (с)
Re: jdoc:include type="head"
« Ответ #3 : 08.10.2015, 14:12:53 »
Можно написать плагин, и перед рендером страницы изменять как хотите.
Не задав правильный вопрос, невозможно получить правильный ответ.
Для "спасибок" существует кнопочка "+".
*

serrggeee

  • Осваиваюсь на форуме
  • 16
  • 0 / 0
Re: jdoc:include type="head"
« Ответ #4 : 08.10.2015, 15:01:26 »
вы наверное не поймете, у меня в head есть код js он уже сформирован, вот я хочу его подправить, но не пойму как он формируется, зачем чтото переделывать
*

Grigory S.

  • Давно я тут
  • 658
  • 70 / 0
  • (с)
Re: jdoc:include type="head"
« Ответ #5 : 08.10.2015, 15:04:50 »
Так вы нормально пишите что вы хотите. Смотрите откуда js-ка подключается, и редактируйте.
Не задав правильный вопрос, невозможно получить правильный ответ.
Для "спасибок" существует кнопочка "+".
*

serrggeee

  • Осваиваюсь на форуме
  • 16
  • 0 / 0
Re: jdoc:include type="head"
« Ответ #6 : 08.10.2015, 16:09:43 »
нет там не подключается а формируется прям в техах head
*

Grigory S.

  • Давно я тут
  • 658
  • 70 / 0
  • (с)
Re: jdoc:include type="head"
« Ответ #7 : 08.10.2015, 16:31:12 »
...
А что за код? Joomla, или сторонних расширений?

P.S. Покажите кусок кода, надоело вытягивать с вас информацию, ведь по сути это вам нужно.
Не задав правильный вопрос, невозможно получить правильный ответ.
Для "спасибок" существует кнопочка "+".
*

serrggeee

  • Осваиваюсь на форуме
  • 16
  • 0 / 0
Re: jdoc:include type="head"
« Ответ #8 : 08.10.2015, 16:49:30 »
Код: javascript
<script type="text/javascript">

window.addEvent('domready', function() {

SqueezeBox.initialize({});
SqueezeBox.assign($$('a.modal'), {
parse: 'rel'
});
});
function keepAlive() { var myAjax = new Request({method: "get", url: "index.php"}).send();} window.addEvent("domready", function(){ keepAlive.periodical(840000); });
Calendar._DN = new Array ("Воскресенье", "Понедельник", "Вторник", "Среда", "Четверг", "Пятница", "Суббота", "Воскресенье"); Calendar._SDN = new Array ("Вс", "Пн", "Вт", "Ср", "Чт", "Пт", "Сб", "Вс"); Calendar._FD = 0; Calendar._MN = new Array ("Январь", "Февраль", "Март", "Апрель", "Май", "Июнь", "Июль", "Август", "Сентябрь", "Октябрь", "Ноябрь", "Декабрь"); Calendar._SMN = new Array ("Янв", "Фев", "Март", "Апр", "Май", "Июнь", "Июль", "Авг", "Сен", "Окт", "Нояб", "Дек"); Calendar._TT = {};Calendar._TT["INFO"] = "О календаре"; Calendar._TT["ABOUT"] =
 "DHTML Date/Time Selector\n" +
 "(c) dynarch.com 2002-2005 / Author: Mihai Bazon\n" +
"For latest version visit: http://www.dynarch.com/projects/calendar/\n" +
"Distributed under GNU LGPL.  See http://gnu.org/licenses/lgpl.html for details." +
"\n\n" +
"Выбор даты:\n" +
"- Чтобы выбрать год, используйте кнопками < и > \n" +
"- Чтобы выбрать месяц воспользуйтесь кнопками < и > \n" +
"- Удерживайте кнопку мыши на любой из кнопок, расположенных выше, для быстрого выбора.";
Calendar._TT["ABOUT_TIME"] = "\n\n" +
"Time selection:\n" +
"- Click on any of the time parts to increase it\n" +
"- or Shift-click to decrease it\n" +
"- or click and drag for faster selection.";

Calendar._TT["PREV_YEAR"] = "Нажмите, что бы перейти на предыдущий год. Нажмите и удерживайте для показа списка лет."; Calendar._TT["PREV_MONTH"] = "Нажмите, что бы перейти на предыдущий месяц. Нажмите и удерживайте для показа списка месяцев."; Calendar._TT["GO_TODAY"] = "Текущая дата"; Calendar._TT["NEXT_MONTH"] = "Нажмите, что бы перейти на следующий месяц. Нажмите и удерживайте для показа списка месяцев."; Calendar._TT["NEXT_YEAR"] = "Нажмите, что бы перейти на следующий год. Нажмите и удерживайте для показа списка лет."; Calendar._TT["SEL_DATE"] = "Выбор даты."; Calendar._TT["DRAG_TO_MOVE"] = "Потяните, чтобы переместить"; Calendar._TT["PART_TODAY"] = "Сегодня"; Calendar._TT["DAY_FIRST"] = "Показывать первые %s"; Calendar._TT["WEEKEND"] = "0,6"; Calendar._TT["CLOSE"] = "Закрыть"; Calendar._TT["TODAY"] = "Сегодня"; Calendar._TT["TIME_PART"] = "Shift + клик или перетаскивание мышкой позволит изменить значение."; Calendar._TT["DEF_DATE_FORMAT"] = "%Y-%m-%d"; Calendar._TT["TT_DATE_FORMAT"] = "%a, %b %e"; Calendar._TT["WK"] = "нед."; Calendar._TT["TIME"] = "Время:";
window.addEvent('domready', function() {
$$('.Tips1').each(function(el) {
var title = el.get('title');
if (title) {
var parts = title.split('::', 2);
el.store('tip:title', parts[0]);
el.store('tip:text', parts[1]);
}
});
var JTooltips = new Tips($$('.Tips1'), { maxTitleChars: 50, className: 'djcf_label', fixed: false});
});

jQuery(function(){

plupload.addI18n({
'Select files' : 'Загру
*

Grigory S.

  • Давно я тут
  • 658
  • 70 / 0
  • (с)
Re: jdoc:include type="head"
« Ответ #9 : 08.10.2015, 17:11:04 »
libraries\joomla\html\html\behavior.php
Не задав правильный вопрос, невозможно получить правильный ответ.
Для "спасибок" существует кнопочка "+".
*

serrggeee

  • Осваиваюсь на форуме
  • 16
  • 0 / 0
Re: jdoc:include type="head"
« Ответ #10 : 08.10.2015, 21:10:15 »
да разобраться будет трудновато но как я понимаю эта функия добавляется в конец каждой для ее вызова
protected static function _getJSObject($array = array())
   {
      // Initialise variables.
      $object = '{';

      // Iterate over array to build objects
      foreach ((array) $array as $k => $v)
      {
         if (is_null($v))
         {
            continue;
         }

         if (is_bool($v))
         {
            if ($k === 'fullScreen')
            {
               $object .= 'size: { ';
               $object .= 'x: ';
               $object .= 'window.getSize().x-80';
               $object .= ',';
               $object .= 'y: ';
               $object .= 'window.getSize().y-80';
               $object .= ' }';
               $object .= ',';
            }
            else
            {
               $object .= ' ' . $k . ': ';
               $object .= ($v)? 'true' : 'false';
               $object .= ',';
            }
         }
         elseif (!is_array($v) && !is_object($v))
         {
            $object .= ' ' . $k . ': ';
            $object .= (is_numeric($v) || strpos($v, '\\') === 0)? (is_numeric($v))? $v : substr($v, 1) : "'" . $v . "'";
            $object .= ',';
         }
         else
         {
            $object .= ' ' . $k . ': ' . JHtmlBehavior::_getJSObject($v). ',';
         }
      }
Код: javascript

*

serrggeee

  • Осваиваюсь на форуме
  • 16
  • 0 / 0
Re: jdoc:include type="head"
« Ответ #11 : 08.10.2015, 21:37:13 »
как я понимаю вот этот метод
Код: javascript
public static function uploader()
{
return;
}
а объявляется он здесь что бы была возможность добить к нему то что я написал в предыдущем сообщении?
*

Grigory S.

  • Давно я тут
  • 658
  • 70 / 0
  • (с)
Re: jdoc:include type="head"
« Ответ #12 : 08.10.2015, 22:12:23 »
А что вы вообще хотите сделать?
Не задав правильный вопрос, невозможно получить правильный ответ.
Для "спасибок" существует кнопочка "+".
*

serrggeee

  • Осваиваюсь на форуме
  • 16
  • 0 / 0
Re: jdoc:include type="head"
« Ответ #13 : 08.10.2015, 22:56:28 »
Хочу отредактировать форму и сделать ограничение на загрузку в одну фотографию. Вот нашел функцию которая выводит
эту форму getUploader создал такую же с другим название getUploader1 но в итоге получаю
Код
Fatal error: Call to undefined method DJUploadHelper::getUploader1() in /home/p313923/public_html/agr/components/com_djclassifieds/views/additem/tmpl/default_logo.php on line 56
хотя я ее же определил . вот как осуществляется вызов
Код: php
$this->uploader1 = DJUploadHelper::getUploader1('uploader1', $settings1);
*

kasper9820

  • Захожу иногда
  • 127
  • 4 / 6
  • ...ISponsor!
Re: jdoc:include type="head"
« Ответ #14 : 03.02.2016, 12:41:56 »
Подскажите несколько вопросов. Никак не поборю head

Как в шаблоне ...index.php вывести пути к файлам, которые попадают в head (или как понять от куда они туда попадают)?
Как исключить и хеада скрипты и стили, которые подключаютя из самих модулей, плагинов и т.д. JFactory::getDocument()->addScript('...'); - не всему голова.

Как реализовать это
Код
на событие onbeforecompilehead в котором прописать условие:
$app=JFactory::getApplication();
if ( $app->isAdmin() ) {  ...  }

хочу в результате разложить хеад по полочкам, т.к. при использовании разных к. м. п. глюков немеряно
*

zomby6888

  • Завсегдатай
  • 1473
  • 171 / 3
Re: jdoc:include type="head"
« Ответ #15 : 04.02.2016, 17:50:09 »
Если собираетесь писать плагин читайте мануалы по созданию плагина

https://cmscafe.ru/docs/joomla/developer/plugin-joomla-2-5-joomla-3

В нем вы можете получить массив скриптов, стилей, содержимое буфера модулей, компонента.
Код: php
...
function onBeforeCompileHead ()
{
$app = JFactory::getApplication();
if($app->isAdmin()) {
//бекенд
} else {
//фронтенд
}

$doc = JFactory::getDocument();
var_dump($doc->_scripts);         //массив внешних скриптов, ключами которого являются пути к файлам
var_dump($doc->_script);          //массив inline скриптов
var_dump($doc->_styleSheets); //массив внешних стилей, ключами которого являются пути к файлам
var_dump($doc->_style);        //массив inline стилей

$buffer = $doc->getBuffer();
$component = $buffer['component'];   //содержимое компонента
$modules = $buffer['modules'];           //содержимое модулей
}
...

С содержимым самого шаблона чуть сложнее, так как класс JDocumentHTML хранит содержимое шаблона в защищенном свойстве _template. Тут варианты либо использовать отражения, либо отрендерить файл шаблона самостоятельно, по его пути. Чтобы получить все скрипты которые захардкодили в шаблон, модуль, или компонент придется распарсить их содержимое с помощью регулярных выражений или каким нибудь XML парсером, например моим любимым DOMDocument.
« Последнее редактирование: 04.02.2016, 17:54:17 от zomby6888 »
интернет-блог: http://websiteprog.ru
*

chuga

  • Новичок
  • 6
  • 0 / 0
Re: jdoc:include type="head"
« Ответ #16 : 18.05.2016, 16:48:38 »
Скажите, а как можно переместить  JavaScript и CSS, как рекомендует https://developers.google.com/speed/pagespeed/insights/?hl=ru&url=https%3A%2F%2Fclipso.by%2F&tab=desktop
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Как сделать рабочим {loadposition} или jdoc:include в com_content?

Автор Amigo9876

Ответов: 5
Просмотров: 2147
Последний ответ 31.07.2020, 16:49:37
от tigra-uki
Ошибка 500: - Представление не найдено [name, type, prefix]: annotations, HTML, fgosView

Автор sergeybatmanov

Ответов: 0
Просмотров: 1367
Последний ответ 16.03.2017, 13:48:58
от sergeybatmanov
Как вставить метатег в head не через index.php?

Автор smls

Ответов: 0
Просмотров: 946
Последний ответ 23.05.2016, 07:53:35
от smls
500 - Обнаружена ошибка. Представление не найдено [name, type, prefix]: cpanel, HTML, cpanelView

Автор Alex_Ivanov

Ответов: 0
Просмотров: 1351
Последний ответ 07.09.2015, 15:01:22
от Alex_Ivanov
Настройка head.php

Автор Artorius

Ответов: 10
Просмотров: 2158
Последний ответ 26.04.2015, 16:29:16
от Artorius