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

jem777

  • Завсегдатай
  • 1666
  • 119 / 2
« Последнее редактирование: 18.10.2010, 05:10:57 от jem777 »
*

jem777

  • Завсегдатай
  • 1666
  • 119 / 2
Далее по отображению и интеграции... Мы будем выводить аватар юзера под приветствием. Он будет кликабельный и вести на профиль юзера. Если аватара нет, то выводим изображение по умолчанию.

В папке шаблона вашего сайта находим папку html (если нет, то создать). В этой папке создаем папку mod_login и копируем туда файл default.php из modules\mod_login\tmpl\default.php. Если такой файл уже есть, то работать прямо с ним. Это темплейт стандартного модуля входа Joomla.

Открываем файл default.php и идем на строку 11 находим:

Код
echo JText::sprintf( 'HINAME', $user->get('username') );

и после него вставляем:

Код
        <?php if($user->get('avatar')) {
  echo "<br /><br /><div><a href='";
  echo JURI::root();
  echo "index.php?option=com_user&view=user&task=edit'><img src='";
  echo $user->get('avatar');
  echo "' heigth=65 width=65/></a></div><br />";
  }
  else {
  echo "<br /><br /><div><a href='";
  echo JURI::root();
  echo "index.php?option=com_user&view=user&task=edit'><img src='images/no_avatar.png' heigth=65 width=65 /></a></div><br />";
  }
?>

Аватар должен отображаться под приветствием. Если он не загружен, отображается аватар по умолчанию. Клик по аватару ведет на страницу редактирования параметров юзера. Если у вас используется SEF, то можете вручную ввести ссылку на страницу юзера или вообще убрать ссылку.
« Последнее редактирование: 29.05.2010, 12:00:56 от jem777 »
*

jem777

  • Завсегдатай
  • 1666
  • 119 / 2
Далее по отображению и интеграции... делаем интеграцию с JComments

Ставим сам компонент, модуль отображения последних комментариев (если нужно) и главное плагин для отображения аватар.

После заходим в админку и:

Цитата: Цитата с сайта
В административной панели настроек компонента JComments выполните следующие действия:
На закладке «Общие» установите для параметра «Поддержка плагинов» значение «Да». Этот параметр отвечает за загрузку сторонних плагинов для компонента JComments, в том числе и плагина аватаров (если установлен).
На закладке «Права» нужным группам пользователей установите права на просмотр аватаров. Чтобы разрешить выбранной группе пользователей просматривать аватары необходимо установить галочку у параметра «Показывать Gravatar».
Сохранить настройки компонента.

Гостям и зарегистрированным юзерам сайта ставим разрешить просмотр аватаров.
Далее идем в папку плагинов и открываем plugins\jcomments\jcomments.avatar.php и plugins\jcomments\jcomments.avatar.xml

1. В файле jcomments.avatar.xml перед строкой:

Код
<option value="agora">Agora Forum</option>

вставляем:
 
Код
<option value="com_user">Com_User</option>

2. В файле jcomments.avatar.php после строки 358 вставляем:

Код
case 'com_user':
        if (count($users)) {
        $db->setQuery('SELECT id, avatar FROM #__users WHERE id in (' . implode(',', $users)  . ')');
        $avatars = $db->loadObjectList('id');
unset($users);
} else {
$avatars = array();
}

for ($i=0,$n=count($comments); $i < $n; $i++) {
$userid = (int) $comments[$i]->userid;

// profile link
$comments[$i]->profileLink = $userid ? JRoute::_('index.php?option=com_user&view=user&task=edit' . $userid) : '';

// avatar
        if (isset($avatars[$userid]) && $avatars[$userid]->avatar != '') {
$comments[$i]->avatar = plgJCommentsAvatarImg($mainframe->getCfg('live_site'). '/'. $avatars[$userid]->avatar);
} else {
$comments[$i]->avatar = '';
        }
}
unset($avatars);
break;

Все. Сразу идем в админку и в параметрах плагина JComments - Avatar Источник аватаров указываем на Com_User. В поле No Avatar выбираем Custom image и в Custom NoAvatar image вставляем ссылку на наш аватар по умолчанию - images/no_avatar.png
Если получилось, то в комментариях должны отображаться аватары юзеров.

Далее если поставили модуль вывода последних комментариев, то в админке в параметрах модуля JComments Latest найти Поддержка плагинов - Да и Показывать аватары - Да. Размер указываем там же. Все.
« Последнее редактирование: 29.05.2010, 12:15:49 от jem777 »
*

viroff

  • Осваиваюсь на форуме
  • 42
  • 0 / 0
  • потому что не все йогурты одинаково полезны...
респект. Штуку вы выложили интересную, мне хоть и не это непосредственно необходимо, но на умные мысли навело! за это +1.
щас копаю как раз загрузку файла.
« Последнее редактирование: 12.03.2010, 18:42:49 от viroff »
*

jem777

  • Завсегдатай
  • 1666
  • 119 / 2
С загрузкой файла надо бы поосторожнее. Я в принципе сам не очень уверен в безопасности вышеприведенного кода. Чревато, знаете ли. ;)
Просто хотелось бы, для уверенности, чтобы более опытные товарищи указали или проверили на ошибки, если они есть.  ::)

ps: аватар ярый ;D
*

viroff

  • Осваиваюсь на форуме
  • 42
  • 0 / 0
  • потому что не все йогурты одинаково полезны...
http://docs.joomla.org/Creating_a_file_uploader_in_your_component - вот тут можно посмотреть (но там про аплоад немного)
*

jem777

  • Завсегдатай
  • 1666
  • 119 / 2
Спасибо, любопытно.
*

jem777

  • Завсегдатай
  • 1666
  • 119 / 2
На здоровье! Отпишитесь как получится? Будет интересно посмотреть. ;)
*

jem777

  • Завсегдатай
  • 1666
  • 119 / 2
Кстати, если хочется загружать анимированные GIF без изменений, то в  function save() надо просто закомментировать эти строки:

Код
else if ($size_img[2]==1) $src_img = imagecreatefromgif($avatar);

Код
else if ($size_img[2]==1) imagegif($dest_img, $avatar); 


В комментариях отображение будет анимированным.
*

MMONSTERR

  • Захожу иногда
  • 59
  • 3 / 0
Очень легко решить проблемму с перезаписью аватара и удалением записи.
1. Надо сохранять в постоянное имя id_avatar.jpg
2. И также удалять (но с удалением еще подумать  ^-^ )
*

MMONSTERR

  • Захожу иногда
  • 59
  • 3 / 0
Можно я проматерюсь!

Но у вас в начале функция где загрузка файла, загрузка и обработка файла норм ... но вот запись в бд там полная Ж***

вот как примерно должно быть

Код
//Update user avatar
$id = $_POST["id"];
    if(!empty($_FILES["avatar"]))
{
[b]$db = JFactory::getDBO();[/b]
$query = "UPDATE #__users SET avatar = '62_avatar.jpg' WHERE id = $id";
echo $query;
$db->setQuery( $query );
[b]$db->query();[/b]
$rows = $db->loadObjectList();
$avatar = $rows[0]->avatar;

}
*

jem777

  • Завсегдатай
  • 1666
  • 119 / 2
С удалением записи в БД и его обновлением проблем у меня не было. Проблема была с самим файлом, который при определенных условиях (указано выше) не удаляется с диска. Просто я там не совсем смог реализовать корректно обработку формы. Ну это вообще как пример. Можете переделывать под себя как угодно. Если захотите поделиться с людьми своим решением - будет совсем хорошо.  8)
*

imcool

  • Новичок
  • 7
  • 0 / 0
как я понял из кода юзер присоединяет файл и после сохраняет.. то есть  без привью?! я прав?! а если я прав как сделать привью?! подмагните советом! аяксом не хочетсо, так как совсем не знаю...
*

jem777

  • Завсегдатай
  • 1666
  • 119 / 2
Как раз с превью. Он делает аватар по заданному размеру. GIF оставил без изменения для анимированных аватаров. Можно расскомментировать в исходнике и аватары будут обработаны и уменьшены, но анимации не будет.
*

lexx74

  • Захожу иногда
  • 158
  • 1 / 0
На локалке все работало замечательно, перенес на сервак и при загрузки любого файла формата JPG JPEG PNG пишет

Извините, но разрешена загрузка файлов только jpeg, GIF и PNG.

файлы 80*80 права на папку images/avatars 777

может еще какая нить папка нужна для записи или чтото еще?

Повторюсь на локале все прекрасно грузилось
*

jem777

  • Завсегдатай
  • 1666
  • 119 / 2
По первому вопросу это значит, что код вставляется после:
Код
<?php if($this->user->get('password')) : ?>
<tr>
<td>
<label for="password">
<?php echo JText::_( 'Password' ); ?>:
</label>
</td>
<td>
<input class="inputbox validate-password" type="password" id="password" name="password" value="" size="40" />
</td>
</tr>
<tr>
<td>
<label for="password2">
<?php echo JText::_( 'Verify Password' ); ?>:
</label>
</td>
<td>
<input class="inputbox validate-passverify" type="password" id="password2" name="password2" size="40" />
</td>
</tr>
<?php endif; ?>

По второму вопросу: используйте специализированные редакторы, которые умеют показывать номера строк. Например Notepad++. Запустив его, сразу увидите слева номера строк, по которым очень легко отыскать нужный участок кода.
*

mariczzz

  • Новичок
  • 2
  • 0 / 0
Небольшое добавление: иногда залитые на сервак аватары имеют права доступа что-то типа 0600 (то бишь файл физически присутствует, но посмотреть его в браузере низзя). Решается это вставкой команды:

Код
chmod ($avatar, 0644);

сразу после команды

Код
move_uploaded_file($file,$avatar);

в файле components\com_user\controller.php

А вообще автор молодец!
*

mariczzz

  • Новичок
  • 2
  • 0 / 0
Еще мои юзвери баг нашли - аватарки PNG отображаются криво (прозрачные пиксели становятся черными). Закоментировал вызов
Код
resizeimg($avatar, $width, $height);

в файле components\com_user\controller.php - все стало норм
ЗЫ. Не стал разбираться, но чисто из любопытства - а накой нужно изменять размеры аватарки?
*

LigthScribe

  • Новичок
  • 1
  • 0 / 0
Хочется еще добавить что в файле \com_user\views\user\tmpl\form.php
все обращения нужно escape.

вместо

 <?php if($this->user->get('avatar')) : ?>

нужно

 <?php if($this->escape($this->user->get('avatar'))) : ?>

Без escape опасно как-то получается
*

goga_pgasovav

  • Захожу иногда
  • 444
  • 6 / 0
  • Внимательный джумловод
Очень прошу помочь с решением проблемы!
Когда загружаешь с фронтенда аватар четко подогнанного размера (к примеру 80х80) прозрачное PNG изображение, то прозрачность заменяется на черный цвет.
Если увеличить значения $width = 80; и $height = 80; (в файле controller.php) хотябы на еденицу (т.е. 81 и 81 соответственно), то баг не проявляется.
Баг так же не проявляется если загружать прозрачную PNG большего или меньшего, нежели 80х80, размера!

P.S.: с прозрачными GIF-изображениями такого не наблюдается...

UPD!
Решение нашлось само собой  ^-^
Примерно в строке 157 (после «// Если размеры меньше, то масштабирования не нужно»)
необходимо заменить «<» на «<=»  следующим образом:

Было:
Код
if (($width_src<$width) && ($height_src<$height))

Стало:
Код
if (($width_src<=$width) && ($height_src<=$height))

и все будет в шоколаде ;)
« Последнее редактирование: 26.01.2012, 03:58:56 от goga_pgasovav »
*

igorpank

  • Новичок
  • 9
  • 0 / 0
Еще от себя добавлю) В файле controller.php, заменить строку
Код
echo 'Извините, но разрешена загрузка файлов только JPEG, GIF и PNG.';
exit;
на
Код
$msg = JText::_('Извините, но разрешена загрузка файлов только JPEG, GIF и PNG.');
$return = @$_SERVER['HTTP_REFERER'];
if (empty($return) || !JURI::isInternal($return)) {
$return = JURI::base();
}
$this->setRedirect($return, $msg, 'error');
return false;
}

и
Код
if ($file_size > 100*1024) die('Извините, объем файла не должен превышать 100 KB. Измените фото и попробуйте еще раз.');
на
Код
if ($file_size > 100*1024) {
$msg = JText::_('Извините, объем файла не должен превышать 100 KB. Измените фото и попробуйте еще раз.');
$return = @$_SERVER['HTTP_REFERER'];
if (empty($return) || !JURI::isInternal($return)) {
          $return = JURI::base();
                        }
$this->setRedirect($return, $msg, 'error');
                     return false;
}

тогда сообщение об ошибке будет виводится на страницу, а не делать редирект
в шаблоне должна бить выведена позиция

Код: php
<jdoc:include type="message" />
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Как и чем можно обращаться с запросами из Joomla к GraphQL?

Автор bmf1982

Ответов: 0
Просмотров: 849
Последний ответ 03.10.2019, 15:46:00
от bmf1982
Joomla как система авторизации

Автор kav

Ответов: 23
Просмотров: 2584
Последний ответ 29.04.2018, 11:10:30
от Aleks.Denezh
Нужна помощь в доработке модуля под Joomla 3

Автор kik84

Ответов: 5
Просмотров: 2576
Последний ответ 30.01.2018, 22:40:30
от Елeна
SP Features добавление дополнительного блока

Автор 12mv

Ответов: 5
Просмотров: 2833
Последний ответ 15.11.2015, 14:22:57
от Филипп Сорокин
Как отучить Joomla стартовать session для гостей?

Автор commeta

Ответов: 8
Просмотров: 3303
Последний ответ 20.08.2015, 14:06:38
от acyp