Новости Joomla

Вышел WT Quick links v.2.4.0 - релиз модуля для Joomla

Вышел WT Quick links v.2.4.0 - релиз модуля для Joomla.Это модуль-конструктор для быстрого создания набора элементов. Это могут быть ссылки на компоненты Joomla, пункт меню или пользовательская ссылка. Есть условия для исключений показа элементов списка. Вы можете создавать собственные макеты вывода модуля, создавая таким образом почти всё, что угодно: от простого списка ссылок до стены фотографий на главную страницу или ссылки-теги для перелинковки категорий интернет-магазина, список FAQ, табы или аккордеоны. Модуль позволяет выводить изображения, адаптивные изображения, видео, адаптивные видео.v.2.4.0. Что нового?Добавлена поддержка новых компонентов. Добавлены новые типы ссылок и исключений для них: - Phoca Download, - Phoca Gallery, - RadicalMart (@radicalmart).Joomla 6. Успешно протестирована работа модуля на Joomla 6-alpha2.РазработчикамПроведён большой рефакторинг кода. Для типов ссылок созданы классы-драйверы. Теперь для того, чтобы добавить новый тип ссылки в модуль достаточно скопировать класс-образец из
modules/mod_wt_quick_links/src/Driver/Collection и наполнить его данными по образцу, а так же добавить необходимые языковые константы в панели администратора Joomla.Модуль бесплатный. Страница расширенияGitHub расширенияJoomla Extensions Directory👩‍💻 Подпишись на @joomlafeed.#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

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

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
В общем, Собственно, сабж.

Поясню подробнее. В шаблоне есть кусок кода:
Код
<?php defined('_JEXEC') or die;
if($this->countModules('left and right') == 0) $contentwidth = "_full";
if($this->countModules('left or right') == 1) $contentwidth = "_middle";
if($this->countModules('left and right') == 1) $contentwidth = "_small";
?>
...
Код
     <div class="jr_component">
        <!-- Left -->
        <?php if($this->countModules('left')) : ?>
          <div class="jr_left">
            <jdoc:include type="modules" name="left" style="xhtml" />
          </div>
        <?php endif; ?>
        <!-- short/middle/full) -->
        <div class="jr<?php echo $contentwidth; ?>">
          <jdoc:include type="component" />
        </div>
        <!-- Rigth -->
        <?php if($this->countModules('right')) : ?>
          <div class="jr_right">
            <jdoc:include type="modules" name="right" style="xhtml" />
          </div>
        <?php endif; ?>
        <div class="clr"></div>
      </div>

Так вот:если в позиции left и right ничего нет, и при этом в "jr<?php echo $contentwidth; ?>" тоже ничего не выводится (например, на главной странице избранные материалы – если они отсутствуют, то в "jr<?php echo $contentwidth; ?>" пусто), то "jr_component" вообще показывать не надо.

Как-либо можно такое реализовать?
« Последнее редактирование: 22.12.2013, 14:45:08 от b2z »
*

rudakoff

  • Осваиваюсь на форуме
  • 19
  • 1 / 0
Предлагаю такую реализацию:
Код
        <!-- short/middle/full) -->
        <?php if(!empty($contentwidth)) {?>
        <div class="jr<?php echo $contentwidth; ?>">
          <jdoc:include type="component" />
        </div>
        <?php } ?>
        <!-- Rigth -->
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Увы. Необходимо скрыть весь jr_component.
left и right сейчас пусты, $contentwidht = _full, соответственно, выводится jr_full, причем пустой. Даже если пишу
Код
      <?php if(!empty($contentwidth) and ($this->countModules('left and right') == 0)) : ?>
        <div class="jr_component">
        ...
        </div>
      <?php endif; ?>
все равно выводится.
*

b2z

  • Глобальный модератор
  • 7284
  • 778 / 0
  • Разраблю понемногу
Блин, что-то ничего толкового в голову не приходит... Может через JS как-то? Ну типа проверять наличие определенного id/класса на странице, и если его нет, то не отображать? Правда, если страница будет долго подгружаться, то некрасиво будет.

А с PHP тут вроде никак - компонент инклюдится отдельно.
*

rudakoff

  • Осваиваюсь на форуме
  • 19
  • 1 / 0
Код
print_r($this);
можете показать?
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Не совсем понятно, куда надо воткнуть print_r($this);
Вставил так:
Код
      <?php if(!empty($contentwidth) and ($this->countModules('left and right') == 0)) : ?>
        <?php print_r($this);?>
        <div class="jr_component">
        ...
        </div>
      <?php endif; ?>

получил на выходе перед показом jr_component:
Код
JDocumentHTML Object ( [_links] => Array ( [http://ostrovok.local/] => Array ( [relation] => canonical [relType] => rel [attribs] => Array ( ) ) [/?format=feed&type=rss] => Array ( [relation] => alternate [relType] => rel [attribs] => Array ( [type] => application/rss+xml [title] => RSS 2.0 ) ) [/?format=feed&type=atom] => Array ( [relation] => alternate [relType] => rel [attribs] => Array ( [type] => application/atom+xml [title] => Atom 1.0 ) ) ) [_custom] => Array ( ) [template] => kindersuite [baseurl] => [params] => JRegistry Object ( [data:protected] => stdClass Object ( ) ) [_file] => Z:\home\ostrovok.local\www/templates/kindersuite/index.php [_template:protected] => [_template_tags:protected] => Array ( ) [_caching:protected] => [_html5:JDocumentHTML:private] => [title] => Детский сад №20 «Островок» г. Вольск - Главная [description] => Официальный сайт дошкольного образовательного учреждения (демонстрационная версия) [link] => [base] => http://ostrovok.local/ [language] => ru-ru [direction] => ltr [_generator] => Joomla! - Open Source Content Management [_mdate] => [_tab] => [_lineEnd] => [_charset] => utf-8 [_mime] => text/html [_namespace] => [_profile] => [_scripts] => Array ( [/media/system/js/mootools-core.js] => Array ( [mime] => text/javascript [defer] => [async] => ) [/media/system/js/core.js] => Array ( [mime] => text/javascript [defer] => [async] => ) [/media/system/js/mootools-more.js] => Array ( [mime] => text/javascript [defer] => [async] => ) [/media/plg_system_topofthepage/ScrollSpy-yui-compressed.js] => Array ( [mime] => text/javascript [defer] => [async] => ) [/media/plg_system_topofthepage/smoothscroll.js] => Array ( [mime] => text/javascript [defer] => [async] => ) [/media/plg_system_topofthepage/topofthepage.js] => Array ( [mime] => text/javascript [defer] => [async] => ) [/components/com_jcomments/js/jcomments-v2.3.js?v=12] => Array ( [mime] => text/javascript [defer] => [async] => ) [/components/com_jcomments/libraries/joomlatune/ajax.js?v=4] => Array ( [mime] => text/javascript [defer] => [async] => ) [/media/jui/js/jquery.min.js] => Array ( [mime] => text/javascript [defer] => [async] => ) [/media/jui/js/jquery-noconflict.js] => Array ( [mime] => text/javascript [defer] => [async] => ) [/media/jui/js/jquery-migrate.min.js] => Array ( [mime] => text/javascript [defer] => [async] => ) [/media/system/js/tabs-state.js] => Array ( [mime] => text/javascript [defer] => [async] => ) [/media/system/js/caption.js] => Array ( [mime] => text/javascript [defer] => [async] => ) [/media/jui/js/bootstrap.min.js] => Array ( [mime] => text/javascript [defer] => [async] => ) ) [_script] => Array ( [text/javascript] => window.plg_system_topofthepage_options = {"buttontext":false,"version":"3","scrollspy":"200","opacity":"100","styles":{"opacity":0,"position":"fixed","display":"block","bottom":"0px","right":"0px"},"topalways":true,"smoothscroll":{"duration":"200","transition":"linear"}}; jQuery(window).on('load', function() { new JCaption('img.caption'); }); ) [_styleSheets] => Array ( [/components/com_jcomments/tpl/default/style.css?v=30] => Array ( [mime] => text/css [media] => [attribs] => Array ( ) ) [/templates/kindersuite/css/bootstrap.css] => Array ( [mime] => text/css [media] => [attribs] => Array ( ) ) [/templates/kindersuite/css/template.css] => Array ( [mime] => text/css [media] => [attribs] => Array ( ) ) ) [_style] => Array ( [text/css] => #gototop { margin-right: 20px; width: 41px; height: 28px; background:url(/media/plg_system_topofthepage/images/gotop.png) no-repeat scroll right top transparent; transition:all 0.5s ease-out 0s; zoom:1; cursor: pointer; z-index: 9999; } #gototop:hover { background-position: left bottom; } ) [_metaTags] => Array ( [http-equiv] => Array ( [content-type] => text/html; charset=utf-8 ) [standard] => Array ( [keywords] => [rights] => ) ) [_engine] => [_type] => HTML [mediaVersion:protected] => b9242e4e40653896ef878e428f5dfad9 )
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
$contentwidth по логике вещей пустым быть не может:
Код: php
if($this->countModules('left and right') == 0) $contentwidth = "_full";
if($this->countModules('left or right') == 1) $contentwidth = "_middle";
if($this->countModules('left and right') == 1) $contentwidth = "_small";

if(!empty('jr_'.$contentwidth) тоже не срабатывает

опух уже xD
*

b2z

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

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Пичаль, однаконама...
С js не очень дружен, придется постоянно что-то ставить в избранное. Всем спс за помощь. Ну или хотя бы за ее попытку :)
*

Shustry

  • Гуру
  • 6434
  • 745 / 3
Код: php
$document = JFactory::getDocument();
$buf = strlen(strip_tags($document->getBuffer(component)));

if ($buf > 0) {
//что-то на главной есть
} else {
//пусто
}

*

b2z

  • Глобальный модератор
  • 7284
  • 778 / 0
  • Разраблю понемногу
Код: php
$document = JFactory::getDocument();
$buf = strlen(strip_tags($document->getBuffer(component)));

if ($buf > 0) {
//что-то на главной есть
} else {
//пусто
}


Тогда уж
Код: php
$document->getBuffer('component')


Кстати, $buf > 0 - оно нормально работает? Что там возвращается при $document->getBuffer('component') ?
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
вывод print_r($doc->getBuffer('component')): если 'component' пуст. ничего не выводит, если что-то есть, выводит содержимое с соблюдением разметки и стилей.

Код: php
$buf = strlen(strip_tags($doc->getBuffer(component)));
print_r($buf);

на выходе 6, все шесть символов: #0A
« Последнее редактирование: 21.12.2013, 15:51:01 от AlekVolsk »
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
выставил if($buf > 10), вряд ли контент вместе с разметкой может содержать меньше 10 символов, хотя такое решение не есть хорошо.
*

Shustry

  • Гуру
  • 6434
  • 745 / 3
Тогда уж
Код: php
$document->getBuffer('component')


Кстати, $buf > 0 - оно нормально работает? Что там возвращается при $document->getBuffer('component') ?
Возвращает пустые тэги-обёртки из шаблона компонента, потому strip_tags сделал.
выставил if($buf > 10), вряд ли контент вместе с разметкой может содержать меньше 10 символов, хотя такое решение не есть хорошо.
Что нехорошего в этом решении?
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
по хорошему, надо исключить даже эти 6 символов #0A, откуда они, кстати7
*

Shustry

  • Гуру
  • 6434
  • 745 / 3
Ну у меня их нет, откуда ж мне знать? :) Смотрите:
1. Наличие альтернативных шаблонов в корне вашего шаблона
2. Разметку ком_контента в папке HTML своего шаблона
*

Shustry

  • Гуру
  • 6434
  • 745 / 3
Тогда уж
Код: php
$document->getBuffer('component')

Кстати, $buf > 0 - оно нормально работает? Что там возвращается при $document->getBuffer('component') ?
У меня без экранирования, кстати, работает. Забыл про скобки ординарные. Прям так и работает:
Код: php
$buf = strlen(strip_tags($document->getBuffer(component)));
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
альтернативных шаблонов нет, даже если com_content вырезаю, тоже самое кажет, на чистой системе.
шаблон сам с нуля рисую, могу показать.
*

Shustry

  • Гуру
  • 6434
  • 745 / 3
Проверил, на стандартном выводится 6, если:
Код: php
$buf = strlen(strip_tags($document->getBuffer(component)));
Если:
Код: php
$buf = $document->getBuffer(component);
, то выводится:
string '<div class="blog-featured"></div>

Проверяю с помощью var_dump ($buf);

<div class="blog-featured"></div> находится в
com_content\views\featured\tmpl\default.php

Рабочее решение написано ещё шесть сообщений назад. Даже не знаю, чем ещё помочь. Дайте доступ FTP, сам внедрю.
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
убрал <div class="blog-featured<?//php echo $this->pageclass_sfx;?>">  - не помогло.
jr_component и jr<?php echo $contentwidth; ?> имеют в стилях margin и padding, возможно из-за этого.
остановлюсь на решении if($buf > 10), меня устраивает.

ftp не прокатит, на денвере, я не сторонник выкладывать в сеть недовылизанные решения.

спс за помощь. +
*

Shustry

  • Гуру
  • 6434
  • 745 / 3
Пожалуйста. Шесть этих символов — это переводы строк в стандартном шаблоне. Окончательное решение будет такое:

Код: php
$buf = strlen(trim(strip_tags($document->getBuffer(component))));

Теперь ноль.
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
*

b2z

  • Глобальный модератор
  • 7284
  • 778 / 0
  • Разраблю понемногу
getBuffer(component) - хоть это и работает, так делать нельзя. getBuffer('component') правильней и не надо приучаться к плохому стилю программирования.
*

Shustry

  • Гуру
  • 6434
  • 745 / 3
Есть, шеф.
AlekVolsk, пишите:
Код: php
$buf = strlen(trim(strip_tags($document->getBuffer("component"))));
чтобы уж наверняка.
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Насколько мне известно, синтаксис php подразумевает одинарные кавычки.
Я привык к достаточно строгому синтаксису delphi (по сути, больше 20 лет на паскале), возможно, я просто чего-то не понимаю, но здесь мне несколько дико наблюдать, почему J позволяет подобные "махинации".
На всякий пожарный, одинарные кавычки поставил сразу. но работает и с двойными, и без них вообще.
Сказать, что я в шоке - ничего не сказать... но это уже отдельная тема, эта решена, большое спасибо :)
« Последнее редактирование: 21.12.2013, 22:27:51 от AlekVolsk »
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

[Решено] Зависает установка Joomla на создании таблиц (на 4 шаге)

Автор usersyslog

Ответов: 16
Просмотров: 62546
Последний ответ 30.06.2021, 15:44:51
от AlexFans
[Решено] Создание модуля. Генерировать CSS для каждой копии модуля

Автор eugenes

Ответов: 10
Просмотров: 21602
Последний ответ 13.02.2019, 12:48:40
от passer
[Решено] Отключить двухэтапную авторизацию через MySQL

Автор amino_2012

Ответов: 3
Просмотров: 20863
Последний ответ 07.10.2015, 09:55:58
от amino_2012
[Решено] Как создать сборку на базе Joomla 3.3 ?

Автор Ghash

Ответов: 14
Просмотров: 25181
Последний ответ 17.12.2014, 10:00:13
от b2z
[Решено] Вывод вступительного изображения в модуле Материалы - Новости

Автор kik84

Ответов: 5
Просмотров: 24277
Последний ответ 09.11.2014, 22:23:17
от kik84