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

Eyes

  • Осваиваюсь на форуме
  • 11
  • 0 / 0
  • Компьютерная офтальмология
Из админ панели Joomla, не отправляется тестовое письмо.(Общие настройки / Сервер / Настройка почты)
E-mail сайта, указан такой же как и в (Настройках сайта/Исходящая почта)
Joomla 3.9.3, php 7.3.2.

Проверил простым написанием кода:
Код
<?php
    error_reporting(E_ALL);
    ini_set('display_errors', '1');
    if (mail("EMAIL ПОЛУЧАТЕЛЯ", "Test mail", "Проверка отправки почты")) {
          echo "ok";
    } else {
           echo "error";}
    ?>   
Тестовое письмо приходит. Значит баг где то в Joomla или в руках моих crazy!, т.к. раньше работала отправка.

Помогите пожалуйста решить вопрос. Спасибо за помощь!
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
php-функция mail() никак не знает о ваших настройках в Joomla, у джумлы для этого свои средства, изучайте документацию
*

Eyes

  • Осваиваюсь на форуме
  • 11
  • 0 / 0
  • Компьютерная офтальмология
Это прекрасный совет, но я спрашиваю про стандартную функцию, вшитую в оболочку Joomla. Она не работает.
Подскажите где именно рыть.
*

sivers

  • Живу я здесь
  • 2578
  • 357 / 0
Рыть на сервере. Несколько лет назад эта функция перестала работать (без доп. настроек). Теперь ее можно завести только если настроить на сервере смтп-отправку. Например, с помощью сервиса ssmtp (проще всего настраивается) или других - тогда в PHP снова начнет работать mail(). Но, если нет возможности настраивать сервер или не хочется, то проще будет настроить в Joomla отправку через smtp с авторизацией. И проследить, чтоб e-mail отправителя был указан тот же, который указан в авторизации smtp. Последнее важно, иначе письма приходить не будут (будет считаться попыткой подмены отправителя - раньше можно было, теперь нет).
На связи в telegram @sivers
sivers @ inbox . ru
https://sivers.su/
*

Eyes

  • Осваиваюсь на форуме
  • 11
  • 0 / 0
  • Компьютерная офтальмология
Рыть на сервере. Несколько лет назад эта функция перестала работать (без доп. настроек). Теперь ее можно завести только если настроить на сервере смтп-отправку. Например, с помощью сервиса ssmtp (проще всего настраивается) или других - тогда в PHP снова начнет работать mail(). Но, если нет возможности настраивать сервер или не хочется, то проще будет настроить в Joomla отправку через smtp с авторизацией. И проследить, чтоб e-mail отправителя был указан тот же, который указан в авторизации smtp. Последнее важно, иначе письма приходить не будут (будет считаться попыткой подмены отправителя - раньше можно было, теперь нет).
В том то и дело, что если самому чистый код написать с функцией отправки тестового письма mail(), все работает. А через Joomla (Общие настройки / Сервер / Настройка почты) - нет. Хотя работало раньше (неделя-две тому назад).
Сравнил файлы ответственные за отправку тестового письма в Joomla со своим backUp, они не менялись :(
 administrator/components/com_config/controller/application/sendtestmail.php (функция отправки тестового письма).
 и administrator/components/com_config/model/component.php (вызов функции).
Пришел в тупик.  *ОХ-Х-Х*
*

voland

  • Легенда
  • 11028
  • 588 / 112
  • Эта строка съедает место на вашем мониторе
*

Eyes

  • Осваиваюсь на форуме
  • 11
  • 0 / 0
  • Компьютерная офтальмология
Так в настройках какой метод отправки стоит?
PHP mail
*

AlekVolsk

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

ProtectYourSite

  • Живу я здесь
  • 2364
  • 137 / 4
  • Безопасность вебсайтов
Доменную почту используете? Иначе просите хостера логи смотреть, почему письма не доходят.
*

khan-alex

  • Давно я тут
  • 649
  • 30 / 1
В том то и дело, что если самому чистый код написать с функцией отправки тестового письма mail(), все работает. А через Joomla (Общие настройки / Сервер / Настройка почты) - нет. Хотя работало раньше (неделя-две тому назад).
Попробуйте удалить параметр params в функции phpmailer: libraries/vendor/phpmailer/phpmailer/class.phpmailer.php 702 строка
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Попробуйте удалить параметр params в функции phpmailer: libraries/vendor/phpmailer/phpmailer/class.phpmailer.php 702 строка

вот за такие советы надо на кол сажать, зазубренный

ни в коем случае недопустимо править файлы в папке libraries
*

khan-alex

  • Давно я тут
  • 649
  • 30 / 1
ни в коем случае недопустимо править файлы в папке libraries
Ой ёй ой! Вообще-то по рекомендации хостера так делаю! Конечно знаю про уязвимость файла class.phpmailer.php в J 3.7, но ведь правим не бездумно, да и закрыли её (уязвимость). Да и пара десятков рекомендаций по правке этого же файла от других пользователей тоже о чём-то говорит.
« Последнее редактирование: 11.03.2019, 16:31:14 от khan-alex »
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Вообще-то по рекомендации хостера так делаю!
Хостеру плевать на ваш сайт, на вашу Joomla, а ваши правки слетят при первом же минорном обновлении

а уязвимость майлера Joomla закрыли еще 3 года назад, уязвима сама php-библиотека, а не код Joomla, в 3.7 уязвимость закрывали не джумловскую, внимательней читайте описания к патчам по безопасности
*

Eyes

  • Осваиваюсь на форуме
  • 11
  • 0 / 0
  • Компьютерная офтальмология
Доменную почту используете? Иначе просите хостера логи смотреть, почему письма не доходят.
Доменную почту активно используем.
*

Eyes

  • Осваиваюсь на форуме
  • 11
  • 0 / 0
  • Компьютерная офтальмология
на большинстве хостов этот метод не работает, отключен, т.к. признан небезопасным (через него спамеры легко пробиваются)
Проверил еще раз простым скиптом на php - работает mail. А через Joomla "отправить тестовое письмо", метод PHPMail - нет. Sendmail работает.
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Где настраивается <jdoc:include type="component" />

Автор zhekamur

Ответов: 4
Просмотров: 1645
Последний ответ 06.06.2024, 22:50:07
от Vastriet
Сервер выдает 301, вместо 404

Автор astinasty

Ответов: 29
Просмотров: 4166
Последний ответ 01.03.2024, 21:01:48
от ProtectYourSite
Кнопка &amp;quot;редактировать&amp;quot;

Автор all_zer

Ответов: 1
Просмотров: 2199
Последний ответ 28.12.2023, 09:53:48
от fsv
Update: :Extension: Не удалось открыть https://update.joomla.org/core/sts/extension_sts.xml

Автор RazarioAgro

Ответов: 15
Просмотров: 8131
Последний ответ 04.09.2023, 16:55:30
от beliyadm
Перешел с PHP 7.4 на PHP 8.1 и получаю на сайте ошибку

Автор cher68

Ответов: 3
Просмотров: 1298
Последний ответ 03.02.2023, 20:18:30
от beliyadm