Я пытаюсь создать настраиваемое поле в моих статьях Joomla, которое показывает список папок, чтобы выбрать одну. Я сделал следующие файлы:
Файл манифеста:
<?xml version="1.0" encoding="utf-8" ?>
<extension type="plugin" version="3.7.0" group="fields" method="upgrade">
<name>plg_fields_selectfolder</name>
<author>Christoforos Korifidids</author>
<creationDate>January 2020</creationDate>
<copyright>Copyright (C) 2020 MainSys</copyright>
<license>GNU General Public License version 2 or later; see LICENSE.txt</license>
<authorEmail>c.korifidis@mainsys.eu</authorEmail>
<authorUrl>www.mainsys.eu</authorUrl>
<version>1.0.0</version>
<description></description>
<files>
<filename plugin="selectfolder">selectfolder.php</filename>
<folder>params</folder>
<folder>tmpl</folder>
<folder>language</folder>
</files>
<config>
<fields name="params">
<fieldset name="basic">
<field name="myfolder" type="folderlist" default="" label="Select a folder" directory="images" filter="" exclude="" stripext="" />
</fieldset>
</fields>
</config>
</extension>
Точка входа:
defined('_JEXEC') or die;
JLoader::import('components.com_fields.libraries.fieldslistplugin', JPATH_ADMINISTRATOR);
class PlgFieldsSelectFolder extends FieldsListPlugin {
public function onCustomFieldsPrepareDom($field, DOMElement $parent, JForm $form) {
if ( $field -> id == 14)
{
$fieldNode = parent::onCustomFieldsPrepareDom($field, $parent, $form);
if (!$fieldNode) {
return $fieldNode;
}
$fieldNode->setAttribute('type', 'list');
return $fieldNode;
}
}
}
и мой выходной файл:
defined('_JEXEC') or die;
$value = $field->value;
if ($value == '')
{
return;
}
$db = JFactory::getDbo();
$value = (array) $value;
$condition = '';
foreach ($value as $v)
{
if (!$v)
{
continue;
}
$condition .= ', ' . $db->q($v);
}
$query = $fieldParams->get('query', '');
// Run the query with a having condition because it supports aliases
$db->setQuery($query . ' having value in (' . trim($condition, ',') . ')');
try
{
$items = $db->loadObjectlist();
}
catch (Exception $e)
{
// If the query failed, we fetch all elements
$db->setQuery($query);
$items = $db->loadObjectlist();
}
$texts = array();
foreach ($items as $item)
{
if (in_array($item->value, $value))
{
$texts[] = $item->text;
}
}
echo htmlentities(implode(', ', $texts));
Как вы можете видеть в моем файле манифеста, я установил в каталоге атрибутов fiedl "myfolder" значение "images". Поэтому я ожидал, что у меня будет список с подкаталогами каталога «images». Тем не менее, вывод представляет собой пустой выпадающий список.
Любая помощь приветствуется.