Costumamos usar ícones de livres. Mas você pode usar qualquer ícone de 16x16. Este arquivo é opcional. Se você não incluí-lo, o padrão text.png
ícone será mostrado.
test.xml
Este arquivo xml é muito parecido com qualquer módulo Joomla ou arquivo xml plugins.
<?xml version="1.0" encoding="utf-8"?>
<extension version="1.6" type="file" method="upgrade">
<name>My Test Field</name>
<group>Simple Form Elements</group>
<author>Jon Doe</author>
<authorEmail>
O endereço de e-mail address está sendo protegido de spambots. Você precisa ativar o JavaScript enabled para vê-lo.%MINIFYHTML7e12ad58985e6c837a1fcf079ec9762813%</authorEmail>
<authorUrl>http://www.site.com</authorUrl>
<license>GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html</license>
<creationDate>March 2012</creationDate>
<copyright>(c) 2012 jon Doe</copyright>
<version>1.0</version>
<description>
<![CDATA[This is test field.]]></description>
<config>
</config>
</extension>
Isto é como metadados de campo pode parece. Há apenas três marcas que vale a pena mencionar.
<name>
Este é o nome visível do seu campo que aparecem na lista arquivado suspenso, selecione.
<group>
Actualy você pode usar qualquer texto aqui. Mas os campos com o mesmo grupo
serão combinados para grupo. Você pode colocar o campo em um dos grupos existentes ou criar o seu próprio.
Nome do grupo | Descrição |
---|---|
Simples elementos de formulário | Elementos simples como texto, caixa de seleção, rádio, selecionar, ... |
Especiais Elementos de Formulário | Os campos que fizeram de formato especial. Como telefone, url, ... |
Mídia formar elementos | Campos que trabalha com meda diferente, como galeria, imagem, áudio, vídeo, uploads, ... |
Formar elementos comércio | Campos que funciona com base em SSI |
Exclusivos elementos de formulário | Apenas algumas impressionantes, campos pendentes |
Formulário Elementos relação | Os campos que criam relações entre artigos e lista de show de outros artigos. |
<config>
Este é o lugar onde você coloca os parâmetros de campo que serão carregados na criação de campo.
<config>
<fields name="params">
<fieldset name="core">
<field name="sortable" type="radio" default="0" label="F_SORTABLE" description="">
<option value="0">No</option>
<option value="1">Yes</option>
</field>
</fieldset>
<fields>
</config>
name="params"> <fields
sempre ter o nomeparams
Você pode, como muitos
<fieldset>
como você wan mas nomeá-lo de forma diferente e usar tambémrótulo
edescrição
atributos.<fieldset name="m1" label="Parameters Group" grupo description="This conter parameters"> principais
Existem alguns parâmetros fundamentais para inserir. Você pode simplesmente copiar / colar.
Grupo necessitaram primeiro é
tmpl
. Mais tarde é usado para exibir elementos de formulário ou de campo no artigo ou filtro.<fieldset name="tmpl"> <field type="filelist" name="template_input" filters="php$" hide_none="1" hide_default="1" directory="/components/com_cobalt/fields/test/tmpl/input" label="F_TMPLINPUT" default="default.php" /> <field type="filelist" name="template_output_list" filters="php$" hide_none="1" hide_default="1" directory="/components/com_cobalt/fields/test/tmpl/output" label="F_TMPLLIST" default="default.php" /> <field type="filelist" name="template_output_full" filters="php$" hide_none="1" hide_default="1" directory="/components/com_cobalt/fields/test/tmpl/output" label="F_TMPLFULL" default="default.php" /> </fieldset>
Para esse grupo, não se esqueça de mudar no caminho
/ componentes / com_cobalt / campos / **** / tmpl entrada /
para o nome do seu campo.Se o valor da loja único campo que você pode fazê-lo classificáveis adicionando grupo
principal
<fieldset name="core"> <field name="sortable" type="radio" default="0" label="F_SORTABLE" description=""> <option value="0"> Não </ option> <option value="1"> Sim </ option> </ Field> <Fieldset />
Se o campo vai funcionar como um filtro que você tem que adicionar grupo
filtro
<fieldset name="filter" label="FS_FILTERGEN"> <field name="filter_enable" type="radio" default="0" label="F_ENABLE" description=""> <option value="0"> Não </ option> <option value="1"> Sim </ option> </ Field> <field name="filter_hide" type="radio" default="0" label="F_HIDE" description="F_HIDE_DESCR"> <option value="0"> Não </ option> <option value="1"> Sim </ option> </ Field> <field name="filter_descr" type="text" default="" size="40" label="F_DESCR" description="" /> <Fieldset />
Todos os outros grupos de parâmetros que você pode adicionar como você quiser.
test.php
Adicione este bloco de código
<?php
defined('_JEXEC') or die;
require_once JPATH_ROOT.DS.'components/com_cobalt/library/php/fields/cobaltfield.php';
class JFormFieldCTest extends CFormField
{
}
Esta é a classe principal. O nome da classe é um JFormFieldC
prefixo e tipo de campo de teste
com a primeira letra maiúscula.
Aqui está a lista dos métodos de campo e como você pode usá-los.
getInput
Tornar elemento de formulário
public function getInput()
{
return $this->_display_input();
}
Antes de executar _display_input ()
você pode adicionar um código e as variáveis de ajuste com $ this
. Agora abra tmpl / input / default.php
. Este é modelo que será carregado por padrão.Insira existe algo como isto.
<input type="text" name="fields[<?php echo $this->id; ?>]" value="<?php echo $this->value; ?>" />
Por favor, preste atenção especial em nome de entrada. A fim de obter o seu campo de valores salvou os alements formulário têm de ter o nome começa com campos [id <php echo $ this->;?>]
. Se precisar de mais do que uma entrada, como parte de um campo de torná-lo matriz campos [id <php echo $ this->;>] []
matriz ou com exatos chaves campos [<php echo $ this-> id?;? >] [nome]
. Pela maneira suas chaves serão salvas em js_res_record_values
tabela no índice decoluna. Você pode usá-lo para a filtragem, mas eu vou explicar isso mais tarde.
onRenderFull
Tornar campo no modo de artigo completo.
public function onRenderFull($record, $type, $section)
{
return $this->_display_output('full', $record, $type, $section);
}
O mesmo método é aqui. Você pode editar tmpl / saída / default.php
e dados de exibição lá.
<span> <? php echo $ this-> valores? span> </>
Note que $ this-> valor
pode ser um array se você usou campo de entrada de matriz.
onRenderList
O mesmo como parâmetro acima, mas primeiro é 'lista'
public function onRenderList($record, $type, $section)
{
return $this->_display_output('list', $record, $type, $section);
}
onPrepareFullTextSearch
Retorna sempre string. Este método salva o valor compatível para pesquisa de texto completo. IFIF valor R $
é uma matriz que você tem que converter para string como implode (',', $ value)
onPrepareFullTextSearch função pública ($ valor, $ registro, $ tipo, $ seção)
{
return $ valor;
}
onPrepareSave
O que quer que este retorno do método, é isso que você vai ficar em $ this-> valor em qualquer outro método incluindo onRenderList
e onRenderFull
.
public function onPrepareSave($value, $record, $type, $section)
{
$value = filter_var($value, FILTER_SANITIZE_EMAIL);
return $value;
}
onStoreValues
Este método só deve ser usado se o campo vai usar filtros ou ordenação.
public function onStoreValues($record)
{
$this->value = filter_var($this->value, FILTER_SANITIZE_EMAIL);
return $this->value;
}
Este método pode retornar um valor único ou uma matriz. Ela irá armazená-lo como registro (ou o número de registro da matriz) em js_res_record_values
tabela DB. Nota, este quadro só é usado para filtrar, não para obter valor salvo do campo. Valor salvo do campo só é salvo por onPrepareSave
.
Mais tarde eu vou explicar como usá-lo em filtros.
validar
Este método validar os dados de campo antes de salvar. Por exemplo, se a validação de e-mail foi digitado corretamente.
public function validate($value, $record, $type, $section)
{
if ($value && !JMailHelper::isEmailAddress($value))
{
$this->setError(JText::sprintf('E_ENTEREDINCORRECT', $this->label));
}
return parent::validate($value, $record, $type, $section);
}
Não é necessário que este método retornar VERDADEIRO
ou FALSO
. Não importa o que ele retorna erro é catched só se você fizer $ this-> setError ()
.
Este método tem que chamar pai retorno :: validate ($ valor, $ registro, $ tipo, $ seção);
porque a validação importante capaz para todos os campos há como verificar se campo é obrigatório e não há valor.
onJSValidate
Este método permite que você adicione validação JavaScript no formulário.
public function onJSValidate()
{
$js = '';
if ($this->required)
{
$js .= "ntt if($('field_{$this->id}').value == ''){
hfid.push({$this->id});
isValid = false;
errorText.push('" . JText::sprintf('CFIELDREQUIRED', $this->label) . "');
}";
}
return $js;
}
No exemplo acima, vemos validação javascript para campo a ser necessário. Tis método tem que retornar de texto com o código JavaScript é. Ele será acionado no envio do formulário. A construção de código JS é simples
if(<expression>)
{
hfid.push(12);
isValid = false;
errorText.push('This field is required');
}
Você pode facilmente ter acesso aos seus campos desde que você criá-los em modelos e você pode adicionar qualquer ID para elementos de formulário.
Se <expressão>
é VERDADEIRO
ou outras palavras, se há um erro, temos de acrescentar a HFID
matriz o ID do campo que tem erro. Este será preciso destacar campo com erro. Então nós fizemos isValid
paraFALSE
. Este precisamos quebrar a apresentação do formulário. E, finalmente, adicionar a mensagem de erro global de erros matriz errorText.push ('Este campo é obrigatório ");
. Isso, precisamos exibir alerta com os erros.
Filtragem de Apoio
Se você quiser, campo para ser filtros você tem que considerar três seguintes métodos. E também não se esqueça de inserir filtros
grupo de parâmetro para campo XML.
onRenderFilter
Este método torna filtro
public function onRenderFilter($section)
{
$db = JFactory::getDbo();
$query = $db->getQuery(TRUE);
$query->select('field_value');
$query->from('#__js_res_record_values');
$query->where("section_id = {$section->id}");
$query->where("`field_key` = '{$this->key}'");
$query->group('field_value');
if ($this->params->get('params.filter_show_number', 1))
{
$query->select('count(record_id) as num');
}
$db->setQuery($query);
$this->list = $db->loadObjectList();
}
Este exemplo demonstra o princípio básico do trabalho com filtros. O primeiro é que todos os dados têm de ser guardadas em js_res_record_values
através onStoreValues
.
Agora em tmpl / filtro / default.php
você pode usar $ this-> lista
para criar elementos filtrantes e $ this-> valores
de default / valores selecionados. Exemplo para caixas de listagem seria
<?php foreach($this->list AS $el):?>
<?php $selected = (in_array($el, $this->values) ? ' checked="checked" ' : NULL)?>
<input type="checkbox" value="<?php echo $el; ?>" name="filters[<?php echo $this->key; ?>][]" <?php echo $selected; ?> />
<?php echo JText::_($el); ?>
<?php endforeach;?>
Esta lista mostra exemplo de elementos como caixas. Anote o nome do elemento. Ele sempre tem que começar com filtros [tecla <php echo $ this->;?>]
.
onFilterWhere
Agora, quando temos nossos filtros listados e filtro seleccionado temos a afetar consulta SQL.
public function onFilterWhere($section, &$query)
{
$value = $this->value;
ArrayHelper::clean_r($value);
if (!$value)
return NULL;
$db = JFactory::getDbo();
foreach($value as $text)
{
$sql[] = 'field_value = ' . $db->quote($db->escape($text));
}
$ids = $this->getIds("SELECT record_id
FROM #__js_res_record_values
WHERE (" . implode(' OR ', $sql) . ")
AND section_id = {$section->id}
AND field_key = '{$this->key}'");
$query->where("r.id IN(".implode(',', $ids).")");
return true;
}
Os valores selecionados estão em $ this-> valores
.
onFilterWornLabel
E agora, quando registros são selecionados, temos de mostrar o rótulo que filtro aplicado. E este método de criação de texto para este rótulo.
public function onFilterWornLabel($section) { $value = $this->value; settype($value, 'array'); $value = implode(', ', $value); return $value; }