it-swarm.com.de

Benutzerdefinierte Artikelfelder für eine Kategorie

Mit Hilfe von this und this habe ich ein Plugin erstellt, um benutzerdefinierte Felder zur Artikelkomponente hinzuzufügen . Es funktioniert gut, aber ich möchte, dass diese benutzerdefinierten Felder obligatorisch sind und nur für eine bestimmte Artikelkategorie gelten.

Das Plugin heißt "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>

forms/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

Richtig, hab rumgespielt und es funktioniert.

Zunächst müssen Sie den Parameter hinzufügen, um eine Kategorie in Ihrer acf.xml -Datei auszuwählen:

<config>
    <fields name="params">
        <fieldset name="basic">
            <field name="category" type="category" extension="com_content" label="Select a category" />
        </fieldset>
    </fields>
</config>

Dann in deinem 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;
        }
    }
}

Wie Sie sehen, habe ich einige Änderungen am Code vorgenommen, z.

  • Entfernen Sie den Schalter/das Gehäuse.
  • Stellen Sie sicher, dass der gesamte Code nur ausgeführt wird, wenn isAdmin wahr ist
  • Stellen Sie sicher, dass das Formularfeld und die Parameter nur in der Sicht article in der Komponente com_content Abgerufen werden

Das Formular wird nur dann geladen, wenn die ID der in den Plugin-Optionen ausgewählten Kategorie mit der Kategorie-ID des aktuellen Artikels übereinstimmt.

Hoffe das hilft

4
Lodder