Como salvar campos personalizados nos componentes principais


22

Estou tentando adicionar um campo único e simples a cada item do conteúdo #__ e segui com muito cuidado o tutorial em Adicionando campos personalizados aos componentes principais , substituindo "conteúdo" por "contato". Agora eu tenho um plug-in instalável que inclui com sucesso a guia / campo no formulário de edição do Item de Conteúdo do Administrador e funciona maravilhosamente, exceto pelo incómodo recurso de "salvar".

A única referência a Salvar é (novamente, conteúdo em vez de contato):

Os campos adicionais são carregados no arquivo forms / contact.xml no diretório do plug-in. É importante que esses campos estejam em um elemento de campos com a propriedade name definida como "params". Se você não definir esse nome de propriedade, os campos aparecerão no site de administração, mas os valores não serão salvos.

O fato de esta nota de advertência existir sugere para mim que o Joomla deve saber que os campos estão lá e o código principal lida com isso, mas como não está salvando, estou me perguntando se há outro evento que devo adicionar.

Aqui está o campo simples que eu preciso - invisível para o usuário, mas crítico, no entanto, e nem perto da necessidade de um CCK para armazená-lo.
O que está errado / ausente que está impedindo que o campo personalizado seja salvo?

Atualização: Na esperança de que o campo personalizado fosse armazenado no banco de dados, adicionei uma coluna à tabela #__content com o mesmo nome e tentei - sem sorte.

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 renderizado (sem o rótulo)

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

Lembro-me de ver isso em ação com o nome do campo NÃO definido como parâmetros e o campo extra; mas isso é um pouco feio e exigirá alguma manutenção após cada atualização. Por mais que eu goste de fazer esse tipo de coisa funcionar, para obter resultados, você já pensou em usar a abordagem de plug-in de perfil de usuário?
Riccardo Zorn

Minha informação é de conteúdo, e não o usuário ... apenas o tutorial é para contatos
PIB

Desculpe, eu não estava claro, basta ligar o evento onContentAfterSave e lidar com a parte que salva.
Riccardo Zorn

Muito obrigado por isso. Eu tenho tentado resolver isso a melhor parte de um dia. Eu sou bastante novo no desenvolvimento de plugins do Joomla, por isso confio nos exemplos para seguir em frente. Posso apenas confirmar sobre os arquivos de sequência de idiomas - eles acompanham os arquivos de plug-in ou na pasta de idiomas existente? Ou isso não importa?

Eu sempre coloco os arquivos no mesmo local que uma extensão do Joomla os colocaria, ou seja, a pasta / languages ​​neste caso.
GDP

Respostas:


19

A AHA! moment - #__content não possui mais a paramscoluna; portanto, os seguintes ajustes devem ser feitos para que o plug-in funcione com componentes / tabelas em attribsvez de params(que parece ser apenas #__content na v3.2):

  1. Mude o fieldsnome para "attribs"
  2. Mude o fieldsetnome para algo único (usei o nome do plugin)
  3. Adicione uma sequência de idiomas para a guia na página de edição de conteúdo

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

posso fazer uma pergunta sobre isso aqui? ou devo criar uma nova pergunta? está relacionado a isso? Basicamente, eu preciso saber como adicionar mais de uma guia à exibição de edição do artigo. Parece que o forms / extra.xml permite criar apenas uma guia. Eu tentei várias variações de dividir o arquivo xml em conjuntos de campos, mas sem sorte. Apenas uma guia.
precisa saber é o seguinte

Você deve criar uma nova pergunta sobre isso e adicionar um link a esta pergunta / resposta, se relacionado.
Bogowoe
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.