Como funciona o Drupal? [fechado]

Alguém pode dar uma visão arquitectónica do fluxo de controlo Drupal 7? Talvez no sentido de um fluxograma sobre como uma página é gerada. Que recursos adicionais sugere consultar sobre o funcionamento do Drupal?

Author: domoaringatoo, 2009-07-01

9 answers

O Drupal pode ser confuso nesta frente, parcialmente porque tem uma pilha de funções relativamente profunda. Embora seja um procedimento PHP, é puramente evento/ouvinte impulsionado em sua arquitetura, e não há um "fluxo" simples no script PHP principal para você olhar embora. Recentemente fiz uma apresentação sobre este assunto, e os slides são postados em slideshare, mas um rápido resumo de alto nível pode ser útil.

  • o índice do Drupal.php file functions as a frontside controller. Todas as páginas são encaminhadas através dele, e o url/caminho" real " solicitado pelo Usuário é passado para o índice.php como parâmetro.
  • o sistema do router path do Drupal (MenuAPI) é usado para corresponder a localização pedida a um dado módulo de 'plugins'. Esse módulo de plugin é responsável pela construção do "conteúdo primário" da página.
  • Uma vez que o conteúdo da página principal é construído, índice.php chama tema ('page', $content), que entrega o conteúdo para o sistema de theming/skining do Drupal. Pronto, está embrulhado. barras laterais/cabeçalhos/widgets / etc..
  • a página renderizada é então devolvida ao apache e é enviada de volta para o navegador do utilizador.
Durante todo esse processo, módulos de plugins Drupal e de terceiros estão disparando eventos, e escutando para que eles respondam. O Drupal chama isso de Sistema de 'gancho', e é implementado usando Convenções de nomenclatura de funções. O módulo 'blog', por exemplo, pode interceptar 'user' relacionado implementando uma função chamada blog_user(). Em linguagem Drupal, chama-se hook_user().

É um pouco desajeitado, mas devido a uma peculiaridade do PHP( ele mantém uma hashtable interna de todas as funções carregadas), ele permite que o Drupal verifique rapidamente os ouvintes apenas através da iteração de uma lista de plugins instalados. Para cada plugin pode chamar function_exists () no padrão devidamente nomeado, e chamar a função se ela existir. ("I'm display the 'login' event. A função' mymodule_ login ' existe? Vou declarar. O' your module_login ' existe? Não? Que tal ... "nextmodule_login"?" etc. Mais uma vez, um pouco desajeitado, mas funciona muito bem.

Tudo o que acontece no Drupal acontece por causa de um desses eventos ter sido disparado. O MenuAPI só sabe o que os urls / paths são tratados por diferentes módulos de plugins porque dispara o evento 'menu' (hook_ menu) e reúne todos os módulos de plugins de meta-dados respondem com. ("Eu vou cuidar da url 'news / recent', e aqui está a função para chamar quando essa página precisa ser construída...") Conteudo só é salvo porque o Formapi do Drupal é responsável pela construção de uma página, e dispara o evento 'a form was submitted' para um módulo responder. A manutenção horária acontece porque o hook_cron() é despoletado, e qualquer módulo com o mymodulename_cron() como um nome de função terá sua função chamada.

Tudo o resto é, em última análise, apenas detalhes -- detalhes importantes, mas variações sobre esse tema. indice.php é o controlador, o sistema de menu determina o que é a "página atual" , e lotes de eventos são disparados no processo de construção dessa página. Módulos de Plugin podem ligar-se a esses eventos e mudar o fluxo de trabalho/fornecer informações adicionais/etc. Isso também é parte da razão pela qual tantos recursos Drupais se concentram em fazer módulos. Sem módulos, o Drupal não faz nada além de dizer: "alguém pediu uma página! Existe? Não? Ok, vou servir um 404.'

 153
Author: Eaton, 2009-07-01 14:58:03

Drupal Page Serving Mechanism

Para entender como o Drupal funciona, você precisa entender o mecanismo de serviço de páginas do Drupal. Em suma, todas as chamadas / urls / pedidos são atendidas por índice.php que carrega o Drupal, incluindo vários ficheiros/módulos de inclusão e, em seguida, chamando a função apropriada, definida no módulo, para servir o pedido/url.

Aqui está o extracto do livro, Pro Drupal Development, que explica o processo de bootstrap do Drupal,

The Bootstrap Processo

O Drupal arranca-se a cada pedido, passando por uma série de fases de bootstrap. Estas fases são definidas no bootstrap.inc e proceder conforme descrito nas secções seguintes.

Inicializar A Configuração

Esta fase popula a matriz de configuração interna do Drupal e estabelece o URL de base ($base_url) do site. Configuracao.o ficheiro php é processado através do include_ Once (), e todas as substituições de variáveis ou string estabelecidas existem aplicado. Veja as secções" variable Overrides" e "String Overrides" das páginas de ficheiros/all/default/default / default.definicao.php para detalhes.

'Cache' De Páginas Iniciais

Em situações que exijam um elevado nível de escalabilidade, um sistema de caching pode ter de ser invocado antes mesmo de uma conexão de banco de dados é tentado. A fase de cache da página inicial permite você inclui (Com incluir ()) um ficheiro PHP que contém uma função chamada page_cache_ fastpath (), que assume e devolve o conteúdo ao navegador. A 'cache' da página inicial está activa se configurar a variável page_cache_fastpath como TRUE, e o ficheiro a incluir é definida configurando a variável cache_inc para a localização do ficheiro. Ver o capítulo sobre caching por exemplo.

Inicializar A Base De Dados

Durante a fase da base de dados, o tipo de base de dados é determinado, e uma ligação inicial é made that will be used for database queries.

Controlo de acesso baseado no nome da Máquina/IP

Drupal permite a proibição de hosts numa base por nome / endereço IP. No controlo de acesso Fase, uma rápida verificação é feita para ver se o pedido é proveniente de um host proibido; em caso afirmativo, acesso negado.

Inicializar O Tratamento De Sessões

O Drupal aproveita-se do tratamento de sessão do PHP, mas sobrepõe-se a alguns dos manipuladores. com o seu próprio para implementar o tratamento de sessão com suporte a banco de dados. As sessões são inicializadas ou restabelecido na fase de sessão. O objecto global $user representar o utilizador actual também é inicializado aqui, embora para eficiência nem todas as propriedades estão disponíveis (elas são adicionadas por uma chamada explícita para a função user_load () quando necessário).

'Cache' De Páginas Tardias

Na fase de cache da página final, o Drupal carrega o código suficiente para determinar se ou não para servir uma página do cache da página. Isso inclui a junção de Configurações do banco de dados para a matriz que foi criada durante a fase de configuração inicialização e a carregar ou a processar o código do módulo. Se a sessão indicar que o pedido foi emitido por um usuário anônimo e cache de página está habilitado, a página é devolvida a partir do cache e paragens de execução.

Determinação Linguística

Na fase de determinação da língua, o suporte multilingue do Drupal é inicializado e é tomada uma decisão sobre qual a língua que será utilizada para servir a página actual com base na configuração do site e do utilizador. O Drupal suporta várias alternativas para determinar o Suporte de linguagem, como prefixo de caminho e negociação de linguagem de nível de domínio.

Localização

Na fase path, é carregado o código que lida com os caminhos e a aliasing do caminho. Esta fase activa URLs de leitura humana a resolver e lida com lixiviação de canais internos e pesquisa.

Completo

Esta fase completa o processo de bootstrap carregando uma biblioteca de funções comuns, tema suporte e suporte para mapeamento de chamadas de volta, tratamento de arquivos, Unicode, Php image toolkits, form criação e processamento, tratamento de E-mail, tabelas automaticamente suportáveis, e o conjunto de resultados paging. O manipulador de erros personalizado do Drupal está definido e todos os módulos activos são carregados. Por último, a Drupal lança o anzol init, para que os módulos tenham a oportunidade de ser notificados antes do início do processamento oficial do pedido.

Uma vez que o Drupal tenha completado a inicialização, todos os componentes do framework estão disponíveis. É hora de pegar o pedido do navegador e entregá-lo para a função PHP que irá trata disso. O mapeamento entre URLs e funções que lidam com eles é realizado usando um registro de retorno que cuida tanto do mapeamento de URL quanto do controle de acesso. Registo dos módulos seus callbacks usando o gancho de menu (para mais detalhes, ver Capítulo 4).

Quando o Drupal tiver determinado que existe uma chamada de volta para a qual o URL do navegador solicitar mapas com sucesso e que o usuário tem permissão para acessar esse callback, o controle é entregue ao callback funcao.

Processamento de um pedido

A função de callback faz qualquer trabalho necessário para processar e acumular dados necessários para satisfazer a solicitação. Por exemplo, se um pedido de conteúdo como http://example.com/ q=node / 3 é recebido, o URL é mapeado para a função node_page_view() no node.modulo. Mais processamento irá recuperar os dados para esse nó da base de dados e colocá-lo em uma estrutura de dados. Então, está na hora de tema.

Temática dos Dados

A temática envolve transformar os dados que foram recuperados, manipulados ou criados em HTML (ou XML ou outro formato de saída). O Drupal irá usar o tema o administrador selecionou para dar à página web a aparência e sensação corretas. A saída resultante é então enviada para o navegador web (ou outro cliente HTTP).

 54
Author: amitgoyal, 2018-03-27 15:21:53
A resposta do Eaton dá uma boa visão geral. (Eu sou novo aqui então eu não posso mod-lo para cima, assim o comentário.) O brutal momento " aha " para mim foi perceber que tudo acontece através do Índice.php, e, em seguida, através da Cachoeira de módulos (núcleo, em seguida, por local). Para estender a funcionalidade de core não a reescreva. Em vez disso, copie o módulo para/sites/all/ modules /ou/sites/[yoursite] / modules e Extenda isso, ou crie um novo módulo nesses locais. O mesmo para temas. Modulo diretórios podem conter código de exibição, bem como, na forma de tpl, css etc. Se estiver habituado a estruturas mais rigorosas do tipo MVC, como Carris, Django, etc. tudo isto fica um pouco confuso. Módulos podem se misturar em um monte de código de exibição, e se você estiver olhando para os módulos ou modelos de outra pessoa você acabará por andar para trás através da pilha. Essa é a beleza/dor de trabalhar em PHP. Ironicamente, "construir uma aplicação" pode ser a pior maneira de aprender isto. O Drupal fá-lo. muito fora da caixa que é simplesmente obscuro até que você descubra o fluxo de controle. Não há nada em um arquivo tpl que lhe diga de onde vem uma função com um nome divertido como l (), por exemplo.
 19
Author: axoplasm, 2009-07-01 17:18:31

Http://drupal.org/handbooks

Leia os manuais, especialmente o Guia de desenvolvimento de temas. O Drupal suporta vários motores temáticos. Zen usa phptemplate, por isso preste atenção a essa parte do Guia.

Para o desenvolvimento de módulos, a API está documentada em api.drupal.org.

Especialmente quando você precisa obter a informação rápido e rápido http://www-128.ibm.com/developerworks/ibm/osource/implement.html

 8
Author: joe, 2009-07-01 11:20:23

Depende de quão profundo um entendimento você está procurando; se você tem um bom conhecimento de php, eu sugeriria a leitura através do próprio código, começando com o índice.php, e então indo para o includes/bootstrap.inc, e depois alguns dos outros scripts do directório.

A chave inclui ficheiros:

  • menu.inc é muito importante para entender como o sistema global funciona, uma vez que ele lida com um monte de mapeamento implícito de URLs para o conteúdo.
  • frequentes.inc tem a maioria das funções misteriosas que formam a base da API.
  • Módulo.inc lida com as invocações do gancho que a Eaton mencionou
  • Forma.inc trata da Apresentação, Apresentação e processamento do formulário
  • Tema.inc lida com a apresentação.

Existe também alguma funcionalidade chave nos Módulos/directório; em particular, módulos/nó / nó.module forms the basis of the node system, which is in general what's used to encapsulate site content.

O código é, em geral, muito bem comentado e claro. O uso da marcação Doxygen dentro do comentário significa que o código efetivamente é a documentação canônica.

Também ajuda a fazer isto usando um editor que pode saltar rapidamente para a definição de uma função. Usar o vim em combinação com o ctags funciona para mim; você tem que dizer ao ctags para indexar .inc .módulo, etc. ficheiros como ficheiros php.

 6
Author: intuited, 2010-03-21 00:12:56
Aprendi muito importando o drupal .código php em um projeto NetBeans. Você pode então executar o depurador netbeans e assistir as diferentes fases da página se unirem.
 5
Author: Ben Hammond, 2009-07-01 11:39:38
Os melhores livros sobre o assunto São "Pro Drupal Development" E "Using Drupal"."

"Desenvolvimento Pro Drupal" inclui vários fluxogramas bonitos e resumos completos de cada uma das APIs do Drupal (formas, temas, etc.). Destina-se a ser especialmente instrutivo para as pessoas que fazem seus próprios módulos e temas, mas tem muito valor para o programador PHP-savvy médio que quer entender Drupal. Além disso, criei um módulo personalizado para cada site que construí, só para ganhar o controle extra sobre coisas como seletivamente esconder campos em várias formas (o que você geralmente quer fazer para simplificar os formulários de nó para os usuários finais), então é bom ter esse conhecimento sob o seu chapéu.

"Usar o Drupal" é destinado ao desenvolvedor do site que quer saber como construir coisas boas como galerias, blogs e sites de redes sociais. Ele passa por vários casos de uso e mostra como configurar os módulos existentes para fazer cada trabalho. No processo familiariza-te com os módulos adicionais essenciais " Content Construction Kit "(CCK) e" Views", como fazer blocos e modelos personalizados, e os ins-and-outs de manter um site Drupal. Eu recomendo este livro especialmente para aqueles que querem se atualizar e realmente usar Drupal imediatamente. No processo você ganha uma compreensão da organização interna do Drupal.

 5
Author: Scott Lahteine, 2009-07-08 02:06:10

Este (para o Drupal 6) & este (para o Drupal 7) é uma visão arquitectónica muito boa do drupal. Se você quiser mais detalhes, então eu começaria a escrever algo a maioria da documentação é boa. Tentar aprendê-lo a um alto nível de detalhe sem algo concreto para alcançar será muito mais difícil do que experimentar algo.

 5
Author: Jeremy French, 2016-12-06 19:36:01
Novo colaborador aqui, 2 anos atrasado na conversa; -)

Responder a https://stackoverflow.com/a/1070325/1154755

Para estender a funcionalidade principal não a reescreva. Em vez disso, copiar o módulo em/sites/Todos/ módulos /ou/sites/[yoursite] / módulos e Extender Isso, ou criar um novo módulo nesses lugares. O mesmo para temas.

Na verdade, nunca tive de copiar um módulo principal para o actualizar. Os ganchos drupais devem ser tudo para ti. precisar. Para temas, sim, às vezes é a única maneira de ir, mas muitas vezes, você pode construir um sub-tema para obter o resultado que você precisa.
 4
Author: Robin Millette, 2017-05-23 12:26:20