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

Bismuth

  • Захожу иногда
  • 138
  • 2 / 0
Всем доброе время суток!
Столкнулся с проблемой в модулях, ставлю чтоб отображались заголовки, а они не отображаются в чем причина не могу понять


Все работает, а заголовки нет((

Как сделать чтоб все работало нормально?

Заранее спасибо за помощь ;)
*

Fedor Vlasenko

  • Живу я здесь
  • 3845
  • 733 / 7
  • https://fedor-vlasenko.web.app
Re: Не хочет отображатся заголовки
« Ответ #1 : 10.06.2013, 02:09:03 »
<jdoc:include type="modules" name="banner" style="xhtml" />
посмотрите в позиции которой вы публикуете модуль есть  style="xhtml"
Позициям модулей и модулям можно указывать стили вывода, которые определены в файле ваш шаблон/html/modules.php
Если такого нет, то из шаблона System
*

Bismuth

  • Захожу иногда
  • 138
  • 2 / 0
Re: Не хочет отображатся заголовки
« Ответ #2 : 10.06.2013, 22:49:28 »
<jdoc:include type="modules" name="banner" style="xhtml" />
посмотрите в позиции которой вы публикуете модуль есть  style="xhtml"
Позициям модулей и модулям можно указывать стили вывода, которые определены в файле ваш шаблон/html/modules.php
Если такого нет, то из шаблона System

У меня вот так прописано в index.php

<jdoc:include type="modules" name="menu_top" />

а если добавляю style="xhtml" то браузер выдает ошибку виде

Fatal error: Cannot redeclare modChrome_none() (previously declared in Z:\home\localhost\www\home\templates\system\html\modules.php:14) in Z:\home\localhost\www\home\templates\homehosts.ru\html\modules.php on line 17
*

Fedor Vlasenko

  • Живу я здесь
  • 3845
  • 733 / 7
  • https://fedor-vlasenko.web.app
Re: Не хочет отображатся заголовки
« Ответ #3 : 10.06.2013, 23:10:09 »
Так открой Z:\home\localhost\www\home\templates\homehosts.ru\html\modules.php посмотри какие у тебя стили
и замени style="youstyle", где youstyle стиль из шаблона modules.php
*

Bismuth

  • Захожу иногда
  • 138
  • 2 / 0
Re: Не хочет отображатся заголовки
« Ответ #4 : 10.06.2013, 23:27:18 »
Что я не не нашел там style в modules.php

Код
<?php
/**
 * @package Joomla.Site
 * @copyright Copyright (C) 2005 - 2013 Open Source Matters, Inc. All rights reserved.
 * @license GNU General Public License version 2 or later; see LICENSE.txt
 */

// no direct access
defined('_JEXEC') or die;

/*
 * none (output raw module content)
 */
function modChrome_none($module, &$params, &$attribs)
{
echo $module->content;
}

/*
 * Module chrome that wraps the module in a table
 */
function modChrome_table($module, &$params, &$attribs)
{ ?>
<table cellpadding="0" cellspacing="0" class="moduletable<?php echo htmlspecialchars($params->get('moduleclass_sfx')); ?>">
<?php if ($module->showtitle != 0) : ?>
<tr>
<th>
<?php echo $module->title; ?>
</th>
</tr>
<?php endif; ?>
<tr>
<td>
<?php echo $module->content; ?>
</td>
</tr>
</table>
<?php
}

/*
 * Module chrome that wraps the tabled module output in a <td> tag of another table
 */
function modChrome_horz($module, &$params, &$attribs)
{ ?>
<table cellspacing="1" cellpadding="0" width="100%">
<tr>
<td>
<?php modChrome_table($module, $params, $attribs); ?>
</td>
</tr>
</table>
<?php
}

/*
 * XHTML (divs and font headder tags)
 */
function modChrome_xhtml($module, &$params, &$attribs)
{
if (!empty ($module->content)) : ?>
<div class="moduletable<?php echo htmlspecialchars($params->get('moduleclass_sfx')); ?>">
<?php if ($module->showtitle != 0) : ?>
<h3><?php echo $module->title; ?></h3>
<?php endif; ?>
<?php echo $module->content; ?>
</div>
<?php endif;
}

/*
 * Module chrome that allows for rounded corners by wrapping in nested div tags
 */
function modChrome_rounded($module, &$params, &$attribs)
{ ?>
<div class="module<?php echo htmlspecialchars($params->get('moduleclass_sfx')); ?>">
<div>
<div>
<div>
<?php if ($module->showtitle != 0) : ?>
<h3><?php echo $module->title; ?></h3>
<?php endif; ?>
<?php echo $module->content; ?>
</div>
</div>
</div>
</div>
<?php
}

/*
 * Module chrome that add preview information to the module
 */
function modChrome_outline($module, &$params, &$attribs)
{
static $css=false;
if (!$css)
{
$css=true;
jimport('joomla.environment.browser');
$doc = JFactory::getDocument();
$browser = JBrowser::getInstance();
$doc->addStyleDeclaration(".mod-preview-info { padding: 2px 4px 2px 4px; border: 1px solid black; position: absolute; background-color: white; color: red;}");
$doc->addStyleDeclaration(".mod-preview-wrapper { background-color:#eee; border: 1px dotted black; color:#700;}");
if ($browser->getBrowser()=='msie')
{
if ($browser->getMajor() <= 7) {
$doc->addStyleDeclaration(".mod-preview-info {filter: alpha(opacity=80);}");
$doc->addStyleDeclaration(".mod-preview-wrapper {filter: alpha(opacity=50);}");
}
else {
$doc->addStyleDeclaration(".mod-preview-info {-ms-filter: alpha(opacity=80);}");
$doc->addStyleDeclaration(".mod-preview-wrapper {-ms-filter: alpha(opacity=50);}");
}
}
else
{
$doc->addStyleDeclaration(".mod-preview-info {opacity: 0.8;}");
$doc->addStyleDeclaration(".mod-preview-wrapper {opacity: 0.5;}");
}
}
?>
<div class="mod-preview">
<div class="mod-preview-info"><?php echo $module->position."[".$module->style."]"; ?></div>
<div class="mod-preview-wrapper">
<?php echo $module->content; ?>
</div>
</div>
<?php
}
?>
*

Fedor Vlasenko

  • Живу я здесь
  • 3845
  • 733 / 7
  • https://fedor-vlasenko.web.app
Re: Не хочет отображатся заголовки
« Ответ #5 : 10.06.2013, 23:36:12 »
а вот же они  style="xhtml",  style="none", style="table", style="horz", style="rounded", style="outline" - пробуйте
*

Bismuth

  • Захожу иногда
  • 138
  • 2 / 0
Re: Не хочет отображатся заголовки
« Ответ #6 : 10.06.2013, 23:59:12 »
А все заработало спасибо)))
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Как сделать что бы заголовки статей на сайте были в теге <h1>?

Автор MultiMatrix83

Ответов: 10
Просмотров: 3123
Последний ответ 27.04.2022, 15:56:45
от MultiMatrix83
Как сделать нормальные заголовки страниц (title)?

Автор alienshooter

Ответов: 42
Просмотров: 33978
Последний ответ 29.10.2018, 21:36:14
от Elena91
Заменить заголовки h2 на h1

Автор robotwerder

Ответов: 16
Просмотров: 3246
Последний ответ 27.10.2017, 12:57:03
от robotwerder
Заголовки новостей

Автор Енот

Ответов: 2
Просмотров: 1376
Последний ответ 08.03.2016, 20:09:48
от Енот
Заголовки при пагинации ?start=

Автор kik84

Ответов: 1
Просмотров: 1238
Последний ответ 15.12.2015, 09:29:19
от Lepiloff