Comment enregistrer des champs personnalisés dans les composants principaux

22

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

La seule référence à l'enregistrement 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 soient 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 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 il ne sauvegarde pas, je me demande s'il y a un autre événement que je devrais ajouter.

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

Mise à jour: Espérant au-delà de l'espoir que le champ personnalisé a été stocké dans la base de données, j'ai ajouté une colonne à la table #__content avec le même nom et j'ai 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 l'étiquette)

<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>
PIB
la source
Je me souviens avoir vu cela en action avec le nom de champ NON défini sur params et le champ supplémentaire; mais c'est un peu moche et nécessitera un peu de maintenance après chaque mise à niveau. Bien que j'aime faire fonctionner ce genre de choses, afin d'obtenir des résultats, avez-vous envisagé d'utiliser l'approche du plugin de profil utilisateur à la place?
Riccardo Zorn
Mes données sont pour le contenu, pas pour l'utilisateur ... seul le tutoriel est pour les contacts
GDP
Désolé, je n'ai pas été clair, accrochez simplement l'événement onContentAfterSave et gérez la partie de sauvegarde
Riccardo Zorn
Merci beaucoup pour ça. J'ai essayé de régler cela pendant la meilleure partie de la journée. Je suis assez nouveau dans le développement de plugins Joomla, donc je me fie aux exemples pour me lancer. Puis-je simplement confirmer les fichiers de chaîne de langue - ceux-ci vont-ils avec les fichiers de plug-in ou dans le dossier de langue existant? ou ça n'a pas d'importance?
J'ai toujours mis les fichiers au même endroit qu'une extension Joomla les mettrait, c'est-à-dire le dossier / languages ​​dans ce cas.
GDP

Réponses:

19

L'AHA! moment - #__content n'a plus la paramscolonne, donc les ajustements suivants doivent être faits pour que le plugin fonctionne avec des composants / tables avec attribsau lieu de params(qui ne semble être #__content qu'à partir de la version 3.2):

  1. Changez le fieldsnom en "attribs"
  2. Changez le fieldsetnom 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"
PIB
la source
puis-je poser une question à ce sujet ici? ou devrais-je créer une nouvelle question? son lié à cela? Fondamentalement, j'ai besoin de savoir comment ajouter plusieurs onglets à la vue de modification de l'article. Il semble que le formulaire / extra.xml ne vous permette de créer qu'un seul onglet. J'ai essayé plusieurs variantes de division du fichier xml en ensembles de champs, mais pas de chance. Un seul onglet.
Jonnypixel
Vous devez créer une nouvelle question à ce sujet et ajouter un lien vers cette question / réponse, le cas échéant.
Bogowoe