ti-enxame.com

Como o envio de formulários com visualizações / tarefas realmente funciona?

Oi eu tenho uma pergunta sobre formulários Joomla. Eu quero entender como o Joomla funciona internamente, especialmente eu estou interessado em com_installer componente para saber como está funcionando. E eu encontrei um formulário em default.php arquivo em com_installer/views/install/tmpl pasta.

Neste arquivo, existem botões personalizados para enviar um formulário. E estou interessado em saber como os botões realmente acionam a instalação de componentes, módulos ou outras coisas. No corpo do formulário, vejo alguns valores ocultos como

<input type="hidden" name="task" value="install.install" />

Portanto, esse valor oculto provavelmente aciona uma instalação chamando um controlador de instalação e o método de instalação desse controlador.

Mas a questão é como o Joomla faz isso? Onde o código está redirecionando o URL de view = install para task = install.install? Em outras palavras, como o Joomla sabe que o valor da entrada oculta deve ir para o URL?

5
Bogdan

@RiccardoZorn está correto no nível base. Existem dois campos de formulário ocultos normalmente definidos: opção e tarefa.

Opção: O nome do componente como com_example Direciona a página para carregar esse componente.

Tarefa: Uma função do controlador ou um controlador e uma função para chamar. Se tiver um '.' nela, a peça anterior especifica um controlador para carregar e, em seguida, chame a função com o nome da peça após o período. Se não houver um período, ele executará a função no controlador padrão (geralmente controller.php na pasta base do componente.


Você também pergunta especificamente sobre os botões da barra de ferramentas. Isso envolve um pouco de javascript que é carregado automaticamente pelo Joomla para ativar os botões.

Quando o botão é clicado, ele deve acionar Joomla.submitbutton(). Esta função assume um valor que é a tarefa a ser definida com base no botão clicado. Portanto, se você clicar no botão Salvar, isso normalmente definirá a tarefa como import.save. (Não acho que esse botão exista realmente neste componente, mas muitos outros o terão.)

A função submitbutton por padrão apenas a envia para outra função submitform. Essa função mudará essa tarefa para o campo oculto apropriado. Finalmente, este envia o formulário.

Portanto, mesmo que esses botões da barra de ferramentas não sejam botões de envio (ou mesmo na tag de formulário normalmente), eles ainda atualizarão o valor oculto de task e enviarão o formulário usando javascript.

Você pode encontrar as principais funções javascript aqui: media/system/js/core-uncompressed.js

3
David Fritsch

A tarefa é um método no controller.php na pasta do componente principal (se for uma única palavra) ou o nome do controlador e seu método separados por um ponto, ou seja, install.install Será analisado pelo método install() em controllers/install.php

2
Riccardo Zorn