Quinta, 30 Agosto 2012 11:22

Criar campo no Cobalt

Escrito por 
Avalie este item
(0 votos)

Se você conhece algum CCK, por favor crie um tutorial e disponibilize para nós!! Para a comunidade!! Basta criar uma conta e publicar!! Divida seu conhecimento com a comunidade :) 

Vamos ao Tutorial :) 

 

Todos os campos são armazenados em componentes / com_cobalt / campos . Cada campo é uma pasta separada. Então, vamos começar e criar sua primeira pasta. Nomeie- teste para o nosso tutorial.

O nome tem que ser em todos os casos de pequeno porte somente caracteres latinos. Não há nenhuma diferença como você nomear a pasta. O nome da pasta de tornar-se um tipo de campo.

Agora dentro desta pasta você tem que criar pelo menos três arquivos com o mesmo nome.

  1. test.php - arquivo executável PHP que contêm classe principal campo
  2. test.xml - arquivo XML que contêm metadados de campo e os parâmetros de campo.
  3. test.png - ícone 16x16 para o campo.
  4. tmpl / input / default.php - modelo padrão para tornar elemento de formulário
  5. tmpl / saída / default.php - modelo padrão para tornar elemento no artigo
  6. tmpl / filtro / default.php - modelo padrão para tornar elemento filtrante

test.png

 

Costumamos usar ícones de livresMas 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.%MINIFYHTMLf3d73dd63954fbc0cc5fb46585e6cc8f13%</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 grupoDescrição
Simples elementos de formulárioElementos simples como texto, caixa de seleção, rádio, selecionar, ...
Especiais Elementos de FormulárioOs campos que fizeram de formato especial. Como telefone, url, ...
Mídia formar elementosCampos que trabalha com meda diferente, como galeria, imagem, áudio, vídeo, uploads, ...
Formar elementos comércioCampos que funciona com base em SSI
Exclusivos elementos de formulárioApenas algumas impressionantes, campos pendentes
Formulário Elementos relaçãoOs 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>
  1. name="params"> <fields sempre ter o nome params
  2. Você pode, como muitos <fieldset> como você wan mas nomeá-lo de forma diferente e usar tambémrótulo e descrição atributos.

    <fieldset name="m1" label="Parameters Group" grupo description="This conter parameters"> principais 
    
  3. Existem alguns parâmetros fundamentais para inserir. Você pode simplesmente copiar / colar.

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

    2. 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 />
      
    3. 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.

filtrar usado

 

public function onFilterWornLabel($section) { $value = $this->value; settype($value, 'array'); $value = implode(', ', $value); return $value; }

 
Lido 13019 vezes Última modificação em Segunda, 25 Março 2013 12:59
Uriel


Assine nosso canal no Youtube > Uriel Souza

 

 

 

 

 

Website.: cckjoomla.org

Deixe um comentário

Você precisa escrever no minimo 5 palavras!


Anti-spam: complete the task