web-dev-qa-db-fra.com

Articles personnalisés pour une catégorie

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>
4
web-tiki

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:

  • Retirez le commutateur/boîtier.
  • Assurez-vous que tout le code n'est exécuté que lorsque isAdmin est vrai
  • Assurez-vous que le champ de formulaire et les paramètres ne sont récupérés que dans la vue article dans la vue com_content composante

Le 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

4
Lodder