Новости 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 для атрибута addfieldprefix namespace 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 #разработка

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

tranceRoller

  • Захожу иногда
  • 452
  • 37 / 0
JoomLeague - прекрасный компонент со множеством возможностей. Много людей заняты улучшением компонента. Но они сосредоточены больше на функционале.
Хочу поделится с вами "облегчением" внешнего вида состава команды и профиля игрока. По умолчанию - мы имеем много нолей:

И это ещё при том, что у меня минимально статистики.
Предлагаю нули заменить на что-нибудь менее "тяжёлое". Вроде такого варианта:
и
Можно, конечно, взять символ "-", но он более тяжёлый. Впрочем - дело вкуса. Если считаете, что так выглядит лучше, переходим к коду.
файл:
..\components\com_joomleague\views\player\tmpl\default_gameshistory.php
строка 149-150
Код
// as only matches are shown here where the player was part of, output a 0 i.s.o. a '-'
echo "·";

..\components\com_joomleague\views\player\tmpl\default_playerstats.php
строка 151
Код
<td class="td_c"><?php echo ($stat > 0)? $stat : "·"; ?></td>

..\components\com_joomleague\views\roster\tmpl\default_players.php
строка 309
Код
echo ($stat !='' && $stat > 0)? $stat : "·";

Вот и всё. Нули появляются ещё в статистиках, но думаю теперь самим несложно будет отыскать, где этот "лес" начинает расти.
Приятного просмотра статистики.
« Последнее редактирование: 24.03.2012, 11:47:34 от tranceRoller »
*

nikolay65

  • Осваиваюсь на форуме
  • 24
  • 1 / 0
применил! Мне понравилось! Спасибо.
*

tranceRoller

  • Захожу иногда
  • 452
  • 37 / 0
Рад помочь!
Правда описанные действия не распространялись на замены и сыгранные матчи.
В файле
..\components\com_joomleague\views\player\tmpl\default_playerstats.php
взгляните на строку
Код
echo ($this->inoutstat->played > 0)? $this->inoutstat->played : '0';
Меняйте на нужный символ.
Такой вид условия практически везде, поэтому их легко отлавливать для коррекции.
*

Se2008

  • Осваиваюсь на форуме
  • 43
  • 0 / 0
Как ни странно не прокатило. Компонент 1.6 последний.
На 0.93 работало
*

tranceRoller

  • Захожу иногда
  • 452
  • 37 / 0
Цитировать
Как ни странно не прокатило. Компонент 1.6 последний.
В последней версии в шаблоне "roster" (состав команды) и вправду несколько иначе теперь код выглядит. В файле components/com_joomleague/views/roster/tmpl/default_player.php в районе 300ой строки надо код поменять на следующий:
Код
<td class="td_c"><?php
if ($stat !='' && $stat > 0)
{
  if (!isset($totalEvents[$eventId]))
  {
    $totalEvents[$eventId]=0;
  }
  $totalEvents[$eventId]=(int) $totalEvents[$eventId] + (int) $stat;
}
echo ($stat !='' && $stat > 0)? $stat : "·";
?></td>
*

dimix1978

  • Осваиваюсь на форуме
  • 22
  • 0 / 0
Помогите исправить дефолтное отображение номера игроков.
Исходное - В команде проекта известны не все номера игроков, при этом оставив поле номера игрока пустым отображается "0", то же самое отображается затем в ростере.
Задача: исправить "0" на "-".
*

tranceRoller

  • Захожу иногда
  • 452
  • 37 / 0
Цитировать
Задача: исправить "0" на "-".
Если у вас нет игроков с номером 0, тогда это можно сделать так.
Файл components/com_joomleague/views/roster/tmpl/default_player.php
(~205 строка) после строк:
Код
if ($this->config['show_player_numbers'])
{
добавьте ещё одну строку:
Код
if ($pnr == "0" || $pnr == "") { $pnr = "-"; }

Этот код работает, если номер показывается просто числом, без иконки формы под ним.
Если ещё включена иконка, то надо исправлять файл media/com_joomleague/event_icons/shirt.php
эту строку
Код
$text = intval( $_GET[ 'text' ] );
заменить на эту
Код
$text = $_GET[ 'text' ];

Код тестировался на версии JL 1.6.
*

dimix1978

  • Осваиваюсь на форуме
  • 22
  • 0 / 0
tranceRoller, огромное спасибо. Вы даже не представляете сколько я убил времени из-за этой "загибулины")))))
*

dimix1978

  • Осваиваюсь на форуме
  • 22
  • 0 / 0
Ещё один вопросик. Не совсем по теме, но близко.
Количество сыгранных минут в roster команды (статистика-тип статистики basic) у меня отображается вот так (1,000) - что равно тысяче минут crazy!.
Надо сделать вот так (1 000).

Понимаю, что надо заменить ',' на '&nbsp;', но не могу найти где это сделать. Хотя может быть я ошибаюсь. Вероятен вариант с указанием количества цифр без запятой.

Пожалуйста помогите решить проблему.

Такой же вид у четырехзначных и более цифр и в других видах статистики и у событий тоже.
« Последнее редактирование: 05.01.2014, 13:01:47 от dimix1978 »
*

tranceRoller

  • Захожу иногда
  • 452
  • 37 / 0
Цитировать
Не совсем по теме, но близко.
В следующий раз лучше создать новую тему.

Какая версия JL?
Есть ссылка на страницу?
Какие настройки у самой статистики в параметрах?
*

dimix1978

  • Осваиваюсь на форуме
  • 22
  • 0 / 0
В следующий раз лучше создать новую тему.

Какая версия JL?
Есть ссылка на страницу?
Какие настройки у самой статистики в параметрах?

jl 2.7
Ссылку отправил на мыло
Параметры: Точность 0 и отображение в roster
*

tranceRoller

  • Захожу иногда
  • 452
  • 37 / 0
Цитировать
jl 2.7
Это наверное версия Joomla
В версии JoomLeague 2.0 в файле /components/com_joomleague/views/roster/tmpl/default_players.php строка примерно 429 вместо кода:
Код
$value = number_format($value, $precision, ',', '.');
вставить:
Код
$value = number_format($value, $precision, ' ', '.');
Хотя по идее 3ий аргумент отвечает за отделение дробной части, а 4-ый за отделение тысячей. И тогда правильно должно быть:
Код
$value = number_format($value, $precision, ',', ' ');
*

dimix1978

  • Осваиваюсь на форуме
  • 22
  • 0 / 0
Это наверное версия Joomla
В версии JoomLeague 2.0 в файле /components/com_joomleague/views/roster/tmpl/default_players.php строка примерно 429 вместо кода:
Код
$value = number_format($value, $precision, ',', '.');
вставить:
Код
$value = number_format($value, $precision, ' ', '.');
Хотя по идее 3ий аргумент отвечает за отделение дробной части, а 4-ый за отделение тысячей. И тогда правильно должно быть:
Код
$value = number_format($value, $precision, ',', ' ');

JL 2.0, но она постоянно обновляется, у меня версия JL 2.70.141

В файле default_players.php я уже всё перекопал, в том числе указанную Вами строчку. Убил несколько часов, но это не помогает.

Я даже пробовал её вообще удалить. Но изменений нет.
*

dimix1978

  • Осваиваюсь на форуме
  • 22
  • 0 / 0
Хотя по идее 3ий аргумент отвечает за отделение дробной части, а 4-ый за отделение тысячей. И тогда правильно должно быть:
А вот это очень помогло! yes!

Я не очень силен в PHP. Но поняв, что надо править аргумент в команде number_format, за 5 минут сообразил и нашел файл
/administrator/components/com_joomleague/statistics/basic.php
в строке 261 в код:
Код
return number_format($value, $precision);
добавил 3-ий и 4-ый аргумент, получилось:
Код
return number_format($value, $precision, ',', ' ');

Проблема решена.

Спасибо tranceRoller  :D.
« Последнее редактирование: 05.01.2014, 19:03:35 от dimix1978 »
*

dimix1978

  • Осваиваюсь на форуме
  • 22
  • 0 / 0
*

tranceRoller

  • Захожу иногда
  • 452
  • 37 / 0
Рад помочь!
В JL 1.6 такого вообще нет.
*

martin_man

  • Осваиваюсь на форуме
  • 11
  • 0 / 0
Извините, немного не по теме...
(http://dynamo-brest.by/command/main-team/osnova) - в статистике одни нули (сыграл; в стартовом составе; вышел на замену; ушёл с поля), и появились они недавно, ранее статистика отображалась
(http://dynamo-brest.by/command/main-team/osnova/player/14--2014/2-dynamo-brest/119--) а на детальной странице любого игрока команды данная статистика отображается

Пожалуйста помогите решить проблему, подскажите с чего начать, где искать решение проблемы. С компонентом JoomLeague работаю впервые.
« Последнее редактирование: 11.06.2014, 22:49:33 от martin_man »
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться