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

Aspik

  • Давно я тут
  • 542
  • 63 / 2
  • В личку не писать, не отвечу.
Как вывести ключевые слова, как теги в материале?

Вот если просто вывести все ключевые слова статьи, то это выглядит так:

Код
$met = $this->item->metakey;
<?php echo $met; ?>

Ну вот как сделать чтобы каждый тег(ключевое слово) был ссылкой:

Код
index.php?searchword='.$met.'&ordering=&searchphrase=all&option=com_search
« Последнее редактирование: 29.08.2013, 10:03:53 от b2z »
Мои расширения - http://eco-joom.com/ru/
*

SmokerMan

  • Гуру
  • 5291
  • 720 / 26
если через запятую идут metakey, то
Код: php
<?php
$keywords = preg_split("/,/", $this->item->metakey);
if ($keywords) {
foreach ($keywords as $key => $value) {
echo '<a href="index.php?searchword='.$value.'&ordering=&searchphrase=all&option=com_search">'.$value.'</a>';
}
}
?>
*

Aspik

  • Давно я тут
  • 542
  • 63 / 2
  • В личку не писать, не отвечу.
Спасибо+. Как раз не хватала preg_split. Я думаю это можно занести в FAQ. На 90% процентов отпадает необходимость в компоненте Тегов.
Мои расширения - http://eco-joom.com/ru/
*

Yavich

  • Захожу иногда
  • 133
  • 3 / 1
эммм, а где эти коды прописывать, объясните пожалуйста :)
*

Tureckiy

  • Осваиваюсь на форуме
  • 35
  • 0 / 0
эммм, а где эти коды прописывать, объясните пожалуйста :)
в шаблоне com_content front-enda в нужное вам место
« Последнее редактирование: 11.03.2011, 00:18:09 от Tureckiy »
*

Yavich

  • Захожу иногда
  • 133
  • 3 / 1
т.е. в index.php шаблона?
*

Aspik

  • Давно я тут
  • 542
  • 63 / 2
  • В личку не писать, не отвечу.
templates\template\html\com_content\article default.php

или
components\com_content\views\article\tmpl default.php
Мои расширения - http://eco-joom.com/ru/
*

ChaosHead

  • Гуру
  • 5242
  • 451 / 13
Минус решения заключается в том, что ссылки ведут на компонент поиска. Но поиск не ищет по тегам, т.к. нет такого плагина. А ищет он только лишь в заголовках статей и в самой статье.
То есть ссылка не выведет на полный список статей, отмеченных этим тэгом. А выведет на список статей где это слово есть в заголовке или в статье.
*

ChaosHead

  • Гуру
  • 5242
  • 451 / 13
Нашел ещё другую альтернативу. На мой взгляд сейчас максимально функциональная. На 1.7 тестирую, работает.
Это компонент GiTags. http://www.gi-news.com/joomla-16-extensions/619-joomla-16-tags
Там есть поиск по тегам. Вывод их рядом с материалом. Облаго тегов. Удобный выбор тегов при добавлении новых материалов.
*

Aspik

  • Давно я тут
  • 542
  • 63 / 2
  • В личку не писать, не отвечу.
Нашел ещё другую альтернативу. На мой взгляд сейчас максимально функциональная. На 1.7 тестирую, работает.
Это компонент GiTags. http://www.gi-news.com/joomla-16-extensions/619-joomla-16-tags
Там есть поиск по тегам. Вывод их рядом с материалом. Облаго тегов. Удобный выбор тегов при добавлении новых материалов.
А вам не кажется что это тоже самое ? только +++ лишние запросы. Мне кажется лучше использовать хаки.
Мои расширения - http://eco-joom.com/ru/
*

SmokerMan

  • Гуру
  • 5291
  • 720 / 26
А вам не кажется что это тоже самое ? только +++ лишние запросы. Мне кажется лучше использовать хаки.
честно сказать, по "нагрузке" это мало заметно.
Ну бывают случаи, довольно часто, когда люди для элементарных задач прицепливают за собой локомотив)) но это как бы уже на  их совести.

Извиняюсь, что поднимаю старую тему, но я новичок в этом и php не знаю(( По этой причине никак не могу  понять куда именно вставлять этот код?
Спасибо.
*

bnet

  • Осваиваюсь на форуме
  • 42
  • 2 / 0
если через запятую идут metakey, то
Код: php
<?php
$keywords = preg_split("/,/", $this->item->metakey);
if ($keywords) {
foreach ($keywords as $key => $value) {
echo '<a href="index.php?searchword='.$value.'&ordering=&searchphrase=all&option=com_search">'.$value.'</a>';
}
}
?>
Спасибо, то что нужно!
*

offa

  • Осваиваюсь на форуме
  • 14
  • 1 / 0
Никто не подскажет, а для Joomla 3 какое-нибудь из этих решений будет пригодно?
*

KKAAZZOO

  • Живу я здесь
  • 2288
  • 118 / 9
У Joomla 3 будет свой компонент тегов, он уже разработан и сейчас тестируется, возможно выйдет в версии Joomla 3.1.0
*

offa

  • Осваиваюсь на форуме
  • 14
  • 1 / 0
Ну это ещё сколько ждать... Да и больше интересует, как сделать это программно.
*

KKAAZZOO

  • Живу я здесь
  • 2288
  • 118 / 9
Выход в марте
*

ChaosHead

  • Гуру
  • 5242
  • 451 / 13
если через запятую идут metakey, то
Код: php
<?php
$keywords = preg_split("/,/", $this->item->metakey);
if ($keywords) {
foreach ($keywords as $key => $value) {
echo '<a href="index.php?searchword='.$value.'&ordering=&searchphrase=all&option=com_search">'.$value.'</a>';
}
}
?>

Небольшое дополнение, т.к. заюзал этот вариант
лучше использовать
Код
$keywords = preg_split("/,\s/", $this->item->metakey);
т.к. если метатеги пишешь через запятую с пробелом, то в ссылке вылазиет лишний пробел, а так все пробелы после запятой уберутся.
« Последнее редактирование: 23.01.2014, 20:18:16 от ChaosHead »
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Как вывести все категории VirtueMart 3 второго уровня списком?

Автор Damarkuzz

Ответов: 0
Просмотров: 1123
Последний ответ 06.07.2020, 18:58:23
от Damarkuzz
Как вывести путь материала на страницу?

Автор Gromz

Ответов: 6
Просмотров: 1739
Последний ответ 14.12.2019, 20:19:21
от Gromz
Как вывести данные из stdClass Object в Joomla?

Автор specialist-web

Ответов: 7
Просмотров: 2641
Последний ответ 06.05.2019, 18:24:37
от specialist-web
Код вывести название страницы

Автор qvaro

Ответов: 1
Просмотров: 1346
Последний ответ 24.11.2018, 18:33:07
от beliyadm
Не выводится модуль в материале {loadposition acc1}

Автор InFighter

Ответов: 15
Просмотров: 14772
Последний ответ 02.07.2018, 10:04:42
от Юльчик