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

DaGGeR

  • Осваиваюсь на форуме
  • 36
  • 0 / 0
Цитировать
Другие теги так не надо! Просто!
$body .= "<b>Уважаемый администратор!</b>";

а если выводит так: <b>Уважаемый администратор!</b>
то вы выводите либо в textarea
либо вы обернули где то в htmlspecialchars
все равно так и выводит : <b>Уважаемый администратор!</b>
еще раз повторюсь, сам текст сообщения выводится в теге <pre>, а точнее в <pre class="pre_message">
*

Aleks.Denezh

  • Живу я здесь
  • 3404
  • 428 / 4
покажите то что выводит в режиме просмотра кода
*

DaGGeR

  • Осваиваюсь на форуме
  • 36
  • 0 / 0
Код
<ul class="adminformlist">
<li>От Super User</li>

<li>Отправлено. 30.11.-0001</li>

<li>Тема Сообщение </li>

<li>Сообщение <pre class="pre_message">&lt;b&gt;Уважаемый администратор!&lt;/b&gt;
Строка текста:
</pre></li>
</ul>
вот что выводит
*

Aleks.Denezh

  • Живу я здесь
  • 3404
  • 428 / 4
ну вот видите у вас строка сохраняется в замененными скобочками < и > на &lt; и &gt;
А это значит что вы скорее всего где то пропустили перед сохранением строку через htmlspecialchars
*

DaGGeR

  • Осваиваюсь на форуме
  • 36
  • 0 / 0
ну вот видите у вас строка сохраняется в замененными скобочками < и > на &lt; и &gt;
А это значит что вы скорее всего где то пропустили перед сохранением строку через htmlspecialchars
хз, зашел в БД, там хранится текст как надо "<b>Уважаемый администратор!</b>"
ладно, не суть, спасибо)

вот другой вопрос еще появился: нужно передать в БД время, когда юзер оправил свои данные.
чтобы не плясать с бубном, какая функция в Joomla за время отвечает?или проще средствами php самому уж накатать?
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
какая функция в Joomla за время отвечает?
Текущее время для sql-запроса:
$db->quote(JFactory::getDate()->toSql())
*

Aleks.Denezh

  • Живу я здесь
  • 3404
  • 428 / 4
хз, зашел в БД, там хранится текст как надо "<b>Уважаемый администратор!</b>"
ладно, не суть, спасибо)
А как вы выводите?
*

DaGGeR

  • Осваиваюсь на форуме
  • 36
  • 0 / 0
А как вы выводите?
как вы и говорили, так и выводил, но уже не важно, ибо придется ковырять в самой Joomla где-то вывод, и исправлять, короче забил я)
*

DaGGeR

  • Осваиваюсь на форуме
  • 36
  • 0 / 0
ещё вопрос: как средствами Joomla узнать ID администратора?для отправки сообщения присваиваю вручную, но хотелось бы универсальности
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
А зачем Вам id админа? послать письмо ему? тогда уж получайте сразу его email. Админов, в т.ч. супер-админов может быть несколько, а вот в случае чего, J будет посылать письмо тому супер-админу, который изначально устанавливал систему, получить его email:
$query 'select email from #__users where sendemail = 1 order by id limit 1';
Во всяком случае, крайне редко бывает более одного супер-админа.
Можно более сложно:
$query 'select u.email from #__users u, #__user_usergroup_map m where (u.sendemail = 1) and ((m.group_id = 8) and (u.id = m.user_id)) order by u.id limit 1';
Здесь 8 - id группы супер-админов, как правило, никогда не меняется. Гарантированно получите email первого в списке пользователей супер-админа, у которого установлен флаг отправки ему системных сообщений с сайта, как правило он и есть тот, кто ставил систему изначально.

Здесь есть подводный камень: email этим самым супер-админом может быть указан левый...
« Последнее редактирование: 13.05.2014, 13:06:09 от AlekVolsk »
*

DaGGeR

  • Осваиваюсь на форуме
  • 36
  • 0 / 0
А зачем Вам id админа? послать письмо ему? тогда уж получайте сразу его email. Админов, в т.ч. супер-админов может быть несколько, а вот в случае чего, J будет посылать письмо тому супер-админу, который изначально устанавливал систему, получить его email:
$query 'select email from #__users where sendemail = 1 order by id limit 1';
Во всяком случае, крайне редко бывает более одного супер-админа.
Можно более сложно:
$query 'select u.email from mfo_users u, mfo_user_usergroup_map m where (u.sendemail = 1) and ((m.group_id = 8) and (u.id = m.user_id)) order by u.id limit 1';
Здесь 8 - id группы супер-админов, как правило, никогда не меняется. Гарантированно получите email первого в списке пользователей супер-админа, у которого установлен флаг отправки ему системных сообщений с сайта, как правило он и есть тот, кто ставил систему изначально.

Здесь есть подводный камень: email этим самым супер-админом может быть указан левый...
это всё конечно здорово, спасибо, но нужно узнать именно ID супер админа, он один у меня всегда.
письмо то формирую во встроенную почту Joomla
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Пожалуйста:
$query 'select u.id from #__users u, #__user_usergroup_map m where (m.group_id = 8) and (u.id = m.user_id) order by u.id limit 1';
Гарантированно именно супер-админ, первый в списке (а вдруг - гипотетически - еще один заведется?)

PS: если не секрет, а как вы получаете адрес встроенной почты J?
« Последнее редактирование: 13.05.2014, 13:05:45 от AlekVolsk »
*

DaGGeR

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

PS: если не секрет, а как вы получаете адрес встроенной почты J?
да не секрет конечно, просто формирую запрос в таблицу сообщений с нужными значениями полей, и профит)
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Хмм, а текст запроса?
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Здесь 8 - id группы супер-админов, как правило, никогда не меняется.
Дополнение: я не знаю, какая у вас версия J, с 2.5 не работал, значение 8 актуально для 3.x, для 2.5 посмотрите в базе самостоятельно.
*

DaGGeR

  • Осваиваюсь на форуме
  • 36
  • 0 / 0
Хмм, а текст запроса?
ну я там в фунуции делаю, но смысл поймёте)

Код
$params = JComponentHelper::getParams( 'com_form' );
    
    $recipient = $params->get( 'recipient' );
    
    $subject = $params->get( 'subject' );
    
    $table = $this->getTable( 'messages' );
    
    $archiveData = array(
        'subject' => 'Сообщение,
'user_id_from' => '42',
'user_id_to' => '42',
'folder_id' => '0',
        'message' => $body
    );
    
    $table->bind( $archiveData );
я не во все поля значения передаю, ибо не доделал, но полей там всего 9:
message_id, user_id_from, user_id_to, folder_id, date_time, state, priority, subject, message
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Спасибо.
*

zomby6888

  • Завсегдатай
  • 1473
  • 171 / 3
Код: php
<?php echo "admin_id = ".array_pop(Jaccess::getUsersByGroup(8)); ?>
« Последнее редактирование: 13.05.2014, 13:28:14 от zomby6888 »
интернет-блог: http://websiteprog.ru
*

DaGGeR

  • Осваиваюсь на форуме
  • 36
  • 0 / 0
Спасибо.
да вам тоже спасибо)
*

DaGGeR

  • Осваиваюсь на форуме
  • 36
  • 0 / 0
Код: php
<?php echo "admin_id = ".array_pop(Jaccess::getUsersByGroup(8)); ?>
спасибо)
*

DaGGeR

  • Осваиваюсь на форуме
  • 36
  • 0 / 0
возникла ещё одна проблемка, хотел сделать валидацию формы не на стороне сервера, а на стороне клиента, добавил JHtml::_( 'behavior.formvalidation' ); но при нажатии на кнопку открывается страница с каракулями...привожу код ниже, что я сделал не то?
Код
<?php

defined( '_JEXEC' ) or die;
?>
<div class="item-page">
<h1>Форма</h1>

<form action="<?php echo JRoute::_( 'index.php?view=form' )?>" method="post" class="form-validate">

<div class="control-group form-inline">
            <div class="control-label"><?php echo $this->form->getLabel( 'fam' ); ?></div>
            <div class="controls"><?php echo $this->form->getInput( 'fam' ); ?></div>
        </div>

<div class="control-group form-inline">
            <div class="control-label"><?php echo $this->form->getLabel( 'name' ); ?></div>
            <div class="controls"><?php echo $this->form->getInput( 'name' ); ?></div>
        </div>


<input type="hidden" name="task" value="form.save" />
        <input type="submit" value="Отправить" />
        <?php echo JHtml::_( 'behavior.formvalidation' ); ?>
</form>
</div>
*

zomby6888

  • Завсегдатай
  • 1473
  • 171 / 3
включите отображение ошибок
интернет-блог: http://websiteprog.ru
*

DaGGeR

  • Осваиваюсь на форуме
  • 36
  • 0 / 0
включите отображение ошибок
как раз таки отображение ошибок включено, но выдает "Неверный параметр"
вот и весь бред в этом...
*

zomby6888

  • Завсегдатай
  • 1473
  • 171 / 3
А кстатии кнопка отправки формы там вроде должна иметь класс validate. может в этом дело:
Код: php
<button type="submit" class="validate">Submit form</button>
ссылку можете скинуть на страничку с формой?
интернет-блог: http://websiteprog.ru
*

DaGGeR

  • Осваиваюсь на форуме
  • 36
  • 0 / 0
ссылку можете скинуть на страничку с формой?
я на денвере делаю)
заменил кнопку, теперь кроме иероглифов выдало:
Спойлер
[свернуть]
*

zomby6888

  • Завсегдатай
  • 1473
  • 171 / 3
На это можно не обращать внимания
интернет-блог: http://websiteprog.ru
*

DaGGeR

  • Осваиваюсь на форуме
  • 36
  • 0 / 0
На это можно не обращать внимания
а в чём тогда ошибка?  :o
*

zomby6888

  • Завсегдатай
  • 1473
  • 171 / 3
Ну ваш компонент ее возможно неправильно обрабатывает. Содержимое вашего контроллера хотябы покажите. Кстатии он у вас в какой кодировке сохранен?
интернет-блог: http://websiteprog.ru
*

DaGGeR

  • Осваиваюсь на форуме
  • 36
  • 0 / 0
Ну ваш компонент ее возможно неправильно обрабатывает. Содержимое вашего контроллера хотябы покажите. Кстатии он у вас в какой кодировке сохранен?
кодировка UTF(без BOM)

ну а контроллер пользовательской части вот:
Код
<?php


defined( '_JEXEC' ) or die;


class FormController extends JControllerLegacy
{


function display( $cachable = false, $urlparams = array() )
{
$this->default_view = 'archives';
parent::display( $cachable, $urlparams );
}

}
« Последнее редактирование: 15.05.2014, 18:05:15 от DaGGeR »
*

DaGGeR

  • Осваиваюсь на форуме
  • 36
  • 0 / 0
вот ещё проблема, пытался добавить капчу по этому уроку http://ссылка вырезана, так как домен распространяет вирусы/blog/joomla/uroki-po-sozdaniyu-komponentov-dlya-joomla-chast-5-sozdanie-svoego-polya
версия Joomla у меня 2.5, в итоге при отправке данных ошибка Fatal error: Call to a member function get() on a non-object
ругается на строку
Код
$data = $this->input->post->get( 'jform', array(), 'array' );
хотель бы узнать, что не так?

так же привожу весь код контроллера формы
Код
<?php

defined( '_JEXEC' ) or die;

jimport( 'joomla.application.component.controllerform' );


class FormControllerForm extends JControllerForm
{


function __construct( $config = array() )
{
$this->view_list = 'result';
parent::__construct( $config );
}


public function allowSave()
{
return true;
}


public function save( $key = null, $urlVar = null )
{
   
    $app = JFactory::getApplication();
    $data = $this->input->post->get( 'jform', array(), 'array' );
    $model = $this->getModel();
    $form = $model->getForm( $data, false );
    $validData = $model->validate( $form, $data );
    $recordId = $this->input->getInt( $urlVar );
    $context = "$this->option.edit.$this->context";
    $session = JFactory::getSession();
    if ( (int)$session->get( 'mycaptcha' )!= (int)$data['mycaptcha'] ) {
        $app->setUserState( $context . '.data', $validData );
        $this->setError( JText::sprintf( 'Неверная сумма цифр', $this->getModel()->getError() ) );
        $this->setMessage( $this->getError(), 'error' );
        $this->setRedirect(
            JRoute::_(
                'index.php?option=' . $this->option . '&view=' . $this->view_item
                . $this->getRedirectToItemAppend( $recordId, $urlVar ), false
            )
        );
 
        return false;
    }
    return parent::save( $key, $urlVar );
}
}
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться