Nota: não se esqueça de substituir prefixe pelo prefixo do seu plugin.
Criar a função que irá declarar os novos campos
Nesta primeira parte, vamos simplesmente incluir um campo date às matérias do setor 1 e um campo textarea às seções da ramificação 5. Para ver outros tipo de campos, vá para o bloco Declarar outros tipos de campos extras.
Crie um arquivo /base/prefixe.php contendo o código abaixo:
<?php
// Segurança
if (!defined("_ECRIRE_INC_VERSION")) return;
function prefixe_declarer_champs_extras($champs = array()) {
// ENTRADA DE DATA NO OBJETO ARTICLE (matéria) DO SECTEUR (setor) 1
$champs['spip_articles']['date_diffusion'] = array(
// O tipo de entrada de dados
'saisie' => 'date',
'options' => array(
// O nome do campo na base de dados
'nom' => 'date_diffusion',
// O label exibido na área restrita do site
'label' => _T('prefixe:chaine_de_langue_date_diffusion'),
// A descrição exibida na área restrita do site
'explication' => _T('prefixe:chaine_de_langue_date_diffusion_explication'),
// O tipo de informação esperada
'sql' => "datetime DEFAULT '0000-00-00 00:00:00' NOT NULL",
// O valor padrão
'defaut' => '',
// O campo é obrigatório
'obligatoire' => 'oui',
// Exibir este campo apenas nas matérias do setor 1
'restrictions'=>array(
'secteur' => '1'
),
),
// Verificar e normalizar os dados informados antes de os inserir na base
'verifier' => array(
'type' => 'date',
'options' => array(
'normaliser' => 'datetime',
)
)
);
// ENTRADA DE DADOS TEXTEAREA NO OBJETO RUBRIQUE (seção) da BRANCHE (ramificação) 5
$champs['spip_rubriques']['infos_complementaires'] = array(
'saisie' => 'textarea',
'options' => array(
'nom' => 'infos_complementaires',
'label' => _T('prefixe:chaine_de_langue_infos_complementaires'),
'defaut' => '',
// Altura do capo em linhas na área restrita
'rows' => 10,
// Inserir a barra de ferramentas tipo fórum
'inserer_barre' => 'forum',
// Aplicar os tratamentos tipográficos e atalhos do SPIP na exibição do campo
'traitements' => '_TRAITEMENT_RACCOURCIS',
'sql' => "text DEFAULT '' NOT NULL",
// Exibir este campo apenas nas matérias da ramificação 5
'restrictions'=>array(
'branche' => '5'
),
)
);
return $champs;
}
Dizer ao plugin para atualizar a base
Crie um arquivo /prefixe_administrations.php contendo o código abaixo:
<?php
if (!defined("_ECRIRE_INC_VERSION")) return;
// Incluir a API Campos Extras
include_spip('inc/cextras');
// Incluir os campos declarados na etapa anterior
include_spip('base/prefixe');
function prefixe_upgrade($nom_meta_base_version,$version_cible) {
$maj = array();
// Primeira declaração na instalação do plugin
cextras_api_upgrade(prefixe_declarer_champs_extras(), $maj['create']);
include_spip('base/upgrade');
maj_plugin($nom_meta_base_version, $version_cible, $maj);
}
// Desinstalar corretamente o plugin, removendo os campos da base de dados
function prefixe_vider_tables($nom_meta_base_version) {
cextras_api_vider_tables(prefixe_declarer_champs_extras());
effacer_meta($nom_meta_base_version);
}
Se você incluir campos extras após o plugin instalado e em funcionamento, você precisará declarar essas atualizações incluindo-as no código abaixo (após a primeira declaração $maj['create']) :
// Incluir um ou mais campos
cextras_api_upgrade(prefixe_declarer_champs_extras(), $maj['0.1.1']);
// Ainda outra inclusão de novos campos
cextras_api_upgrade(prefixe_declarer_champs_extras(), $maj['0.1.2']);
Se você remover campos, por exemplo a data, diga ao seu plugin para removê-los da base:
// Remover campos
cextras_api_upgrade(prefixe_declarer_champs_extras(), $maj['1.2.0']);
$maj['1.2.0'][] = array('sql_alter',"TABLE spip_articles DROP date_nom");
Nota: o valor $maj['0.1.1'] deve corresponder ao schema declarado em paquet.xml.
No seu paquet.xml
Última etapa: para que tudo seja considerado, você precisa alterar o seu arquivo paquet.xml.
Indicar ao plugin que precisa atualizar a base
Incluir schema="0.1.0" na tag <paquet> para que o seu plugin atualize a base de dados.
Depois, a cada inclusão ou remoção de um campo, aumente o número da versão para que a alteração seja levada em conta.
Declarar o pipeline campos extras
Em seguida, declare o pipeline declarer_champs_extras:
<pipeline nom="declarer_champs_extras" inclure="base/prefixe.php" />
Declarar as dependências
Para que tudo funcione, o seu plugin requer três outros plugins:
- Campos Extras Interface para gerenciar os campos na base
- Saisies para gerenciar as entradas de dados (interface com a base)
- Vérifier para verificar os dados informados antes de os registrar na base
Inclua esses requisitos:
<necessite nom="cextras" compatibilite="[3.0.5;]" />
<necessite nom="saisies" compatibilite="[3.2.0;]" />
<necessite nom="verifier" compatibilite="[1.8.0;]" />
Nota: esta matéria foi escrita em maio/junho de 2020, pode ser preciso atualizar as compatibilidades.
Resumo do paquet.xml
O seu arquivo paquet.xml deve se parecer com o abaixo:
<paquet
prefix="prefixe"
categorie="squelette"
version="1.0.0"
etat="stable"
compatibilite="[3.2.0;3.3.*]"
logo="prive/themes/spip/images/prefixe-32.png"
documentation="https://www.domaine.net"
schema="0.1.0"
>
<nom>Nome do seu Plugin</nom>
<pipeline nom="declarer_champs_extras" inclure="base/prefixe.php" />
<necessite nom="cextras" compatibilite="[3.0.5;]" />
<necessite nom="saisies" compatibilite="[3.2.0;]" />
<necessite nom="verifier" compatibilite="[1.8.0;]" />
</paquet>
Declarar outros tipos de campos extras
Veja aqui um exemplo mais completo:
<?php
if (!defined("_ECRIRE_INC_VERSION")) return;
function prefixe_declarer_champs_extras($champs = array()) {
// ENTRADA DE DADOS RADIO NO OBJETO ARTICLE (matéria)
$champs['spip_articles']['type_structure'] = array(
'saisie' => 'radio',
'options' => array(
'nom' => 'structure',
'label' => _T('prefixe:type_structure_label'),
'explication' => _T('prefixe:type_structure_explication'),
'sql' => "varchar(30) NOT NULL DEFAULT ''",
'defaut' => '',
// Os botões de rádio
'datas' => array(
'' => _T('prefixe:champ_vide'),
'structure_adherente' => _T('prefixe:type_structure_adherente'),
'structure_non_adherente' => _T('prefixe:type_structure_non_adherente'),
),
)
);
// ENTRADA DE DADOS CHECKBOX NO OBJETO RUBRIQUE (seções) DOS SECTEURS (setores) 1 e 2
$champs['spip_rubriques']['jour_de_diffusion'] = array(
'saisie' => 'checkbox',
'options' => array(
'nom' => 'jour_diffusion_emission',
'label' => _T('prefixe:jour_de_diffusion'),
'sql' => "text DEFAULT '' NOT NULL",
'defaut' => '',
'restrictions'=>array(
'secteur' => '1:2',
// Autorização: Todos os autores podem ver este campo
'voir' => array('auteur' => ''),
// Autorização: Apenas os admins completos podem alterar este campo
'modifier' => array('auteur' => 'admin_complet')
),
// Os checkboxes
'datas'=>array(
'segunda' => 'Segunda-feira',
'terca' => 'Terça-feira',
'quarta' => 'Quarta-feira',
'quinta' => 'Quinta-feira',
'sexta' => 'Sexta-feira',
'sabado' => 'Sábado',
'domingo' => 'Domingo'
),
)
);
// DUAS ENTRADAS DE DADOS DENTRO DE UM FIELDSET PARA O OBJETO AUTEUR (autor)
$champs['spip_auteurs']['fieldset_numeros'] = array(
'saisie' => 'fieldset',
'options' => array(
'nom' => "fieldset_numeros",
'label' => _T('prefixe:chaine_de_langue_fieldset_numeros')
),
'saisies' => array(
// ENTRADA DE DADOS INPUT NO OBJETO AUTEUR (autor)
'telephone' => array(
'saisie' => 'input',
'options' => array(
'nom' => 'telephone',
'label' => _T('prefixe:chaine_de_langue_telephone'),
// Dica do campo
'placeholder' => _T('prefixe:chaine_de_langue_placeholder'),
// Limitar o campo a 30 caracteres
'sql' => "varchar(30) NOT NULL DEFAULT ''",
'defaut' => '',
),
// Verificar se os dados informados correspondem a um número de telefone
'verifier' => array(
'type' => 'telephone'
)
),
'fax' => array(
'saisie' => 'input',
'options' => array(
'nom' => 'fax',
'label' => _T('prefixe:chaine_de_langue_fax'),
// Limitar o campo a 30 caracteres
'sql' => "varchar(30) NOT NULL DEFAULT ''",
'defaut' => '',
),
// Verificar se os dados informados correspondem a um número de telefone
'verifier' => array(
'type' => 'telephone'
)
)
)
);
// ENTRADA DE DADOS SELETOR DE ARTICLE (matéria)
$champs['spip_articles']['voir_aussi'] = array(
'saisie' => 'selecteur_article',
'options' => array(
'nom' => 'voir_aussi',
'label' => _T('prefixe:voir_aussi_label'),
'explication' => _T('prefixe:voir_aussi_explication'),
'sql' => "varchar(30) NOT NULL DEFAULT ''",
// Múltipla escolha de matérias
'multiple' => true,
)
);
return $champs;
}
No discussion
Add a comment
Avant de faire part d’un problème sur un plugin X, merci de lire ce qui suit :
Merci d’avance pour les personnes qui vous aideront !
Par ailleurs, n’oubliez pas que les contributeurs et contributrices ont une vie en dehors de SPIP.
Follow the comments:
|
