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

b2z

  • Глобальный модератор
  • 7284
  • 778 / 0
  • Разраблю понемногу
*

ainur1111

  • Осваиваюсь на форуме
  • 37
  • 0 / 0
Re: Как убрать ID из ссылок?
« Ответ #31 : 09.10.2011, 21:47:12 »
В 1.6 можно добавить в файл \administrator\components\com_content\config.xml параметр:
Код: xml
<field name="sef_advanced_link"
type="radio"
default="0"
label="Sef Advanced Mode"
description="Remove ItemID from Content URL?">
<option value="0">JNO</option>
<option value="1">JYES</option>
</field>
... а потом указать эту настройку как "Да" в параметрах Менеджера материалов (или вручную вписать этот параметр в БД, если нет желания править файлы).

Файла router.php нет в компоненте.

Версия 1,7
Проделал это, но при открытии материала выходить такое сообщение:
Код
Обнаружена ошибка.
Такой страницы не существует.

Домашняя страница
Если проблемы продолжатся, пожалуйста, обратитесь к системному администратору сайта и сообщите об ошибке, описание которой приведено ниже.
#404 Материал не найден
« Последнее редактирование: 09.10.2011, 21:51:27 от ainur1111 »
*

ChaosDay

  • Захожу иногда
  • 365
  • 104 / 1
Re: Как убрать ID из ссылок?
« Ответ #32 : 09.10.2011, 23:02:27 »
Что-то не так сделали просто - специально проверил, на 1.7 так же работает. Правда не if ($count === 1) надо менять а if ($count == 1)
*

ainur1111

  • Осваиваюсь на форуме
  • 37
  • 0 / 0
Re: Как убрать ID из ссылок?
« Ответ #33 : 10.10.2011, 01:20:57 »
Что-то не так сделали просто - специально проверил, на 1.7 так же работает. Правда не if ($count === 1) надо менять а if ($count == 1)

Файла router.php в компоненте не обнаружил
*

ChaosDay

  • Захожу иногда
  • 365
  • 104 / 1
Re: Как убрать ID из ссылок?
« Ответ #34 : 10.10.2011, 14:33:30 »
[корень]\components\com_content\router.php - не знаю куда он у вас делся, но в дистрибутиве как ни странно присутствует ;)
*

ainur1111

  • Осваиваюсь на форуме
  • 37
  • 0 / 0
Re: Как убрать ID из ссылок?
« Ответ #35 : 10.10.2011, 22:46:48 »
[корень]\components\com_content\router.php - не знаю куда он у вас делся, но в дистрибутиве как ни странно присутствует ;)
Спасибо! Оказывается не там смотрел.
*

ainur1111

  • Осваиваюсь на форуме
  • 37
  • 0 / 0
Re: Как убрать ID из ссылок?
« Ответ #36 : 10.10.2011, 22:49:44 »
А как сделать чтобы по адресу было так: сайт.ru/news
А материал отображался так: сайт.ru/news/24525.html
*

Web-Simple

  • Захожу иногда
  • 274
  • 1 / 0
Re: Как убрать ID из ссылок?
« Ответ #37 : 31.10.2011, 14:38:10 »
В 1.6 можно добавить в файл \administrator\components\com_content\config.xml параметр:
Код: xml
<field name="sef_advanced_link"
type="radio"
default="0"
label="Sef Advanced Mode"
description="Remove ItemID from Content URL?">
<option value="0">JNO</option>
<option value="1">JYES</option>
</field>
... а потом указать эту настройку как "Да" в параметрах Менеджера материалов (или вручную вписать этот параметр в БД, если нет желания править файлы).
Никакой новой настройке, в Менеджере Материалов (и его настройках) не появилось. Хак не работает J 1.7
*

Pavel M

  • Захожу иногда
  • 103
  • 8 / 0
  • Учиться никогда не поздно
Re: Как убрать ID из ссылок?
« Ответ #38 : 04.11.2011, 12:03:53 »
Вы значит где-то не там смотрите. У меня на 1.7 всё появилось сразу же и работает прекрасно.
*

Pavel M

  • Захожу иногда
  • 103
  • 8 / 0
  • Учиться никогда не поздно
Re: Как убрать ID из ссылок?
« Ответ #39 : 04.11.2011, 12:18:47 »
У меня другой вопрос. Думаю, что многим так же интересно это узнать:

Я всё проделал, как надо. Работает отлично. Только одно но: как быть со старыми ссылками? они то остаются на месте.

то есть, адрес выглядит так site.ru/category/ssulka. Но адрес site.ru/category/1-ssulka так же существует. Можно ли как-то вообще отключить старые ссылки, чтобы избежать дублей?
*

Web-Simple

  • Захожу иногда
  • 274
  • 1 / 0
Re: Как убрать ID из ссылок?
« Ответ #40 : 04.11.2011, 19:54:20 »
Вы значит где-то не там смотрите. У меня на 1.7 всё появилось сразу же и работает прекрасно.
А в какое место вы вставляли, в файле config.xml?
*

drenls

  • Захожу иногда
  • 62
  • 4 / 1
Re: Как убрать ID из ссылок?
« Ответ #41 : 05.11.2011, 19:33:51 »
Web-Simple
Попробуй например добавить после description

Код
<?xml version="1.0" encoding="utf-8"?>
<config>
<fieldset
name="articles"
label="JGLOBAL_ARTICLES"
description="COM_CONTENT_CONFIG_ARTICLE_SETTINGS_DESC">

<field name="sef_advanced_link"
type="radio"
default="0"
label="Sef Advanced Mode"
description="Remove ItemID from Content URL?">
<option value="0">JNO</option>
<option value="1">JYES</option>
                </field>

Спойлер
[свернуть]
« Последнее редактирование: 05.11.2011, 19:41:58 от drenls »
*

Web-Simple

  • Захожу иногда
  • 274
  • 1 / 0
Re: Как убрать ID из ссылок?
« Ответ #42 : 11.11.2011, 22:08:53 »
Теперь ID убрались. Однако одна статья в блоге категории, почему-то не работает, хотя и прописана правильно. С чем это может быть связанно? Так же интересует способ предохранения от дублей материалов, который возникает при удалении ID?
*

Pavel M

  • Захожу иногда
  • 103
  • 8 / 0
  • Учиться никогда не поздно
Re: Как убрать ID из ссылок?
« Ответ #43 : 12.11.2011, 16:53:33 »
Возможно, что алиас этой статьи совпал с какой-то другой статьёй? тогда отображится та статья, у которой ID равен 1. Тоже самое, если будут категории с одинаковым алиасом.
*

Web-Simple

  • Захожу иногда
  • 274
  • 1 / 0
Re: Как убрать ID из ссылок?
« Ответ #44 : 13.11.2011, 21:09:26 »
Да нет, алиас  и ID (11) оригинальный. Как же всё таки настроить нормальный переход с блога статьи, на эту статью?
*

Rex_One

  • Захожу иногда
  • 453
  • 37 / 0
Re: Как убрать ID из ссылок?
« Ответ #45 : 22.11.2011, 05:34:22 »
Немного отойду в сторону (по форуму не нашел), а как стандартными средствами убрать ID из ссылок именно компонента K2 v.2.5.1  на Joomla 1.73
Стандартные средства меня вполне устраивают, вот бы только с K2 разобраться.
Заранее благодарю за ответ.
Кривизна рук не компенсирует прямизну извилин.
*

vitea7

  • Новичок
  • 4
  • 0 / 0
Re: Как убрать ID из ссылок?
« Ответ #46 : 23.11.2011, 03:47:13 »
Да нет, алиас  и ID (11) оригинальный. Как же всё таки настроить нормальный переход с блога статьи, на эту статью?
Точно такаяже проблема, id убрались, но ссылки не работают

Кстати попутно в url есть и ещё одна проблема:
Ссылка выглядит как /o-kompanii/novosti/priglashaem-na-vystavku
А должна бы novosti/priglashaem-na-vystavku
т.е. почемуто цепляется url страницы с которой сделан переход, хотя и та и та ссылка всёравно не работают, выкидывает на #404 COM_CONTENT_ERROR_PARENT_CATEGORY_NOT_FOUND или #404 Материал не найден

P.S. в router.php заменил на if ($count == 1 && !$advanced) {
*

creative3d

  • Захожу иногда
  • 186
  • 6 / 0
Re: Как убрать ID из ссылок?
« Ответ #47 : 20.01.2012, 20:18:50 »
#404 COM_CONTENT_ERROR_PARENT_CATEGORY_NOT_FOUND или #404 Материал не найден
Была такая, попробуйте структуру меню подстроить подстроить под структуру категорий (не знаю как объяснить более понятно). Ошибка означает, что родительская категория не найдена, значит, ее нужно "найти"/создать и подсунуть материалу :)
*

creative3d

  • Захожу иногда
  • 186
  • 6 / 0
Re: Как убрать ID из ссылок?
« Ответ #48 : 20.01.2012, 20:21:34 »
Спасибо большое за решение, наконец-то избавился от Artio JoomSEF! :D
Пара вопросов:
- при каждом обновлении теперь проверять конфиг файл и файл router.php?
- в 2.5 версии это тоже будет работать? (ну кто-то может уже проверил...)
*

nbserg

  • Захожу иногда
  • 166
  • 0 / 0
Re: Как убрать ID из ссылок?
« Ответ #49 : 25.01.2012, 02:04:16 »
так же интересно про 2.5
проверил работает
« Последнее редактирование: 25.01.2012, 02:09:03 от nbserg »
*

dMark

  • Осваиваюсь на форуме
  • 15
  • 0 / 0
Re: Как убрать ID из ссылок?
« Ответ #50 : 30.01.2012, 13:49:02 »
Подскажите пожалуйста.
По всему сайту работает нормально, но для модуля mod_jaclatest_comments не пашет.
Там используется href="<?php echo $item->referer;?>"
в отличии от других модулей где <?php echo $item->link; ?>.
Подскажите. где искать причину?
*

Очередной вебмастер

  • Давно я тут
  • 768
  • 55 / 0
  • лысый умный дядя
Re: Как убрать ID из ссылок?
« Ответ #51 : 31.01.2012, 19:21:12 »
Интересная фича. Может все таки мы увидим исчезновение ID в новых версиях Joomla
А пока вижу возможность применения только на чисто контентных проектах, при этом каждая категория получается должна иметь ссылку из меню...
Сайты на Joomla, разработка и поддержка
----------
Помог ответ - жми плюс!
*

lexusus

  • Новичок
  • 5
  • 0 / 0
Re: Как убрать ID из ссылок?
« Ответ #52 : 15.02.2012, 01:44:25 »
Убрать id из ссылки можно с помощью простого плагина HP Router. Только есть ли для Joomla 1.7.
*

MMONSTERR

  • Захожу иногда
  • 59
  • 3 / 0
Re: Как убрать ID из ссылок?
« Ответ #53 : 25.02.2012, 09:20:30 »
Сделал я так 3 месяца назад и проблем не знал. Только вот вчера нашли баг этого метода ... если статья в одно слово, то ЧПУ перестает работать... решил проблемму хаком роутера (читать тут http://alex-leo.ru/joomla/116-ybiraem-id-iz-statei-joomla)
*

dmt044

  • Новичок
  • 1
  • 0 / 0
Re: Как убрать ID из ссылок?
« Ответ #54 : 22.03.2012, 16:51:15 »
Сделал я так 3 месяца назад и проблем не знал. Только вот вчера нашли баг этого метода ... если статья в одно слово, то ЧПУ перестает работать... решил проблемму хаком роутера (читать тут http://alex-leo.ru/joomla/116-ybiraem-id-iz-statei-joomla)
После редактирования файла router.php по материалам выше изложенной статьи:
Joomla! 2.5.3 выдает ошибку @Notice: Undefined index: id in D:\wamp\www\bbright.com.ua\components\com_content\router.php on line 278@

Подскажите пожалуйста, как убрать ID материалов, категорий в строке адреса(Joomla! 2.5.3)?
Компоненты и плагины устанавливать не хочется. Но, походу, придется..
И зачем разработчики сделали эти ID в строке адреса, еще и без возможности отключения?!
*

leshkoff

  • Захожу иногда
  • 83
  • 0 / 0
Re: Как убрать ID из ссылок?
« Ответ #55 : 15.05.2012, 12:21:32 »
Люди, помогите, обнаружил проблему с дублями категорий, точнее со списком материалов в виде блога на разных страницах.
Обнаружил через Google webmasters.
Вот пример:
Цитировать
/89-articles/you-know/116-quickly-tr
/89-articles/you-know
/know-that/adverbs/89-articles/you-know/116-quickly-tr
/know-that/adverbs/89-articles/you-know
/know-that/adverbs
/know-that/complexity/89-articles/you-know/116-quickly-tr
/know-that/complexity/89-articles/you-know
/know-that/complexity
/know-that/eng-america/89-articles/you-know/116-quickly-tr
/know-that/eng-america/89-articles/you-know
/know-that/eng-america
/know-that/eng-hindi/89-articles/you-know/116-quickly-tr
/know-that/eng-hindi/89-articles/you-know
/know-that/eng-hindi
/know-that/guild/89-articles/you-know
/know-that/guild
/know-that/hiqh-quality-translate/89-articles/you-know/116-quickly-tr
/know-that/hiqh-quality-translate/89-articles/you-know
/know-that/machine-tr/89-articles/you-know/116-quickly-tr
/know-that/machine-tr/89-articles/you-know
/know-that/machine-tr
/know-that/notariat/89-articles/you-know/116-quickly-tr
/know-that/notariat/89-articles/you-know
/know-that/notariat
/know-that/quickly-tr
/know-that/translate-and-law/89-articles/you-know
/know-that/translate-and-law
/know-that/unusual/89-articles/you-know/116-quickly-tr
/know-that/unusual/89-articles/you-know
/know-that/unusual
89 - это id категории, articles - видимо автомат. формирующийся список материалов в данной категории...

Это только часть. Весь необходимый код везде добавлен в папке шаблона. Показ списка категорий и материалов в них так же закрыт. Есть похожая проблема в компоненте aicontactsafe, но там все решается прописыванием пары строчек в роботс.

Дубли списков материалов уходят, если удалить папки category и categories в com_content. Но это не вариант.
Во вложении папка ком контент и список дублирующихся страниц.

Помогите пожалуйста кто чем может!

[вложение удалено Администратором]
*

kuraga

  • Новичок
  • 7
  • 0 / 0
Re: Как убрать ID из ссылок?
« Ответ #56 : 06.07.2012, 16:37:35 »
А у меня способ, описанный топик-стартером, не работает... (2.5.6)  Ссылки нормальные, но 404. Прошу помощи!
*

Lrad

  • Захожу иногда
  • 57
  • 0 / 0
Re: Как убрать ID из ссылок?
« Ответ #57 : 18.08.2012, 18:07:49 »
А я сделал в версии 2.5.6 совсем по другому и все работает ^-^

Редактируем файл Router.php находящийся в ваш_сайт/components/com_content/

Нажимаем CTRL+F (запускаем поиск) и ищем

     $params->get('sef_advanced_link',

должно найти 2 результата, первая примерно на 27й строке в функции function ContentBuildRoute(&$query) и вторая на 208й строке в функции function ContentParseRoute($segments). Если не находит, поищите по функциям или по номеру строк. И в найденных строках

    $advanced = $params->get('sef_advanced_link', 0);

меняем 0 на 1 в обоих строках.



Чуть ниже где то на 228й строке находим if (strpos($segments[0], ':') === false) { (можете через поиск)

     if (strpos($segments[0], ':') === false) {

          $vars['view'] = 'article';

          $vars['id'] = (int)$segments[0];

          return $vars;

     }

и комментируем все пять строк подряд начиная с /* и заканчивая */



Нашел этот способ тут
*

novotex

  • Осваиваюсь на форуме
  • 11
  • 0 / 0
Re: Как убрать ID из ссылок?
« Ответ #58 : 17.09.2012, 23:16:06 »
Спасибо!
Помогло.
*

ru_RU

  • Осваиваюсь на форуме
  • 15
  • 1 / 0
Re: Как убрать ID из ссылок?
« Ответ #59 : 19.10.2012, 04:41:25 »
да, способ подкинутый Lrad'ом, работает на Joomla 2.5. спасибо.
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Как убрать из индекса Яндекса дубли?

Автор gonzyk263

Ответов: 3
Просмотров: 3809
Последний ответ 01.07.2024, 23:26:54
от Cleaning74
[FAQ] Как убрать <meta name="generator" content="Joomla! 2.5 - Open Source Content Management" />

Автор neket

Ответов: 56
Просмотров: 316107
Последний ответ 05.11.2020, 20:00:15
от Grigoriy82
Убрать название пункта меню из URL материала

Автор fortuner

Ответов: 15
Просмотров: 8746
Последний ответ 31.10.2020, 00:46:04
от spas
Как убрать < class="moduletable ">на лицевой части сайта?

Автор indes

Ответов: 11
Просмотров: 4184
Последний ответ 07.05.2020, 17:35:38
от beliyadm
как убрать ?limitstart=0

Автор nbserg

Ответов: 38
Просмотров: 17547
Последний ответ 24.08.2018, 20:50:05
от Vasiliy111