Новости Joomla

Совет по Joomla: несколько значений по умолчанию в XML-формах для стандартных полей типа list

👩‍💻 Совет по Joomla: несколько значений по умолчанию в XML-формах для стандартных полей типа list.При работе над плагином возникла необходимость указать стандартный набор из нескольких элементов стандартного поля списка. И хотелось указать их в стандартном же атрибуте default для полей. Когда это нужно?Когда Ваши пользователи устанавливают плагин и НЕ заходят в настройки - в коде вы можете использовать значения по умолчанию с помощью класса Registry (писал об этом ранее) и всегда быть уверенным, что хоть какие-то жизненно необходимые параметры к вам придут всегда. 🧐 Но как сделать то же самое для интерфейса админки?Пользователя нужно направлять, предлагать очевидный работоспособный сценарий для начала, а дальше он уже сам разберется. Когда человек заходит в параметры свежеустановленного плагина в Form ещё нет данных и параметры по умолчанию выставляются из атрибутов default в xml-полях.
<field name="showdesc" type="radio"                       label="PLG_CFI_PARAM_SHOWDESC"                       class="btn-group btn-group-yesno"                       default="1">                    <option value="0">JNO</option>                    <option value="1">JYES</option>                </field>
Здесь по умолчанию будет включено "Да". И если пользователь не переключит параметр, то при сохранении мы ожидаемо получим "да" в params плагина.Для поля списков type=&quot;list&quot; можно указать значение по умолчанию и многие знают, что его можно указать только одно.
<field type="list"                       name="article_fields"                       label="article_fields"                       description="article_fields_desc"                       layout="joomla.form.field.list-fancy-select"                       multiple="true"                       default="id"                >                    <option value="id">id</option>                    <option value="title">title</option>                    <option value="alias">alias</option>                    <option value="introtext">introtext</option>                    <option value="fulltext">fulltext</option>                    <option value="state">state</option></field>
Но у нас поле с множественным выбором (атрибут multiple) и хотелось бы указать несколько значений по умолчанию...Оказывается, так можно сделать. Для этого в атрибуте default нужно указать json с нужными параметрами в виде {int}key : {string} value.Например, default='{"0":"id","1":"title"}'.
<field type="list"                       name="article_fields"                       label="article_fields"                       description="article_fields_desc"                       layout="joomla.form.field.list-fancy-select"                       multiple="true"                       default='{"0":"id","1":"title"}'                >                    <option value="id">id</option>                    <option value="title">title</option>                    <option value="alias">alias</option>                    <option value="introtext">introtext</option>                    <option value="fulltext">fulltext</option>                    <option value="state">state</option></field>
⚠️ Обратите внимание на кавычки! Поскольку json_decode не понимает одинарные кавычки собственно json нужно писать с двойными, а значение для атрибута default писать в одинарные.🙏 За подсказанное решение огромное спасибо участникам нашего сообщества - разработчикам Дмитрию Васюкову (@fictionlabs) и Игорю Бердичевскому (@septdir).@joomlafeed#joomla #разработка #webdev #development

0 Пользователей и 1 Гость просматривают эту тему.
  • 17 Ответов
  • 62199 Просмотров
*

jackmc

  • Осваиваюсь на форуме
  • 10
  • 0 / 0
У меня на сайте для всех страниц используется один шаблон. Мне необходимо ТОЛЬКО на главной отобразить модуль (mod_custom), на всех же страницах этот модуль не показывать, как это можно сделать?
« Последнее редактирование: 26.10.2009, 20:26:08 от PaLyCH »
*

SKeeper

  • Осваиваюсь на форуме
  • 12
  • 0 / 0
Re: Модуль только на одной странице
« Ответ #1 : 19.11.2008, 16:07:42 »
У меня на сайте для всех страниц используется один шаблон. Мне необходимо ТОЛЬКО на главной отобразить модуль (mod_custom), на всех же страницах этот модуль не показывать, как это можно сделать?

Можно попытаться привязать модуль к пункту меню:
В Менеджере модулей выбираем нужный модуль и в пункте Назначение меню выбрать нужный пункт (в Вашем случае пункт соответствующий главной странице)
*

jackmc

  • Осваиваюсь на форуме
  • 10
  • 0 / 0
Re: Модуль только на одной странице
« Ответ #2 : 19.11.2008, 17:25:38 »
Можно попытаться привязать модуль к пункту меню:
В Менеджере модулей выбираем нужный модуль и в пункте Назначение меню выбрать нужный пункт (в Вашем случае пункт соответствующий главной странице)

А можно ли как-нибудь сделать через код?
*

smart

  • Администратор
  • 6478
  • 1318 / 15
  • Хочешь сделать хорошо — сделай!
Re: Модуль только на одной странице
« Ответ #3 : 19.11.2008, 17:33:05 »
Можно, добавьте в шаблон новую область (например frontpage_top):

Код: php
<?php
$option = JRequest::getCmd('option');
$view = JRequest::getVar('view', 'frontpage');
if ($option == 'com_content' && $view == 'frontpage') {
?>
<jdoc:include type="modules" name="frontpage_top" style="raw" />
<?php
}

Подкорректируйте xml-файл шаблона, добавив в нем эту область в список областей, и затем опубликуйте ваш модуль в этой области.

Либо используйте какую-то из существующих, заключив ее в указанный блок проверок - тогда править xml-файл не придётся.
*

Dimchik

  • Осваиваюсь на форуме
  • 34
  • 6 / 0
Re: Модуль только на одной странице
« Ответ #4 : 02.12.2008, 18:39:12 »
спасибо! помогло
*

kavkaz07

  • Осваиваюсь на форуме
  • 17
  • 0 / 0
Re: Модуль только на одной странице
« Ответ #5 : 08.12.2008, 15:31:26 »
а если нужно чтоб модуль был виден только на главной странице компонента и больше нигде?
*

pedrosoft

  • Захожу иногда
  • 367
  • 113 / 7
Re: Модуль только на одной странице
« Ответ #6 : 19.12.2008, 18:02:37 »
какого именно компонента?

для com_content см. код выше от Смарта
Интернет Хостинг Центр: отличные цены, лучшее качество, расположение в дата-центре «Оверсан-Меркурий»
*

MAzZY

  • Захожу иногда
  • 93
  • 5 / 0
Re: Модуль только на одной странице
« Ответ #7 : 02.01.2009, 19:18:39 »
У меня сходная проблема. Мне нужно, чтобы модуль отображался на страницах статей, но не показывался на страницах самих категорий и разделов. Как такое можно сделать?
И еще вдогонку. Нужно сделать отображение этого модуля на страницах PhocaGallery.
*

beliyadm

  • Легенда
  • 9758
  • 1665 / 66
  • Севастополь, Россия
Re: Модуль только на одной странице
« Ответ #8 : 03.01.2009, 21:35:08 »
У меня сходная проблема. Мне нужно, чтобы модуль отображался на страницах статей, но не показывался на страницах самих категорий и разделов. Как такое можно сделать?
Код: php
if ($view==article) { } else {}
Все истины, которые я хочу вам изложить, — бесстыдная ложь. Сделать всё хорошо
TLG: @Beliyadm
*

MAzZY

  • Захожу иногда
  • 93
  • 5 / 0
Re: Модуль только на одной странице
« Ответ #9 : 03.01.2009, 22:16:40 »
Вот спасибо. Действительно помогло.
Правда, я что-то накосячил и у меня теперь модуль отображается в статьях как положено, а на других страницах на его месте просто пустота, хотя не должно быть ничего. Т.е. отведено место под блок (в этом блоке только один модуль), но там пусто. Кстати говоря, когда не было условия, такой ситуации не возникало
Вот код, который я сделал:

Код
<?php 
$option = JRequest::getCmd('option');
$view = JRequest::getVar('view');
if ($option == 'com_content' && $view == 'article') {?>
<!-- BEGIN: RIGHT COLUMN -->
<div id="ja-col2">
<jdoc:include type="modules" name="right_new" style="jarounded" />
</div><br />
<!-- END: RIGHT COLUMN -->
<?php }?>
Сделано из кода правой панели стиля ja_purity.

А как определить параметры для PhocaGallery чтобы можно было составить такое же условие? Где их можно найти?
« Последнее редактирование: 03.01.2009, 22:21:01 от MAzZY »
*

beliyadm

  • Легенда
  • 9758
  • 1665 / 66
  • Севастополь, Россия
Re: Модуль только на одной странице
« Ответ #10 : 03.01.2009, 22:20:57 »
Правда, я что-то накосячил и у меня теперь модуль отображается в статьях как положено, а на других страницах на его месте просто пустота, хотя не должно быть ничего.
правильно, у тебя условие - если компонент com_content и режим просмотра полный текст статьи - то показать модуль, иначе - пусто.
Аналогичное условие можно применить не только к позиции модуля, но и DIV либо ячейке таблицы, в которую он заключен, тогда не будет пустого куска экрана
Проверяй, что у тебя является родителем для <div id="ja-col2">
Все истины, которые я хочу вам изложить, — бесстыдная ложь. Сделать всё хорошо
TLG: @Beliyadm
*

MAzZY

  • Захожу иногда
  • 93
  • 5 / 0
Re: Модуль только на одной странице
« Ответ #11 : 03.01.2009, 22:26:30 »
С условием
Код
if ($view == 'article')
получается точно также.
Или я что-то не так понял...
*

MAzZY

  • Захожу иногда
  • 93
  • 5 / 0
Re: Модуль только на одной странице
« Ответ #12 : 03.01.2009, 22:28:52 »
Проверяй, что у тебя является родителем для <div id="ja-col2">
Вот такая там конструкция:
Код
<div id="ja-containerwrap<?php echo $divid; ?>">
<div id="ja-containerwrap2">
<div id="ja-container">
<div id="ja-container2" class="clearfix">

Как к ним применить такое условие?
« Последнее редактирование: 03.01.2009, 22:37:31 от MAzZY »
*

beliyadm

  • Легенда
  • 9758
  • 1665 / 66
  • Севастополь, Россия
Re: Модуль только на одной странице
« Ответ #13 : 03.01.2009, 22:40:41 »
готового решения не дам, ибо шаблон на дивах, с ними невозможно не видя кода CSS дать подобное решение (какой блок можно отключить), если приложите и файл стилей - может быть кто нибудь и даст готовое решение
Все истины, которые я хочу вам изложить, — бесстыдная ложь. Сделать всё хорошо
TLG: @Beliyadm
*

MAzZY

  • Захожу иногда
  • 93
  • 5 / 0
Re: Модуль только на одной странице
« Ответ #14 : 03.01.2009, 22:47:14 »
Код
#ja-containerwrap {
background: url(../images/cw-bg1.gif) repeat-y 50% 0;
}

#ja-containerwrap2 {
background: url(../images/cw-bg2.gif) no-repeat 50% 0;
}

#ja-container {
background: url(../images/c-bg1.gif) repeat-y 18% 0;
}

#ja-container2 {
padding: 20px 0;
background: url(../images/c-bg2.gif) no-repeat 18% 0;
}

#ja-col2 {
float: right;
width: 20%;
overflow: hidden;
}

Код
/* Clearfix */
.clearfix:after {
clear: both;
display: block;
content: ".";
height: 0;
visibility: hidden;
}

* html > body .clearfix {
width: 100%;
display: block;
}

* html .clearfix {
height: 1%;
}
Вот все задействованные строки, если я ничего не упустил.

Может есть какое-то более простое решение, какое-то другое условие?
« Последнее редактирование: 03.01.2009, 22:50:18 от MAzZY »
*

MAzZY

  • Захожу иногда
  • 93
  • 5 / 0
Re: Модуль только на одной странице
« Ответ #15 : 03.01.2009, 22:58:11 »
А может проблема с отображением пустого поля возникает из-за того, что модуль включен для всех страниц?
*

MAzZY

  • Захожу иногда
  • 93
  • 5 / 0
Re: Модуль только на одной странице
« Ответ #16 : 05.01.2009, 18:00:13 »
Решил проблему методом костыля: т.к. этот блок является копией правой колонки, то я просто вставил в неё другой модуль и теперь все пустые места закрыты.
Но все равно, хотелось бы решить проблему грамотно. Подскажите, как это все исправить?
*

ZHart

  • Захожу иногда
  • 324
  • 53 / 2
Re: Модуль только на одной странице
« Ответ #17 : 10.11.2009, 18:46:14 »
У меня сходная проблема. Мне нужно, чтобы модуль отображался на страницах статей, но не показывался на страницах самих категорий и разделов. Как такое можно сделать?

А можно сделать что-то подобное без вмешательства в код модуля?
Сложность в том, что нужно один модуль отображать только на главной странице, другой (такого же типа) - на всех страницах сайта, третий (тоже того же типа) - только на страницах статей (когда статьи отображаются в full mode).
Речь идет о модуле mod_jatabs, который шел в комплекте с шаблоном от JoomlArt (лицензионным).
Как такое проще всего реализовать?
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Модуль Материалы той же категории, что и открытая статья

Автор genius

Ответов: 12
Просмотров: 2690
Последний ответ 15.11.2017, 13:14:03
от genius
[HOW-TO]Начало статьи - видно всем, продолжение - только зарегистрированным.

Автор Wild Tiger

Ответов: 6
Просмотров: 9986
Последний ответ 14.11.2011, 17:56:04
от Wild Tiger
Title на странице результатов поиска

Автор delphine

Ответов: 3
Просмотров: 26682
Последний ответ 22.06.2009, 09:46:03
от delphine
Изменение адреса к странице administrator

Автор phaestos

Ответов: 1
Просмотров: 37908
Последний ответ 24.12.2008, 00:24:52
от ChaosDay
Как показать модуль только не зарегистрированным пользователям?

Автор jfsv

Ответов: 1
Просмотров: 29342
Последний ответ 13.11.2008, 14:18:13
от beliyadm