urdu Português
Inglês English Deutsch Deutsch espanhol Español Français Français italiano Italiano holandês Nederlands Português Português russo Русский Ελληνικά Ελληνικά
Login



 
Bem-vindo ao Jumi! Tutorial >> >> Auto formas de chamada em um Joomla! conteúdo

Há um monte de pessoas que desejam publicar seus formulários personalizados em um Joomla! conteúdo.

Para atender às suas necessidades, eu decidi escrever este tutorial. O tutorial é dedicado a Joomla! 1.0.x codificação iniciantes, mas os intermediários podem encontrar alguns truques úteis também.

Neste tutorial passo a passo, você vai aprender

  • que formas de auto Colling são e para que fins a que servem,
  • alguns php mais útil e Joomla! 1.0.x truques que são relevantes para as formas de chamada auto. Por exemplo:
    • como um script pega um usuário que enviou os dados,
    • como reconhecer um endereço URL na qual o script é executado,
    • como desligar o Joomla específica! off cache da página,
    • o que Joomla! objeto específico do banco de dados $, $ a minha é, onde encontrar os seus métodos e sua descrição,
    • e assim por diante

Que formas são chamadas auto e para que servem

Toda forma recolhe alguns dados de respondedores.

Os dados coletados não permanecer em um formulário, mas eles são - geralmente após pressionar botão enviar - enviou em algum lugar. Eles são enviados para um script de processamento que "senta" em outro endereço URL e que - depois de pré-processamento possível - grava os dados no banco de dados e / ou envia-los para um endereço de e-mail.

Esta é a abordagem mais comum. E no que depender abordagem padrão Joomla! formas componentes.

Mas é possível viver sem componente de formulários, é possível ter nossas próprias formas para ser incluído em um artigo de conteúdo. Os formulários podem enviar os dados coletados para auto e processá-los. Eles são assim chamados formas de chamada auto.

É mesmo possível ainda mais: para mostrar os resultados do formulário no artigo mesmo conteúdo.

Neste tutorial vou mostrar-lhe como.

Porque tem que haver algum script php lá que manipula com os dados do formulário farei uso do plugin Jumi para incluir este scripts para o conteúdo. Se você preferir qualquer outro plugin para php inclusão script em Joomla! conteúdo que você pode usá-lo também.

Descrição do formulário de demonstração

Embora a forma de demonstração que se segue é muito concreta, você pode escrever todas as formas que você pode imaginar pela abordagem explicado neste tutorial.

Não faça testes no servidor de produção pública, mas no seu host local apenas!

Vamos supor que queremos

  • uma forma de votação que recolhe as respostas sobre questões 3 mutuamente exclusivos,
  • para salvar respostas numa base de dados, juntamente com a data e hora da resposta e, juntamente com uma identificação do utilizador,
  • para mostrar "obrigado" anúncio e um resumo dos resultados, mas apenas para aqueles usuários que votaram.

A estratégia básica

Dividir o código em vários pedaços, blocos funcionais e lógica oferece muitas vantagens. Embora eu não discutiu as vantagens aqui eu vou seguir esta boa prática aqui.

Existem dois principais blocos lógicos em nossa tarefa:

  • mostrar formar + + coletar dados verificá-los + salvar dados em um banco de dados (formulário chamado self)
  • ler dados de um banco de dados e mostrar os resultados.

Então eu vou dividir a nossa aplicação em dois arquivos de script também: self_call_form.php e show_results.php.

Nós vamos entrar em detalhes a seguir.

Mas vamos começar com um primeiro banco de dados.

banco de dados

Que o nosso nome da tabela de banco de dados é xxx_mytable_test onde xxx significa o seu Joomla! prefixo banco de dados. Alguns Joomla! os usuários têm outros prefixo Jos tem prefixo mos. I irá assumir prefixo jos a seguir.

Repito a nossa tarefa é a de armazenar data de registo e hora, identificação do usuário e uma resposta.

Sem entrar em MySQL banco de dados e os detalhes de concepção da tabela que pode ser encontrados em outro lugar a estrutura da tabela descrita no MySQL idioma será:

CREATE TABLE IF NOT EXISTS `jos_mytable_test` (
`Id` int (11) NOT NULL auto_increment,
`` Default recordtime datetime NOT NULL '0000-00-00 00: 00: 00',
`User_id` varchar NOT (15) NULL default 'host',
`Responder` int NOT (6) NULL default '0',
PRIMARY KEY (`id`)
) TYPE = MyISAM;

O ID de campo foi adicionado apenas para identificação tabela de registro único.

Você tem que criar a tabela em seu banco de dados Joomla. Verificar se o prefixo é jos_. Se for ainda mos_, alterar o prefixo da tabela.

Você pode criar tabela via phpMyAdmin manualmente ou automaticamente pelo copy-paste da declaração MySQL acima.

Vou assumir o jos_mytable_test tabela é criada a partir de agora.

self_call_form.php

Existem basicamente dois métodos pelos quais se comunicam formulário com o seu ambiente: POST e GET. GET envia (e lê) os dados do apêndice URL. Nós não vamos usar o método GET aqui.

POST método grava dados mundial php $ _POST variável. Portanto, temos pleno acesso aos dados enviados aqui.

Algoritmo geral do self_call_form.php

Se não existem dados relevantes em $ _POST, ou seja, não há uma resposta de um usuário, em seguida, mostrar formulário. Se o usuário respondeu, em seguida, agradecer-lhe e escrever a resposta (e outros dados) para o banco de dados.

O algoritmo acima traduzidas para a linguagem php parecido com este código:

função self_form()
 / / Nome do botão de rádio (aqui "resposta") deve ser um nome de coluna em um banco de dados também!
{

 $ Âncora  =  "Myform";  / / A variável $ âncora vamos precisar mais tarde
 eco "Name =  ";  / / Html a âncora vamos precisar mais tarde
 eco "
"; / Form / container if(!isset($ _POST['Resposta'])) / / Se não houver resposta em seguida, escrever a forma { $ Return_url = Get_return_url($ Âncora); eco "
"; eco "

Você encontrou este tutorial útil? "; eco " name='answer' type='radio' Absolutamente não.\n"; eco " name='answer' type='radio' tão assim.\n"; eco " name='answer' type='radio' Sim. Obrigado por isso.\n"; eco " "; eco ""; } outro / / Se houver uma resposta agradecer e escrever a resposta no banco de dados { eco " Obrigado por seu voto ";   write_data($ _POST['Resposta']); } eco ""; }

A explicação e alguns truques

PHP função isset ('resposta') verifica 'resposta' tempo existe no $ _POST.

Nós queremos que o formulário para enviar dados para auto. Isso significa que para o endereço de URL mesmo (forma e seu script de processamento podem ser encontrados na mesma URL). Podemos usar o endereço URL codificado de uma página ou, como no nosso caso, podemos obter a URL do ambiente Joomla usando um truque simples. Usando o truque é melhor, então a abordagem rígido primeiro código porque o nosso código é reutilizável em várias páginas, sem qualquer toque.

Então, aqui vem o truque contida no get_return_url função ($ âncora).

Função get_return_url ()
função get_return_url($ Âncora)
{
 if ($ Query_string = MosGetParam( $ _SERVER,  'QUERY_STRING',  '' ))

 {
  $ Retornar  =  'Index.php?  .  $ Query_string;
 
 }
 outro
 {

  $ Retornar  =  'Index.php';
 
 }
 / / Url começa com um index.php agora

 
 
 / / Conversão e de & para o cumprimento xtml

 $ Retornar  =  str_replace( '&',  "& ',  $ Retornar );
 
 / / Adição de âncora para o fim da URL

 $ Retornar  .="Ancorar # $";  / / Adicionando âncora para url
 / / Prepand http:// para o início da URL
 retorno sefRelToAbs($ Retornar);



}

Não há milagre nisso. A função só retorna o endereço URL onde ele é executado (no nosso formulário). Incluindo a âncora.

Por eu ter incluído a âncora (html) para o endereço de retorno?

Imaginar que a nossa forma é, na parte inferior de uma página de muito longa. Se não fosse para a âncora, em seguida, após o envio de dados do usuário verá na parte superior da página e tem que rolar para baixo. Com usuário ancoragem será voltar para o lugar que ele votou.

Eu gostaria de voltar sua atenção para Joomla! mosGetParam função específica () também. É a função mais útil. E deve ser usado em vós forma intensiva.

A descrição geral de mosGetParam () pode ser encontrada aqui. Um dos uso prático segue:

Em vez de usar:

$ _POST ['Somename']

é melhor usar:

mosGetParam ($ _POST, 'somename')

porque ele não só faz algum corte de entrada do usuário indesejado, mas há algumas outras opções úteis na mesma.

No entanto, se você tem muitos dados a serem processados ​​que pode ser bastante tempo de consumo de retirar todos os valores de $ _POST um por um: ou por acessá-los direta ou através de mosGetParam () função. Há um outro truque: use extrato função php ($ _POST) que constrói variáveis ​​e atribui-lhes nomes de todo o conteúdo de $ _POST.

Note que nós usamos $ _SERVER no get_return_url function (). $ _SERVER É outra variável php global como $ _POST e pode ser de algum uso em seus scripts também. Se você não sabe o conteúdo de variáveis ​​que você pode mostrá-los em seus scripts usando var_dump ($ somoevaribale) função.

Função checkForm ()

Esta é a validação função javascript que valida a entrada do usuário contra algumas regras. Esse e-mail é realmente um endereço de e-mail, que o nome não está vazio, etc

Mais uma vez: você pode encontrar vários scripts de validação de fontes de centenas de Internet.

Em nosso formulário de demonstração que irá validar o usuário tenha selecionado uma "resposta" botão de rádio. Se não houver um "resposta" não enviar os dados, mas mostrar um alerta:

"Text / javascript">
função checkForm(theform) {
 var porque = "";
  
  para (i=0; I theForm.answer.length <; i + +) {

   if (theForm.answer[i]. Verificado) {
    var checkvalue = theForm.answer[i]. Valor;
     quebrar;
    
    }
  }

  por + checkRadio =(checkvalue);
  
  if (porquê! = "") {
   Por + = "\nSe você acha que é o nosso erro, por favor deixe-nos conhecido. ";
   alertar(porque);
   
   retorno falso;
  
  }

  retorno verdadeiro;

}

 

função checkRadio(checkvalue) {
 var erro = "";
  
  if (!(checkvalue)) {

   erro = "Você não selecionou uma opção.\n";
   
   }
   retorno erro;
}
->

Não há truques e sem milagres aqui, então vamos para as gravação de dados em banco de dados.

Função write_data ()

Você pode poupar muito tempo se você usar o Joomla! objetos e métodos, em vez de usar a função de banco de dados MySQL padrão. Quero dizer com banco de dados-> load ..., banco de dados-> query, etc manual muito descritiva pode ser encontrada aqui.

função write_data($ Value)
/ / Se o usuário está logado salvar a sua ID de outra forma salvar 'host'

{
 global $ Banco de dados,  $ Minha;
 
 if ($ Minha->id)
  $ User_id  =  $ Minha->id;
 
 outro

  $ User_id  =  "Host";
 
 $ Banco de dados->setQuery( "INSERT INTO # __mytable_test
   (Id, recordtime, user_id, a resposta)
    VALUES ('', '".  dados('Y-m-d H: i: s')."','".$ User_id."','".$ Value."');" );
 
 $ Banco de dados->pergunta();  / / Escreve dados

}

Nada de interessante aqui, exceto Joomla global! variável $ minha. Ele contém user id, nome, etc seu e-mail novamente: tente usar var_dump ($ meu) em seu código e você verá a estrutura eo conteúdo.

Validando consulta:

Eu não incluí qualquer validação de dados que foi realmente escrito. Você pode fazê-lo se quiser. Basta substituir a linha de $ database-> query (); por
if (!$ Banco de dados->pergunta()) { / / Escreve dados e se o erro ocorre alerta

  eco "