it-swarm.com.de

Hinzufügen von benutzerdefinierten Feldern zu Kernkomponenten basierend auf der Kategorie

Ich habe ein Plugin erstellt, um benutzerdefinierte Felder zum Kern von joomla com_content hinzuzufügen. Ich füge die Felder zum Backend und Frontend hinzu. Jetzt wird der neue Tab in jedem Beitrag angezeigt, aber ich möchte den Tab und die Felder nur für eine bestimmte Kategorie anzeigen (id = 43).

So füge ich das neue Formular zum Backend und Frontend hinzu:

<?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;
        }

}
?>  

Und das ist meine Form:

<?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

Ich habe jetzt ein Feld innerhalb des Plugins erstellt, in dem ich die Kategorien auswählen kann, in denen die Felder angezeigt werden. In meinem Plugin wähle ich diese Kategorien aus und zeige nur das Formular, wenn der Beitrag zu einer dieser Kategorien gehört. Dies funktioniert, aber jetzt, wenn ich den Beitrag speichere. Die Änderungen wurden nicht gespeichert:

<?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

Versuchen Sie in Ihrem Formular-XML, custom durch basic zu ersetzen

Dies

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

ändern Sie dies

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