Avec l'aide de this et this j'ai créé un plugin pour ajouter des champs personnalisés au composant de l'article . Cela fonctionne bien, mais je voudrais rendre ces champs personnalisés obligatoires et uniquement pour une catégorie d'article spécifique .
Le plugin s'appelle "acf"
acf.php:
defined ( '_JEXEC' ) or die ( 'Restricted access' );
class plgContentAcf extends JPlugin {
protected $autoloadLanguage = true;
function onContentPrepareForm($form, $data) {
$app = JFactory::getApplication();
$option = $app->input->get('option');
switch($option) {
case 'com_content':
if ($app->isAdmin()) {
JForm::addFormPath(__DIR__ . '/forms');
$form->loadFile('content', false);
}
return true;
}
return true;
}
}
?>
acf.xml:
<?xml version="1.0" encoding="utf-8"?>
<extension version="3.4" type="plugin" group="content" method="upgrade">
<name>plg_content_acf</name>
<author></author>
<creationDate></creationDate>
<copyright></copyright>
<license></license>
<authorEmail></authorEmail>
<authorUrl></authorUrl>
<version>1.0.0</version>
<description>This is the description of the plugin</description>
<files>
<filename plugin="acf">acf.php</filename>
<filename>index.html</filename>
<folder>forms</folder>
</files>
<languages>
<language tag="en-GB">en-GB.plg_content_acf.ini</language>
<language tag="en-GB">en-GB.plg_content_acf.sys.ini</language>
</languages>
</extension>
formes/content.php:
<?xml version="1.0" encoding="UTF-8"?>
<form>
<fields name="attribs" >
<fieldset name="acf" >
<field
type="filelist"
name="path"
label="Document"
directory="images/documents"
filter="\.pdf$"
hide_default="true"
validate="options"
/>
<field
name="anchor"
type="text"
label="Anchor"
description="Description here"
class="required"
/>
</fieldset>
</fields>
</form>
Oui, j'ai joué et je l'ai fait fonctionner.
Vous devrez d’abord ajouter le paramètre pour sélectionner une catégorie dans votre fichier acf.xml, comme suit:
<config>
<fields name="params">
<fieldset name="basic">
<field name="category" type="category" extension="com_content" label="Select a category" />
</fieldset>
</fields>
</config>
Puis dans votre acf.php:
class plgContentAcf extends JPlugin
{
protected $autoloadLanguage = true;
function onContentPrepareForm($form, $data)
{
$app = JFactory::getApplication();
if ($app->isAdmin())
{
$option = $app->input->get('option');
$view = $app->input->get('view');
if ($option === 'com_content' && $view === 'article')
{
$model = JModelLegacy::getInstance('Article', 'ContentModel');
$catid = $model->getItem($app->input->get('id'))->catid;
if ($this->params->get('category') === $catid)
{
JForm::addFormPath(__DIR__ . '/forms');
$form->loadFile('content', false);
}
}
return true;
}
}
}
Comme vous pouvez le constater, j'ai apporté quelques modifications au code, telles que:
isAdmin
est vraiarticle
dans la vue com_content
composanteLe formulaire n'est alors chargé que lorsque l'ID de la catégorie sélectionnée dans les options du plug-in correspond à l'ID de la catégorie de l'article en cours.
J'espère que cela t'aides