Seção Sinless php. Incluindo arquivos em PHP usando include e require

Ao criar sites de escrita própria (sem usar frameworks, CMS e outras coisas da moda que simplificam a vida dos desenvolvedores web), nos deparamos com o problema de fazer edições no site quando há muitas páginas.

Para que não tenhamos que alterar as mesmas partes do site em cada um dos arquivos da página, podemos usar instruções PHP convenientes que nos permitem incluir arquivos com o código necessário em todas as páginas com literalmente uma linha de código. Então, ao alterar o conteúdo do arquivo incluído, alteramos o código em todas as páginas do site. Conveniente, não importa sua aparência.

Agora vamos dar uma olhada mais de perto em como conectar arquivos:

Usando incluir e exigir

Você não será capaz de encontrar uma diferença fundamental entre essas duas instruções com todo o seu desejo, mas existem nuances:

Se ocorrer um erro durante a execução do comando require, o analisador receberá uma resposta de erro fatal e a execução do código da página será interrompida, enquanto a inclusão emitirá apenas um aviso e a execução do arquivo continuará (o arquivo simplesmente não será conectado )

Vamos dar um exemplo simples para uma melhor compreensão do assunto.

Temos nosso minissite no qual o cabeçalho e o rodapé são iguais em todas as páginas e o corpo do documento muda.

Criamos os arquivos header.php e footer.php nos quais colocamos o código que será o mesmo em todas as páginas, e nos arquivos index.php e newpage.php iremos conectar as partes estáticas. Como resultado, obtemos:

Conteúdo Header.php

< header> < nav> < a href= "newpage1.php" title= "item do menu" >item do menu < a href= "newpage2.php" title= "item do menu" >item do menu < a href= "newpage3.php" title= "item do menu" >item do menu

Footer.php content

< footer> < p>Feito por nós

Conteúdo de outras páginas do site

Minisite

Muitas informações úteis

Como resultado do carregamento de nossa página, obtemos a seguinte imagem:

Como podemos ver, tudo funciona muito bem.

Gostaria de chamar a atenção para o fato de que rodamos o exemplo no servidor Denwer local, pois o PHP requer um servidor com suporte para que o PHP funcione. Se você criar um site em uma pasta simples em um PC, nada funcionará.

No exemplo acima, usamos o cabeçalho require e o footer include. O que usar em seus sites é com você. Como já mencionado, não há muita diferença entre eles. A menos que require seja considerada uma declaração um pouco mais rígida.

Na verdade, a linha simplesmente copia todo o conteúdo do arquivo, o caminho que indicamos, para o documento no qual está localizado.

Usando include _once e require _once

Ao trabalhar no site, podem surgir problemas devido ao fato de que o mesmo trecho de código é incluído no mesmo arquivo repetidamente.

Suponha que isso tenha acontecido devido ao fato de várias pessoas trabalharem no site, e quando os códigos foram mesclados, tal incidente aconteceu ...

Os desenvolvedores geralmente usam as instruções include_once e require_once para eliminar a possibilidade de tais problemas. O princípio de operação para eles é exatamente o mesmo que para incluir com exigir, mas se o arquivo em tal instrução já tiver sido conectado ao nosso, a reconexão não ocorrerá.

As desvantagens deste método incluem o fato de que ele funciona mais lento e com maior intensidade computacional do que seus predecessores incluem com require, uma vez que é necessário lembrar todos os arquivos incluídos e compará-los para evitar a duplicação de código.

Em uma nota

  • Para facilitar a distinção entre os arquivos das páginas do site e os arquivos de seus fragmentos, que incluímos nelas, os arquivos normalmente incluídos adicionam uma partícula inc ao nome. Considerando essa abordagem em nosso exemplo, obteríamos o arquivo header.inc.php do arquivo header.php e assim por diante. Essa abordagem pode tornar muito mais fácil entender a estrutura do site no futuro.
  • O código do arquivo que estamos conectando herda o escopo da linha na qual está conectado. Tobish apenas dentro da página terá um escopo global, e dentro da função terá um local.
  • Podemos usar include com require onde quisermos. Mesmo dentro dos scripts.
Índice do documento

1. função config_load

Sintaxe:
(arquivo config_load = "nome do arquivo")

Esta função é usada para carregar variáveis ​​de arquivos de configuração em um modelo. Além do nome do arquivo carregado, esta função pode ter vários parâmetros adicionais. Por exemplo, o parâmetro de seção, que especifica o nome da seção a ser carregada. Mais informações sobre esses e outros parâmetros podem ser obtidas na documentação do Smarty.

Exemplo:
(arquivo config_load = "task.conf")

2. Função de captura

Sintaxe:

(captura nome = "block_name"
atribuir = "nome_variável") ...
(/ captura)

Esta função foi projetada para coletar a saída do modelo em uma variável em vez de exibi-la na tela.

Qualquer coisa entre (capture name = "varname") e (/ capture) será escrito em uma variável chamada varname. O conteúdo capturado desta forma pode ser usado no modelo usando a variável especial $ smarty.capture.varname, onde varname é o valor passado para o atributo name da função de captura. Se nenhum nome de variável for especificado, o nome padrão será usado.

O segundo parâmetro de atribuição especifica o nome da variável à qual o valor de saída capturado será atribuído. Este parâmetro, como o nome, é opcional.

3. Função de seção

Sintaxe:

(nome da seção = "nome_da_seção"
loop = "variable_for_out_number_iterations"
[, start = "start_position_index"]
[, step = "step"] [, max = "maximum_iterations"]
[, show = "show_or_section"]) ...
(/ seção)

Section Section é um loop para percorrer os elementos do array. Os parâmetros necessários são name, que é usado para definir o nome da seção, e loop, que é uma variável que determina o número de iterações do loop.

Como regra, o loop é uma variável do tipo array e o número de iterações da seção é igual ao número de elementos desse array. Para exibir uma variável dentro de um loop, você precisa indicar o nome da seção entre colchetes após o nome da variável.

(nome da seção = loop de arte = $ title)

Título: ($ title)

(/ seção)

Exemplo 15.8. Loop para iterar sobre os elementos da matriz

4. A função foreach

Sintaxe:

(foreach from = "array_name"
item = "current_item_name")
... (/ para cada)

Além disso, você pode usar a chave de atributos adicionais - o nome da chave para o elemento atual da matriz e o nome - o nome do loop, com o qual você pode acessar suas propriedades. Os atributos from e item são obrigatórios.

Os laços Foreach são uma alternativa aos laços de seção. A função foreach funciona de forma muito semelhante ao loop foreach do PHP.
(foreach from = $ articles item = art)
Título: ($ art)

(/ para cada)

Exemplo 15.9. Loop Foreach

Os loops Foreach têm suas próprias propriedades. Você pode acessá-los desta maneira: ($ smarty.foreach.foreachname.varname), onde foreachname é o nome do loop especificado por seu parâmetro de nome e varname é o nome da propriedade.

5. Operador if, elseif, else

Sintaxe:

(se expressão) action_block
(elseif expressão1) action_block1
(mais) action_block2
(/ E se)

A ação do operador é quase igual à do operador PHP if ... elseif ... else.

Os seguintes operadores de comparação podem ser usados ​​em expressões: eq, ne, neq, gt, lt, lte, le, gte, ge, é par, é ímpar, não é par, não é ímpar, não, mod, div por, mesmo por, ímpar por, == ,! =,>,<, <=, >= Cada um deles deve ser separado dos valores circundantes por espaços. Você pode usar parênteses em expressões e chamar funções php.

(se $ name eq "Vasya")
Bem-vindo, Vasya.
(elseif $ name eq "Petya")
Bem-vindo, Petya.
(outro)
Receber. Quem é Você?
(/ E se)

Exemplo 15.10. Declarações If, elseif, else

(* este exemplo não funcionará porque não há espaços ao redor dos operadores de comparação *)
(se $ name == "Vasya" || $ name == "Petya")
...
(/ E se)
Exemplo 15.11. Exemplo quebrado

Um artigo que explora o elemento de seção HTML da categoria de seccionamento.

Objetivo do elemento de seção

O elemento de seção é usado para criar uma seção em um documento que agrupa algum conteúdo de assunto. Para cada seção do documento, deve ser indicado seu nome (tópico). Isso geralmente é feito com cabeçalhos (elementos h1-h6).

Título da seção

Conteúdo da seção ...

Elementos de seção são comumente usados ​​nas seguintes situações:

  • para marcar seções dentro de uma seção. Por exemplo, para marcar capítulos em um artigo, guias em uma caixa de diálogo, seções em uma dissertação, etc.
  • para agrupar várias seções em um grupo temático. Por exemplo, para agrupar as últimas notícias do site, comentários sobre um artigo, etc.

Assim, o elemento de seção só deve ser usado para algum conteúdo se tiver um título e fizer parte de outra coisa.

Usando o elemento de seção

Por exemplo, considere um fragmento de código de página que contém um artigo com comentários. Cada um dos comentários postados pelo usuário na página contém algum conteúdo completo e, portanto, pode ser considerado um elemento de artigo. Mas, ao mesmo tempo, todos os comentários representam um determinado grupo temático e, portanto, podem ser colocados no elemento seção, ou seja, este elemento agrupará todos esses comentários na página.

Título do artigo

Comentários (1)

Cabeçalho do comentário

Texto do comentário ...

Cabeçalho do comentário

Texto do comentário ...

Título do artigo Título do comentário Título do comentário

Por exemplo, considere o uso de elementos de seção para criar seções dentro de um elemento de artigo:

Título do livro

Primeiro capítulo

Capítulo dois

Capítulo três

Apêndice A

Apêndice B

O exemplo acima terá o seguinte esboço:

Título do livro Capítulo Um Capítulo Dois Capítulo Três Apêndice A Apêndice B

Limitações ao usar o elemento de seção

O elemento de seção em HTML 5 não é um elemento genérico para agrupar conteúdo, ou seja, não deve ser usado para embrulhar qualquer conteúdo que você goste. Seu principal objetivo é adicionar semântica ao documento e criar seu contorno.

Quando um autor precisa agrupar conteúdo apenas para estilizá-lo ou manipulá-lo em JavaScript, o melhor lugar é ele usar o elemento div. O elemento div, ao contrário do elemento section, não adiciona semântica ao documento e não participa da criação de seu contorno (contorno).

Diferença entre os elementos da seção e do artigo

Os elementos da seção e do artigo, embora à primeira vista pareçam muito semelhantes, têm significados semânticos diferentes. O elemento do artigo destina-se a agrupar conteúdo completo, autocontido e que pode ser visualizado separadamente do restante do conteúdo da página. E o elemento section carrega um significado semântico diferente, ele se destina a agrupar o conteúdo que é parte integrante de outra coisa.

Mas como um autor pode saber qual é o conteúdo de uma página? Vejamos isso com um exemplo de trecho de um artigo. Um fragmento é parte de um artigo e, portanto, um elemento de seção deve ser usado para agrupar seu conteúdo. Mas o mesmo fragmento, já deixado como comentário, representará algo inteiro, completo. Portanto, neste contexto, o elemento do artigo pode ser usado para agrupá-lo. Mas, é claro, pode-se raciocinar e vice-versa. Portanto, o elemento a ser usado para agrupar o conteúdo depende, na maioria dos casos, de sua opinião subjetiva como autor. Mas o mais importante nesta abordagem é manter a posição escolhida. Portanto, quanto mais consistente o autor é ao criar a estrutura, mais sentido ele pode dar a ela.

) Cada etiqueta (seção) deve ter um par (/ seção)... Os parâmetros necessários são nome e ciclo... O nome do loop (seção) pode ser qualquer nome composto por letras, números e sublinhados. Ciclos (seção) podem ser aninhados e os nomes aninhados (seção) devem ser exclusivos entre si. Variável ciclo(geralmente uma matriz de valores) determina o número de iterações do loop. Ao imprimir variáveis ​​dentro de uma seção, o nome da seção deve ser indicado ao lado do nome da variável entre colchetes. (seção outra)é executado se o parâmetro ciclo não contém valores.

Nome do Atributo Tipo de Obrigatório Predefinição Descrição
nome fragmento sim n / D Nome da Seção
ciclo misturado sim n / D Um valor que determina o número de iterações do loop.
começar inteiro Não 0 O índice da posição em que o loop começará. Se o valor for negativo, a posição inicial é calculada a partir do final da matriz. Por exemplo, se houver 7 elementos em uma variável de loop e o valor do atributo inicial for -2, o índice inicial será 5. Valores inválidos (valores fora da matriz) são truncados automaticamente para o valor válido mais próximo.
Passo inteiro Não 1 O valor da passada que é usado para percorrer a matriz. Por exemplo, passo = 2 indica um percurso da matriz pelos elementos 0,2,4 ... Se a etapa for negativa, então a matriz será percorrida na direção oposta.
max inteiro Não 1 O número máximo de iterações de loop.
exposição boleano Não verdade Indica se deve mostrar esta seção ou não

Observação

A partir do Smarty 1.5.0, a sintaxe das variáveis ​​de propriedade da sessão foi alterada de (% sectionname.varname%) para ($ smarty.section.sectionname.varname). A sintaxe antiga ainda é suportada, mas você verá apenas exemplos da nova sintaxe.

index é usado para exibir o índice atual da matriz, começando em zero (ou no atributo start, se especificado) e aumentando em um (ou pelo valor do atributo step, se especificado).

Nota técnica

Se os atributos step e start não forem especificados, o índice é o mesmo que o atributo da seção de iteração, exceto que começa em 0 em vez de 1.

iteração é usada para exibir o número da iteração atual do loop.

Observação

Este valor é independente das propriedades start, step e max, ao contrário da propriedade index. Além disso, as iterações começam em um, ao invés de zero como índices. rownum é um sinônimo para a propriedade iteration, eles funcionam da mesma maneira.

Exemplo 7.38. propriedade (seção) iteração

atribuir ("custid", $ id); ?> (nome da seção = cu loop = $ custid start = 5 step = 2) iteration = ($ smarty.section.cu.iteration) index = ($ smarty.section.cu.index) id = ($ custid)
(/ seção)

O resultado deste exemplo:

Iteração = 1 índice = 5 id = 3005
iteração = 2 índice = 7 id = 3007
iteração = 3 índice = 9 id = 3009
iteração = 4 índice = 11 id = 3011
iteração = 5 índice = 13 id = 3013
iteração = 6 índice = 15 id = 3015

Este exemplo usa a propriedade iteration para produzir o título da tabela a cada cinco linhas (usa (if) com o operador mod).

(nome da seção = co loop = $ contacts) (if $ smarty.section.co.iteration% 5 == 1) (/ E se) (/ seção)
Nome>CasaCélulaO email
visualizar ($ contacts.name) ($ contacts.home) ($ contacts.cell) ($ contacts.email)