web-dev-qa-db-fra.com

Comment enregistrer des champs personnalisés dans les composants principaux

J'essaie d'ajouter un seul champ simple à chaque élément #__content, et j'ai très attentivement suivi le tutoriel à la page Ajout de champs personnalisés aux composants principaux , en remplaçant "contact" par "contenu". J'ai maintenant un plugin installable qui inclut avec succès l'onglet/champ sur le formulaire d'édition Elément de contenu Admin, et fonctionne à merveille, à l'exception de cette fonction "d'enregistrement" embêtante.

La seule référence à la sauvegarde est (encore une fois, le contenu au lieu du contact):

Les champs supplémentaires sont chargés à partir du fichier forms/contact.xml dans le répertoire du plugin. Il est important que ces champs se trouvent dans un élément fields avec la propriété name définie sur "params". Si vous ne définissez pas ce nom de propriété, les champs apparaîtront dans le site d'administration, mais les valeurs ne seront pas enregistrées.

Le fait que cette note de mise en garde existe me suggère que Joomla devrait savoir que les champs sont là et que le code principal le gère, mais comme cela ne sauvegarde pas, je me demande s’il ya un autre événement à ajouter.

Voici le champ simple dont j'ai besoin - invisible pour l'utilisateur, mais néanmoins essentiel, et loin du besoin d'un CCK pour le stocker.
Qu'est-ce qui ne va pas/qui manque empêche le champ personnalisé d'être enregistré?

Mise à jour: espérant au-delà de tout espoir que le champ personnalisé soit stocké dans la base de données, j'ai ajouté une colonne à la table #__content portant le même nom et essayé - pas de chance.

gdp.php

class plgContentGdp 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;
    }
}

/forms/content.xml

<?xml version="1.0" encoding="UTF-8"?>
<form>
    <fields name="params" >
        <fieldset name="params" >
            <field
                name="content_myfield"
                type="text"
                label="PLG_CONTENT_GDP_MYFIELD"
                />
        </fieldset>
    </fields>
</form>

HTML rendu (sans le libellé)

<div class="tab-pane active" id="attrib-params">
    <div class="control-group ">
        <div class="controls">
            <input
                type="text"
                value=""
                id="jform_params_content_myfield"
                name="jform[params][content_myfield]"
                class=""
                aria-invalid="false"
                >
        </div>
    </div>
</div>
22
GDP

Le AHA! moment - #__contenu n’a plus la colonne params, les ajustements suivants doivent donc être apportés pour que le plugin fonctionne avec les composants/tables avec attribs au lieu de params (lequel ne semble être que #__content à partir de la v3.2):

  1. Remplacez le nom fields par "attribs"
  2. Changez le nom fieldset en quelque chose d'unique (j'ai utilisé le nom du plugin)
  3. Ajouter une chaîne de langue pour l'onglet sur la page d'édition de contenu

/ forms/content.xml

<form>
    <fields name="attribs" >
        <fieldset name="gdp" >
            <field
                name="myfield"
                type="text"
                label="PLG_CONTENT_GDP_MYFIELD"
                />
        </fieldset>
    </fields>
</form>

en-GB.plg_content_pass.ini

COM_CONTENT_GDP_FIELDSET_LABEL="My Custom Fields"
19
GDP