Como funciona o Drupal? [fechado]
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.
É 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.'
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).
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
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.
"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.
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.
Responder a https://stackoverflow.com/a/1070325/1154755
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.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.