web-dev-qa-db-fra.com

Ajout de champs personnalisés aux composants principaux en fonction de la catégorie

J'ai créé un plugin pour ajouter des champs personnalisés au noyau joomla com_content. J'ajoute les champs au backend et au frontend. Maintenant, le nouvel onglet est affiché sur chaque message, mais je souhaite afficher l'onglet et les champs uniquement pour une catégorie spécifique (id = 43).

Voici comment j'ajoute le nouveau formulaire au backend et au frontend:

<?php
// no direct access
defined ( '_JEXEC' ) or die ( 'Restricted access' );

class plgContentComputerverzeichnis extends JPlugin {

        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); 
                        }
                    case 'com_content':
                        if ($app->isSite()) {
                            JForm::addFormPath(__DIR__ . '/forms');
                            $form->loadFile('content', false);
                        }
                    return true;

                }
                return true;
        }

}
?>  

Et voici ma forme:

<?xml version="1.0" encoding="UTF-8"?>
<form>
    <fields name="attribs" >
        <fieldset name="custom" label="Lizenzinformationen">

            <field name="typ" type="list" label="Typ">
                <option value="-">Wähle einen Typ aus!</option>  
                <option value="1">Mac</option>  
                <option value="2">PC</option>      
                <option value="3">Server</option>      
            </field>

            <field
                name="arbeitsplatz"
                type="sql"
                label="Arbeitsplatz"
                query="SELECT id, name FROM #__users"
                key_field="id" 
                value_field="name"
                header="Wähle einen Arbeitsplatz aus"
                showon="typ:1[OR]typ:2"
                >
            </field>

            <field name="computerversion"
                type="text"
                label="Computerversion"
                showon="typ:1[OR]typ:2[OR]typ:3"
            />

            <field name="notizen" type="editor" label="Notizen" description="" width="300" filter="safehtml" showon="typ:1[OR]typ:2[OR]typ:3" />

        </fieldset>
    </fields>
</form>
3
Peesen87

J'ai maintenant créé un champ à l'intérieur du plugin où je peux sélectionner les catégories où les champs sont affichés. Dans mon plugin, je sélectionne ces catégories et ne montre que le formulaire lorsque le message appartient à l'une de ces catégories. Cela fonctionne, mais maintenant, quand je sauve le post. Les modifications ne sont pas enregistrées:

<?php
// no direct access
defined ( '_JEXEC' ) or die ( 'Restricted access' );

class plgContentComputerverzeichnis extends JPlugin {

        function onContentPrepareForm($form, $data) {

                $app = JFactory::getApplication();
                $option = $app->input->get('option');
                $include_categories = $this->params->get('include_categories');

                switch($option) {

                    case 'com_content':
                        if ($app->isAdmin()) { 
                            JForm::addFormPath(__DIR__ . '/forms');
                            $form->loadFile('content', false);
                        }
                    case 'com_content':
                        if ($app->isSite()) {
                            if (in_array($data->catid, $include_categories)) {
                                JForm::addFormPath(__DIR__ . '/forms');
                            } 
                            $form->loadFile('content', false);
                        }
                    return true;      
                }
            return true;
        }

}
?>
3
Peesen87

Dans votre formulaire XML, essayez de remplacer custom par basic

Cette

    <fieldset name="custom" label="Lizenzinformationen">

changer pour cela

    <fieldset name="basic" label="Lizenzinformationen">
1
Gruz