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

muria

  • Осваиваюсь на форуме
  • 16
  • 1 / 0
Всем привет!
Хочу вставить ссылки в слайдшоу на главной, чтобы вели на страницы с соотв. товарами. По умолчанию возможна только ссылка на категорию. Есть ли такая возможность вообще? Помогите пожалуйста.

*

Ilhom666

  • Завсегдатай
  • 1384
  • 184 / 0
Re: Как вставить ссылки в слайдшоу?
« Ответ #1 : 09.11.2015, 07:34:39 »
слайдшоу плагином выводите или модулем? Ссылка на сайт есть?
*

vipiusss

  • Гуру
  • 5739
  • 344 / 11
  • Скайп: renor_
Re: Как вставить ссылки в слайдшоу?
« Ответ #2 : 09.11.2015, 09:39:26 »
в tmpl слайдера изменить род ссылки и ручками вставить.Дайте сайт ссылку, или модуль, или(что лучше) просто код в аттаче данного файла из папки tmpl (если структура стандартная модуля).
Миграция, установка, обновление версий Joomla  |  Создание сайтов "под ключ"  |  Эксклюзивные заглушки "offline"  |  Работа с "напильником" над шаблонами и расширениями
*

muria

  • Осваиваюсь на форуме
  • 16
  • 1 / 0
Re: Как вставить ссылки в слайдшоу?
« Ответ #3 : 09.11.2015, 15:21:01 »
слайдшоу плагином выводите или модулем? Ссылка на сайт есть?
сайт пока на Денвере. на днях собираюсь выкладывать. вывожу кнопкой, которую с Phoca button скачала. это плагин наверное?
*

muria

  • Осваиваюсь на форуме
  • 16
  • 1 / 0
Re: Как вставить ссылки в слайдшоу?
« Ответ #4 : 09.11.2015, 15:28:11 »
в tmpl слайдера изменить род ссылки и ручками вставить.Дайте сайт ссылку, или модуль, или(что лучше) просто код в аттаче данного файла из папки tmpl (если структура стандартная модуля).

Вот код default_slideshow.php целиком, из папки  \components\com_phocagallery\views\phocagallerylinkimg\tmpl надеюсь я то, что нужно смотрю? :)

Код
 <?php
defined('_JEXEC') or die('Restricted access');
$user = JFactory::getUser();

//Ordering allowed ?
$ordering = ($this->lists['order'] == 'a.ordering');

JHtml::_('behavior.tooltip');
?>
<script type="text/javascript">
//<![CDATA[
function insertLink() {

<?php
$items = array('width', 'height', 'delay', 'image', 'pgslink', 'imageordering' );
$itemsArrayOutput = '';
foreach ($items as $key => $value) {

echo 'var '.$value.' = document.getElementById("'.$value.'").value;'."\n"
.'if ('.$value.' != \'\') {'. "\n"
.''.$value.' = "|'.$value.'="+'.$value.';'."\n"
.'}';
$itemsArrayOutput .= '+'.$value;
}
?>

/* Category */
var categoryid = document.getElementById("filter_catid").value;
var categoryIdOutput = '';
if (categoryid != '') {
categoryIdOutput = "id="+categoryid;
}


if (categoryIdOutput != '' &&  parseInt(categoryid) > 0) {
/*return false;*/
} else {
alert("<?php echo JText::_( 'COM_PHOCAGALLERY_PLEASE_SELECT_CATEGORY', true ); ?>");
return false;
}

var tag = "{pgslideshow "+categoryIdOutput<?php echo $itemsArrayOutput ?>+"}";
window.parent.jInsertEditorText(tag, '<?php echo $this->tmpl['ename']; ?>');
window.parent.SqueezeBox.close();
}
//]]>
</script>
<div id="phocagallery-links">
<fieldset class="adminform">
<legend><?php echo JText::_('COM_PHOCAGALLERY_IMAGE'); ?></legend>
<form action="<?php echo $this->request_url; ?>" method="post" name="adminForm"  id="adminForm">

<table class="admintable" width="100%">

<tr>
<td class="key" align="right" nowrap="nowrap" width="30%" >
<label for="title" nowrap="nowrap" >
<?php echo JText::_( 'COM_PHOCAGALLERY_CATEGORY' ); ?>
</label>
</td width="70%">
<td><?php echo $this->lists['catid']; ?></td>
</tr>
</table>


<input type="hidden" name="controller" value="phocagallerylinkimg" />
<input type="hidden" name="type" value="<?php echo (int)$this->tmpl['type']; ?>" />
<input type="hidden" name="boxchecked" value="0" />
<input type="hidden" name="filter_order" value="<?php echo $this->lists['order']; ?>" />
<input type="hidden" name="filter_order_Dir" value="<?php echo $this->lists['order_Dir']; ?>" />
<input type="hidden" name="e_name" value="<?php echo $this->tmpl['ename']?>" />
</form>



<form name="adminFormLink" id="adminFormLink">
<table class="admintable" width="100%">
<?php
// Number
$itemsNumber = array ('width' => array('COM_PHOCAGALLERY_SLIDESHOW_WIDTH', 640),'height' => array('COM_PHOCAGALLERY_SLIDESHOW_HEIGHT',480), 'delay' => array('COM_PHOCAGALLERY_SLIDESHOW_DELAY',3000));
foreach ($itemsNumber as $key => $value) {
echo '<tr>'
.'<td class="key" align="right" width="30%"><label for="'.$key.'">'.JText::_($value[0]).'</label></td>'
.'<td nowrap="nowrap"><input type="text" name="'.$key.'" id="'.$key.'" value="'.$value[1].'" class="text_area" /></td>'
.'</tr>';
}

echo '<tr>'
.'<td class="key" align="right" width="30%"><label for="image">'.JText::_('COM_PHOCAGALLERY_IMAGE').'</label></td>'
.'<td nowrap><select name="image" id="image" class="inputbox">'
.'<option value="L"  selected="selected">'. JText::_( 'COM_PHOCAGALLERY_LARGE' ).'</option>'
.'<option value="M" >'.JText::_( 'COM_PHOCAGALLERY_MEDIUM' ).'</option>'
.'<option value="S" >'.JText::_( 'COM_PHOCAGALLERY_SMALL' ).'</option>'
.'<option value="O" >'.JText::_( 'COM_PHOCAGALLERY_ORIGINAL_IMAGE' ).'</option>'
.'</select></td></tr>';

echo '<tr>'
.'<td class="key" align="right" width="30%"><label for="pgslink">'.JText::_('COM_PHOCAGALLERY_SLIDESHOW_LINK').'</label></td>'
.'<td nowrap><select name="pgslink" id="pgslink" class="inputbox">'
.'<option value=""  selected="selected">'. JText::_( 'COM_PHOCAGALLERY_DEFAULT' ).'</option>'
.'<option value="1" >'.JText::_( 'COM_PHOCAGALLERY_LINK_TO_CATEGORY' ).'</option>'
.'<option value="2" >'.JText::_( 'COM_PHOCAGALLERY_LINK_TO_CATEGORIES' ).'</option>'
.'</select></td></tr>';
?>
<tr>
<td class="key" align="right" width="30%"><label for="imageordering"><?php echo JText::_( 'COM_PHOCAGALLERY_IMAGE_ORDERING' ); ?></label></td>
<td><select name="imageordering" id="imageordering" class="inputbox">
<option value="" selected="selected"><?php echo JText::_('COM_PHOCAGALLERY_DEFAULT')?></option>
<option value="" selected="selected"><?php echo JText::_('COM_PHOCAGALLERY_DEFAULT')?></option>
<option value="1"><?php echo JText::_('COM_PHOCAGALLERY_ORDERING_ASC')?></option>
<option value="2"><?php echo JText::_('COM_PHOCAGALLERY_ORDERING_DESC')?></option>
<option value="3"><?php echo JText::_('COM_PHOCAGALLERY_TITLE_ASC')?></option>
<option value="4"><?php echo JText::_('COM_PHOCAGALLERY_TITLE_DESC')?></option>
<option value="5"><?php echo JText::_('COM_PHOCAGALLERY_DATE_ASC')?></option>
<option value="6"><?php echo JText::_('COM_PHOCAGALLERY_DATE_DESC')?></option>
<option value="7"><?php echo JText::_('COM_PHOCAGALLERY_ID_ASC')?></option>
<option value="8"><?php echo JText::_('COM_PHOCAGALLERY_ID_DESC')?></option>
<option value="9"><?php echo JText::_('COM_PHOCAGALLERY_RANDOM')?></option>
</select></td>
</tr>

<tr>
<td>&nbsp;</td>
<td align="right"><button class="btn btn-primary" onclick="insertLink();return false;"><span class="icon-ok"></span> <?php echo JText::_( 'COM_PHOCAGALLERY_INSERT_CODE' ); ?></button></td>
</tr>
</table>
</form>

</fieldset>
<div style="text-align:left;"><span class="icon-16-edb-back"><a style="text-decoration:underline" href="<?php echo $this->tmpl['backlink'];?>"><?php echo JText::_('COM_PHOCAGALLERY_BACK')?></a></span></div>
</div>
« Последнее редактирование: 09.11.2015, 15:40:17 от muria »
*

vipiusss

  • Гуру
  • 5739
  • 344 / 11
  • Скайп: renor_
Re: Как вставить ссылки в слайдшоу?
« Ответ #5 : 09.11.2015, 15:34:04 »
хороший у вас спойлер)

  if (categoryid != '') {
      categoryIdOutput = "id="+categoryid;
   }
ну вот вроде у вас тыкает на категорию, опр. ид её

<form action="<?php echo $this->request_url; ?>" method="post" name="adminForm"  id="adminForm">
 форма берёт юрл.

А если вы автоматом хотите из админки, при смене-меняется и там, то это вам надо в комм раздел, чтоб платно переписали модуль.
Ну или ждите, может кто найдёт время и перелопатит модуль(тогда весь модуль приаттачте)
Миграция, установка, обновление версий Joomla  |  Создание сайтов "под ключ"  |  Эксклюзивные заглушки "offline"  |  Работа с "напильником" над шаблонами и расширениями
*

muria

  • Осваиваюсь на форуме
  • 16
  • 1 / 0
Re: Как вставить ссылки в слайдшоу?
« Ответ #6 : 09.11.2015, 15:43:49 »
хороший у вас спойлер)

исправилась :)

 
  if (categoryid != '') {
      categoryIdOutput = "id="+categoryid;
   }
ну вот вроде у вас тыкает на категорию, опр. ид её

<form action="<?php echo $this->request_url; ?>" method="post" name="adminForm"  id="adminForm">
 форма берёт юрл.

А если вы автоматом хотите из админки, при смене-меняется и там, то это вам надо в комм раздел, чтоб платно переписали модуль.
Ну или ждите, может кто найдёт время и перелопатит модуль(тогда весь модуль приаттачте)

а вы не могли бы чайнице указать, вместо какой строчки написать нужный мне URL?, я хочу чтобы не на категорию вела ссылка, а прямо на конкретный товар в Виртумарте)) а в PHP не понимаю, к сожалению (((
*

vipiusss

  • Гуру
  • 5739
  • 344 / 11
  • Скайп: renor_
Re: Как вставить ссылки в слайдшоу?
« Ответ #7 : 09.11.2015, 15:48:40 »
исправилась :)
))) улыбнуло.это спойлер?

переписывать именно я не буду, т.к. мне надо вашу Фоку установить, модуль, категории, картинки ..... и возится с этим ради того, чтобы просто ответить вам решение, куда ставить и что в коде.
Может у кого есть Фока на борту и подскажут.
Извините.
///
За печеньки-не вопрос.
Тогда в комм.раздел.
Миграция, установка, обновление версий Joomla  |  Создание сайтов "под ключ"  |  Эксклюзивные заглушки "offline"  |  Работа с "напильником" над шаблонами и расширениями
*

muria

  • Осваиваюсь на форуме
  • 16
  • 1 / 0
Re: Как вставить ссылки в слайдшоу?
« Ответ #8 : 09.11.2015, 16:03:12 »
))) улыбнуло.это спойлер?
спойлер я думала от слова "портить". убрала код, логически поразмыслив.
переписывать именно я не буду, т.к. мне надо вашу Фоку установить, модуль, категории, картинки ..... и возится с этим ради того, чтобы просто ответить вам решение, куда ставить и что в коде.

я думала, в этой теме отвечают те, кто работает с Фокой, соотв. у кого она уже есть.
а для того, чтобы написать как правильно применить переменную echo $this - модуль устанавливать не надо) Даже чайник вроде меня это понимает.
*

vipiusss

  • Гуру
  • 5739
  • 344 / 11
  • Скайп: renor_
Re: Как вставить ссылки в слайдшоу?
« Ответ #9 : 09.11.2015, 16:07:49 »
если вы считаете что просто надо переписать переменную по вашим словам-так перепишите её.
зачем тему тогда?

А про то, что тема Фоки-не значит, что читают не только те, кто Фоку ставит/ставил или стоит.

Может кто захочет, видя код, перепесать его и дать готовый в спойлере или приаттачит.
Миграция, установка, обновление версий Joomla  |  Создание сайтов "под ключ"  |  Эксклюзивные заглушки "offline"  |  Работа с "напильником" над шаблонами и расширениями
*

muria

  • Осваиваюсь на форуме
  • 16
  • 1 / 0
Re: Как вставить ссылки в слайдшоу?
« Ответ #10 : 10.11.2015, 10:03:40 »
если вы считаете что просто надо переписать переменную по вашим словам-так перепишите её.
зачем тему тогда?

А про то, что тема Фоки-не значит, что читают не только те, кто Фоку ставит/ставил или стоит.

Может кто захочет, видя код, перепесать его и дать готовый в спойлере или приаттачит.

Ну вот))

Вы бы постеснялись новичков сразу на баблосик разводить, чем обижаться-то.
А за тему вроде модератор решает, не?

Или хотите пожаловаться еще до кучи?
*

vipiusss

  • Гуру
  • 5739
  • 344 / 11
  • Скайп: renor_
Re: Как вставить ссылки в слайдшоу?
« Ответ #11 : 10.11.2015, 10:10:17 »
я никого не развожу таким образом и "послал" вас в комм раздел, а не написал в личку и т.д.
и вы писали:а для того, чтобы написать как правильно применить переменную echo $this - модуль устанавливать не надо) Даже чайник вроде меня это понимает.
тут не в этом ответ и я ответил-смотреть без печенек не буду, или ждите добровольца у кого Фока.
и не надо на меня рычать.если не найдёте ответа-сделаю сам бесплатно, но просто мне лень эту Фоку ставить-мне она вообще не нравится.
Спойлер
[свернуть]
« Последнее редактирование: 10.11.2015, 10:14:28 от vipiusss »
Миграция, установка, обновление версий Joomla  |  Создание сайтов "под ключ"  |  Эксклюзивные заглушки "offline"  |  Работа с "напильником" над шаблонами и расширениями
*

Ilhom666

  • Завсегдатай
  • 1384
  • 184 / 0
Re: Как вставить ссылки в слайдшоу?
« Ответ #12 : 10.11.2015, 10:16:11 »
имхо, тут вам проще будет другое слайдшоу использовать..
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Как вставить изображение из галереи в материал?

Автор prostoy

Ответов: 11
Просмотров: 14520
Последний ответ 05.11.2017, 01:15:08
от centrog
Как вставить изображение из галереи в материал?

Автор Yornick

Ответов: 13
Просмотров: 8854
Последний ответ 29.12.2016, 11:01:07
от Ilhom666
Как сделать две ссылки с различной сортировкой категорий (1- по дате и 2- по кол-ву голосов)?

Автор koyot777

Ответов: 0
Просмотров: 1101
Последний ответ 12.05.2015, 13:13:22
от koyot777
Как вставить одиночную фотку в материал, но так, чтобы можно было листать остальные?

Автор Danko66

Ответов: 11
Просмотров: 3183
Последний ответ 24.10.2013, 15:42:06
от frag79
Не отображается панель слайдшоу

Автор wellad

Ответов: 2
Просмотров: 1882
Последний ответ 23.12.2012, 19:48:42
от wellad