Modificadores condicionais para modelos em MODX. Filtro de recurso universal Conectando script JS filtro Ajax

Os filtros no Revolution permitem manipular como certas tags são processadas. Eles permitem que você altere valores diretamente em seus modelos.

Filtros de entrada

Atualmente, os filtros de entrada são usados ​​na preparação para o processamento dos filtros de saída. Eles geralmente são usados ​​apenas dentro do mecanismo MODX.

Filtros de saída

No Revolution, os filtros de saída se comportam da mesma maneira que o PHx no Evolution, apenas os filtros agora são integrados diretamente no mecanismo MODX. A sintaxe é semelhante a esta:

[]

Os filtros podem ser aplicados sequencialmente. Para fazer isso, escreva-os em sequência (da esquerda para a direita):

[]

Filtros também podem ser usados ​​para modificar a saída de trechos. O filtro deve ser especificado antes de todos os parâmetros (antes do ponto de interrogação):

[]

Modificadores de saída

A tabela mostra alguns modificadores e exemplos de seu uso. Nos exemplos, os modificadores são aplicados aos espaços reservados, mas você deve lembrar que eles podem ser aplicados a qualquer tag MODX. Certifique-se de que a tag usada produza pelo menos algo que o modificador irá processar.

Modificadores de saída condicional

Modificador Descrição Exemplo de uso
se, entrada Passe texto arbitrário como entrada para o próximo modificador [[*id:input=`[[+placeholder]]`:is=`1`:then=`Sim`:else=`Não`]]
ou OU [[+numbooks:is=`5`:or:is=`6`:then=`Há 5 ou 6 livros aqui`:else=`Não tenho certeza de quantos livros`]]
e Combinando vários modificadores com um link E [[+numbooks:gt=`5`:and:lt=`10`:then=`Existem de 5 a 10 livros aqui`:else=`Existem menos de 5 ou mais de 10 livros`]]
isequalto, isequal, equalto, igual, é, eq Compara o valor passado com o valor definido. Se os valores corresponderem, o valor “then” será exibido, caso contrário - “else” [[+numbooks:isequalto=`5`:then=`Há 5 livros aqui`:else=`Não tenho certeza de quantos livros`]]
nota igual a, nota igual, não é, não é, neq, ne Compara o valor passado com o valor definido. Se os valores NÃO corresponderem, o valor "então" será exibido, caso contrário - "else" [[+numbooks:notequalto=`5`:then=`Não tenho certeza de quantos livros`:else=`Existem 5 livros`]]
maior que ou igual a, igual ou maior que, ge, por exemplo, isgte, gte O mesmo, apenas a condição é “Maior ou igual a” [[+numbooks:gte=`5`:then=`Há 5 livros ou mais aqui`:else=`Há menos de cinco livros aqui`]]
é maior que, maior que, isgt, gt O mesmo, apenas a condição “Estritamente mais” [[+numbooks:gt=`5`:then=`Há mais de cinco livros aqui`:else=`Há 5 livros ou menos`]]
igual ou menor que, menor que igual a, el, le, islte, lte O mesmo, apenas a condição é “Menor ou igual a” [[+numbooks:lte=`5`:then=`Há 5 livros ou menos aqui`:else=`Há mais de cinco livros aqui`]]
é menor que, é menor que, menor que, menor que, islt, lt O mesmo, apenas a condição “Estritamente menos” [[+numbooks:lte=`5`:then=`Há menos de cinco livros aqui`:else=`Há 5 livros ou mais aqui`]]
esconder Oculta o elemento se a condição for verdadeira [[+numbooks:lt=`1`:ocultar]]
mostrar Exibe um elemento se uma condição for verdadeira [[+numbooks:gt=`0`:mostrar]]
então Usado para criar condições [[+numbooks:gt=`0`:then=`Livros em estoque!`]]
outro Usado para criar condições (juntamente com “então”) [[+numbooks:gt=`0`:then=`Livros em estoque!`:else=`Desculpe, mas está tudo esgotado.`]]
membro de, ismembro, mo Verifica se o usuário é membro do grupo de usuários especificado [[!+modx.user.id:memberof=`Administrador`]]

Modificadores para trabalhar com strings

Modificador Descrição Exemplo de uso
gato Adiciona um valor após uma tag [[+numbooks:cat=`livros`]]
lcase, minúsculas, strtolower Converte todas as letras em minúsculas [[+título:lcase]]
ucase, maiúsculas, strtoupper Converte todas as letras em maiúsculas [[+título:caso]]
palavras-chave Coloca em maiúscula a primeira letra das palavras [[+título:ucwords]]
primeiro Coloca em maiúscula a primeira letra de uma string [[+nome:ucfirst]]
htmlent, htmlentidades Converte todos os caracteres em entidades HTML correspondentes [[+e-mail:htmlent]]
es, escapar Escapa com segurança dos caracteres usando expressões regulares e `str_replace()`. Também escapa das tags MODX. [[+e-mail:escape]]
tira Substitui todos os hifens, tabulações e qualquer número de espaços por apenas um espaço [[+documento de texto:tira]]
stripString Corta a substring especificada de uma string [[+nome:stripString=`Sr.`]]
substituir Substitui substrings [[+pagetitle:replace=`Sr.==Sra.`]]
striptags, stripTags, notags, strip_tags Corta todas as tags (as tags permitidas podem ser especificadas). Não use para fins de segurança. [[+código:strip_tags]]
len, comprimento, strlen Imprime o comprimento de uma string [[+string longa:strlen]]
reverso, strev Inverte uma string caractere por caractere [[+texto espelho:reverso]]
quebra de linha Insere uma quebra de linha após cada enésimo caractere (as palavras não são quebradas) [[+bodytext:wordwrap=`80`]]
corte de texto Insere uma quebra de linha após cada enésimo caractere, mesmo que esse caractere esteja dentro de uma palavra [[+bodytext:wordwrapcut=`80`]]
limite Imprime um número especificado de caracteres desde o início de uma linha (o padrão é 100) [[+descrição:limite=`50`]]
reticências Adiciona reticências e trunca a linha se ela for maior que o número especificado de caracteres (o padrão é 100) [[+descrição:reticências=`50`]]
marcação Blindagem. Exibe o elemento como está, sem o :tag. Para uso em documentação [[+ mostrar isto:tag]]
adicionar, incrementar, aumentar Adiciona o número especificado (padrão +1) [[+downloads:incr]] [[+blackjack:add=`21`]]
subtrair, decrementar, diminuir Subtrai o número especificado (padrão -1) [[+contagem regressiva:decr]] [[+dinheiro:subtrair=`100`]]
multiplique, mpy Multiplica pelo número especificado (padrão *2) [[+trifeta:mpy=`3`]]
dividir, dividir Divide pelo número especificado (padrão /2) [[+classificação:div=`4`]]
módulo, mod Retorna o módulo de um número (padrão: %2, retorna 0 ou 1) [[+número:mod]]
ifempty,padrão,vazio,isempty Retorna o valor do modificador se o valor da tag estiver vazio [[+nome:default=`anônimo`]]
não está vazio,! vazio, se não está vazio, não está vazio Retorna o valor do modificador se o valor da tag Não vazio [[+nome:notempty=`Olá [[+nome]]!`]]
nl2br Substitui caracteres nova linha\n para a tag HTML br [[+arquivo de texto:nl2br]]
data Converte o carimbo de data/hora em texto de acordo com o formato especificado (formato de data) [[+ano de nascimento:data=`%Y`]]
strtotime Converte a data como texto para carimbo de data/hora UNIX [[+hora:strtotime]]
data difusa Aceita um carimbo de data/hora e retorna uma data no formato "Hoje às 16h20" [[+criado em:fuzzydate]]
atrás Retorna o número de segundos, minutos, semanas ou meses que se passaram desde a data especificada na tag. [[+criado em:ago]]
md5 Cria um hash MD5 de um valor [[+senha:md5]]
cdata Envolve a saída com tags CDATA [[+conteúdo:cdata]]
informações do usuário Retorna o valor solicitado do perfil do usuário. ID do usuário obrigatório [[!+modx.user.id:userinfo=`nomedeusuário`]]
está logado Retorna 1 se o usuário estiver autorizado no contexto atual [[!+modx.user.id:isloggedin:is=`1`:then=`Sim`:else=`Não`]]
não está logado Retorna 1 se o usuário Não autorizado no contexto atual [[!+modx.user.id:isnotloggedin:is=`1`:then=`Não`:else=`Sim`]]
código de url Converte o valor em URL, ou seja, utiliza a função `urlencode()` do PHP [[+minhastring:urlencode]]
código de url Converte o valor como de uma URL, ou seja, utiliza a função PHP `urldecode()` [[+meuparam:urldecode]]

Os modificadores para trabalhar com usuários devem ser chamados sem cache para que cada usuário veja os dados mais recentes.

Usando modificadores de saída com parâmetros

Se uma tag tiver parâmetros, eles deverão ser escritos imediatamente após o modificador:

[[!getResources:default=`Desculpe, nada encontrado`?

&tplFirst=`blogTpl` &parents=`2,3,4,8` &tvFilters=`blog_tags==%[[!tag:htmlent]]%` &includeTVs=`1` ]]

Criando um modificador personalizado

Qualquer trecho pode ser usado como modificador de saída. Para fazer isso, basta especificar o nome do snippet em vez do modificador. Por exemplo, vamos criar um snippet [] que adiciona um certo número de pontos de exclamação à saída:

[[*pagetitle:makeExciting=`4`]]

Essa chamada de tag passará os seguintes parâmetros para o snippet makeExciting para processamento: Parâmetro Significado

Valor de exemplo

Os filtros da revolução permitem controlar a forma como os dados são apresentados. Eles permitem alterar valores dentro de modelos.

[ ]

No Revolution, o filtro de saída é aplicado uma ou mais vezes a uma série de modificadores de saída que se comportam de forma semelhante às chamadas PHx no MODx Evolution - exceto que são incorporados ao kernel. A sintaxe é a seguinte:

[ ]

Eles também podem ser conectados (feito da esquerda para a direita): Você também pode usá-los para alterar a saída do snippet; Observe que o modificador vem depois do nome do snippet e antes ponto de interrogação

[ ]

, Por exemplo,

A tabela a seguir lista alguns dos modificadores existentes e fornece exemplos de seu uso. Embora os exemplos abaixo sejam para algumas tags, os modificadores de saída podem ser usados ​​com qualquer tag MODx. Certifique-se de que o modificador esteja recebendo dados.

Modificador

Descrição

Modificadores condicionais:

se, entrada

Exemplo

OU lógico

[ [+numbooks:is=`5`:ou:is=`6`:then=`Existem 5 ou 6 livros!`:else=`Não tenho certeza de quantos livros`] ]

isequalto, isequal, equalto, igual, é, eq

Lógico E

nota igual a, nota igual, não é, não é, neq, ne

[ [+numbooks:isequalto=`5`:then=`Existem 5 livros!`:else=`Não tenho certeza de quantos livros`] ]

maior que ou igual a, igual ou maior que, ge, por exemplo, isgte, gte

[ [+numbooks:notequalto=`5`:then=`Não tenho certeza de quantos livros`:else=`Existem 5 livros!`] ]

Maior ou igual a

é maior que, maior que, isgt, gt

[ [+numbooks:gte=`5`:then=`Existem 5 livros ou mais de 5 livros`:else=`Existem menos de 5 livros`] ]

igual ou menor que, menor que igual a, el, le, islte, lte

[ [+numbooks:gt=`5`:then=`Existem mais de 5 livros`:else=`Existem menos de 5 livros`] ]

Menor ou igual a

é menor que, é menor que, menor que, menor que, islt, lt

[ [+numbooks:lte=`5`:then=`Existem 5 ou menos de 5 livros`:else=`Existem mais de 5 livros`] ]

[ [+numbooks:lt=`5`:then=`Existem menos de 5 livros`:else=`Existem mais de 5 livros`] ]

[ [+numbooks:lt=`1`:ocultar] ]

[ [+numbooks:gt=`0`:mostrar] ]

[ [+numbooks:gt=`0`:then=`Agora disponível!`] ]

membro de, ismembro, mo

[ [+numbooks:gt=`0`:then=`Agora disponível!`:else=`Desculpe, atualmente esgotado.`] ]

Modificadores de string:

Modificador

Descrição

Modificadores condicionais:

Se não estiver vazio

[ [+numbooks:cat=`livros`] ]

lcase, minúsculas, strtolower

Transformação para letras minúsculas

[[+título:lcase]]

ucase, maiúsculas, strtoupper

Transformação para letras maiúsculas

[[+título:caso]]

Capitalizar a primeira letra de uma palavra

[[+título:ucwords]]

A primeira letra é maiúscula

[[+nome:ucfirst]]

htmlent, htmlentidades

Substituindo tags HTML

[ [+e-mail:htmlent] ]

esc, escapar

Remove caracteres com segurança

[ [+e-mail:escape] ]

Substituindo retornos de carro, tabulações e vários espaços por um único espaço

[[+documento de texto:tira]]

stripString

Remove um valor de uma string

[ [+nome:stripString=`Sr.`] ]

Substituindo um valor

[ [+pagetitle:replace=`Sr.==Sra.`] ]

striptags, stripTags, notags, strip_tags

Remove Etiquetas HTML

[ [+código:strip_tags=`

len, comprimento, strlen

Comprimento da corda

[[+longstring:strlen]]

reverso, strev

Linha reversa

[ [+ texto espelho: reverso] ]

quebra de linha

Nova linha após o número especificado de caracteres

[ [+bodytext:wordwrap=`80`] ]

corte de texto

Insere um caractere de nova linha após um número especificado de caracteres.

[ [+bodytext:wordwrapcut=`80`] ]

Número de caracteres exibidos

[ [+descrição:limite=`50`] ]

reticências

Cortar uma linha após o número especificado de caracteres

[ [+descrição:reticências=`50`] ]

Exibe um elemento bruto sem uma tag:. Útil para documentação.

[ [+ mostrar isto: tag] ]

Se o valor puder ser alterado dinamicamente, ele deverá ser removido do cache. Por exemplo:

[ [+placeholder:default=`Um valor padrão!`] ]

Isso significa que o valor às vezes pode estar vazio e às vezes não. Por que armazená-lo em cache? Isso pode descartar que o valor possa aparecer.

Se você não tem certeza se o resultado será obtido ao executar o snippet, então é lógico definir um valor padrão:

[ [!getResources:default=`Desculpe - nada corresponde à sua pesquisa.`?

&tplFirst=`blogTpl` &parents=`2,3,4,8` &tvFilters=`blog_tags==%%` &includeTVs=`1`] ]

Sim, outra forma de implementar um filtro Ajax em um site =)

Vamos começar com uma simples exibição de uma lista regular de recursos na página. Certifique-se de garantir que a paginação AJAX funcione corretamente, pois não escreveremos nossos próprios mecanismos para trabalhar com AJAX, mas usaremos os métodos AJAX que estão em pdoPage.

("!pdoPage" | snippet: [ "ajaxMode" => "default", "parents" => 0, "limit" => 3, "includeTVs" => "height,weight,speed_type,price", "tvPrefix" => "", "tpl" => "@INLINE

($título da página)

Peso: ($peso)

Altura: ($altura)

", ]}
Tipo: ($speed_type)

("page.nav" | espaço reservado)


de 100.000 rublos.

$(document).on("change keyup", "#filters input", function())( // Verifica se pdoPage está conectado if (typeof(pdoPage) == "undefined") return; // Coleta os valores ​​de todos os filtros em array único var campos = (); $.each($("#filters").serializeArray(), function())( // Se o parâmetro não for um array (caixa de seleção), então tudo é simples if (this.name.indexOf( "")<= 0) { fields = this.value; } else { // Для чекбоксов посложнее var name = this.name.replace("",""); if (typeof(fields) == "undefined") { fields = ; } fields.push(this.value); } }); // И отправляем этот массив на сервер. $.post(document.location.href, { action: "filter", fields: fields, // Параметр hash - обязательный (он содержит настройки pdoPage) hash: pdoPage.configs.page.hash }, function(data) { // Просим pdoPage загрузить новый список ресурсов var tmp = document.location.href.split("?"); pdoPage.keys.page = 0; pdoPage.loadPage(tmp, pdoPage.configs.page); }); });
Já agora, ao alterar os valores do filtro, a lista de recursos será atualizada. Agora só falta “explicar” como processar os filtros. Para fazer isso, crie um plugin para o evento OnHandleRequest:

contexto->chave == "mgr" || vazio($_SERVER["HTTP_X_REQUESTED_WITH"]) || $_SERVER["HTTP_X_REQUESTED_WITH"] != "XMLHttpRequest") return; switch ($_POST["action"]) ( case "filter": $output = array("success" => false, "message" => ""); // Verifica se o hash foi recebido e os parâmetros pdoPage existe if ( isset($_POST["hash"]) && !empty($_POST["hash"]) && isset($_SESSION["pdoPage"][$_POST["hash"]]) && !empty($ _SESSION[" pdoPage"][$_POST["hash"]])) ( $hash = (string) $_POST["hash"]; // Especifique apenas TVs disponíveis para filtragem $tvs = array("height"," Weight" ,"speed_type" ); // Preencha a condição de seleção $where = array ($tvs as $tv) ( switch ($tv) ( case "price": // Exemplo de processamento de checkboxes if (isset($_POST) [ "campos"]["preço"]) && !empty($_POST["campos"]["preço"])) ( $where_price = ; foreach ($_POST["campos"]["preço"] como $ intervalo) ($valor = explodir("-", $intervalo); if (contagem($valor) != 2) (continuar; ) $min = (int) $valor; $max = (int) $valor; $ where_range = "CAST(`TVprice`.`value` AS DECIMAL(13,3)) >= " . if ($max) ( $where_range .= " AND CAST(`TVprice`.`value` AS DECIMAL (13.3))<= " . $max; } $where_price = "(" . $where_range . ")"; } $where = "(" . implode(" OR ", $where_price) . ")"; } break; default: if (isset($_POST["fields"][$tv]) && $_POST["fields"][$tv] !== "") { $where[$tv] = $_POST["fields"][$tv]; } break; } } // Добавляем это условие в параметры pdoPage "на лету" $_SESSION["pdoPage"][$hash]["where"] = $where; $output["message"] = $where; $output["success"] = true; } else { $output["message"] = "Error"; } echo $modx->toJSON($saída);
morrer(); quebrar; padrão: pausa; ) Agora nossos filtros estão funcionando. A única coisa é que o pdoPage "não sabe" o que mostrar quando nenhum resultado for encontrado. Para levar este caso em consideração, vamos criar um arquivo pdopage.custom.js e especifique-o no parâmetro:

frontend_js
("!pdoPage" | snippet: [ "ajaxMode" => "default", "frontend_js" => "/assets/components/pdotools/js/pdopage.custom.js", "parents" => 0, "limit" => 3, //...) outro No código padrão adicionaremos apenas a condição

// ... pdoPage.loadPage = function (href, config, mode) ( // ... $.post(config["connectorUrl"], params, function (response) ( if (response && resposta["total" ]) ( // ... ) else ( // Adicionar uma condição else wrapper.find(rows).html("Nada encontrado"); wrapper.find(pagination).html(""); wrapper.removeClass(" carregando"); wrapper.css((opacidade: 1)); if (config["mode"] == "default") ( $("html, body").animate((scrollTop: wrapper.position(). topo - 50 || 0), 0); // ...
Isso completa o filtro AJAX simples.

Neste artigo eu gostaria de falar sobre filtros (modificadores) em MODx.

Em princípio, você pode viver sem eles, mas sabendo como e onde são usados, o desenvolvedor recebe uma ferramenta poderosa com a qual você pode adicionar uma lógica pequena, mas às vezes muito útil, ao seu site.

Neste artigo falarei sobre Revolução MODx. A capacidade de aplicar filtros existe graças ao snippet PHx, que por padrão já vem integrado ao núcleo MODx Revolution, mas o PHx não está incluído no núcleo Evolution, portanto deve ser instalado separadamente no Evo.

Então, filtros permitem manipular dados obtidos como resultado da análise de espaços reservados e tags. Eles fornecem uma oportunidade modificar dados diretamente em seus modelos.

A sintaxe dos filtros é a seguinte:

É muito conveniente que eles possam ser organizados em cadeias:

Ao mesmo tempo, também é possível passar parâmetros para trechos. O principal é que o filtro seja escrito entre o nome do snippet e o ponto de interrogação:

A tabela a seguir lista alguns dos filtros e exemplo mostrando-lhes aplicativo. Embora os exemplos usem um espaço reservado, os filtros podem ser aplicados a qualquer tag MODx. Certifique-se de que o espaço reservado realmente retorne algo.

Modificadores condicionais

ModificadorDescriçãoModificadores condicionais:
ou Pode ser usado com modificadores de string para criar um relacionamento lógico AND
e Pode ser usado com modificadores de string para criar um relacionamento lógico "OR"
isequalto, isequal, equalto, igual, é, eq Compara a saída com o valor especificado e, se houver uma correspondência, continua analisando a tag. Usado em conjunto com "then" e "else" [[+numbooks:isequalto=`5`:then=`Existem 5 livros!`:else=`Não tenho certeza de quantos livros`]]
nota igual a, nota igual, não é, não é, neq, ne Compara a saída com o valor especificado e, se não corresponder, continua analisando a tag. Usado em conjunto com "then" e "else" [[+numbooks:notequalto=`5`:then=`Não tenho certeza de quantos livros`:else=`Existem 5 livros!`]]
maior que ou igual a, igual ou maior que, ge, por exemplo, isgte, gte

Compara a saída com o valor especificado e, se a saída for maior ou igual ao valor passado, continua a análise da tag. Usado em conjunto com "then" e "else"

[[+numbooks:gte=`5`:then=`Existem 5 livros ou mais de 5 livros`:else=`Existem menos de 5 livros`]]
é maior que, maior que, isgt, gt

Compara a saída com um determinado valor. Se a saída for maior, a análise continua. Usado com "then" e "else"

[[+numbooks:gt=`5`:then=`Existem mais de 5 livros`:else=`Existem menos de 5 livros`]]
igual ou menor que, menor que igual a, el, le, islte, lte Compara a saída com o valor especificado e, se a saída for menor ou igual ao valor passado, continua a análise da tag. Usado em conjunto com "then" e "else" [[+numbooks:lte=`5`:then=`Existem 5 ou menos de 5 livros`:else=`Existem mais de 5 livros`]]
é menor que, é menor que, menor que, menor que, islt, lt Compara a saída com um determinado valor. Se a saída for menor, a análise continua. Usado com "then" e "else" [[+numbooks:lte=`5`:then=`Menos de 5 livros`:else=`Mais de 5 livros`]]
esconder Verifica as condições anteriores. Se fossem verdadeiros, oculta o elemento. [[+numbooks:lt=`1`:ocultar]]
mostrar Verifica as condições anteriores. Se fossem verdadeiros, exibe o elemento. [[+numbooks:gt=`0`:mostrar]]
então Usado como consequência de alguma condição [[+numbooks:gt=`0`:then=`Já disponível!`]]
outro Usado como consequência de alguma condição. Usado em conjunto com "então" [[+numbooks:gt=`0`:then=`Agora disponível!`:else=`Desculpe, atualmente esgotado.`]]
membro de, ismembro, mo Retorna o resultado da verificação se um usuário pertence a um determinado grupo. [[+modx.user.id:memberof=`Administrador`]]

Modificadores de string

ModificadorDescriçãoModificadores condicionais:
gato Acrescenta a string especificada à saída se a saída não estiver vazia. [[+numbooks:cat=`livros`]]
lcase, minúsculas, strtolower Converte todos os caracteres de uma string em letras minúsculas. Idêntica à função PHP strtolower [[+título:lcase]]
ucase, maiúsculas, strtoupper Converte todos os caracteres de uma string em letras maiúsculas. Idêntica à função PHP strtoupper [[+título:caso]]
palavras-chave Converte as primeiras letras de todas as palavras de uma string em maiúsculas. Idêntica à função ucwords do PHP [[+título:ucwords]]
primeiro Converte a primeira letra de uma string em maiúscula. Idêntica à função PHP ucfirst [[+nome:ucfirst]]
htmlent, htmlentidades

Idêntica à função htmlentities do PHP. Usa o valor atual do parâmetro do sistema "modx_charset" com o sinalizador ENT_QUOTES

[[+e-mail:htmlent]]
esc, escapar Mnemoniza caracteres com segurança usando expressões regulares e str_replace. Também entende [,] e ` [[+e-mail:escape]]
tira Substitui todas as quebras de linha, tabulações e vários espaços por um único espaço. [[+documento de texto:tira]]
stripString Remove a substring especificada de uma string. [[+nome:stripString=`Sr.`]]
substituir Substitui uma substring por outra. [[+pagetitle:replace=`Sr.==Sra.`]]
striptags, stripTags, notags, strip_tags Remove todas as tags PHP e HTML, exceto aquelas especificadas. Idêntica à função strip_tags do PHP [[+código:strip_tags=`

`]]

len, comprimento, strlen Imprime o comprimento da string. Idêntica à função strlen do PHP [[+string longa:strlen]]
reverso, strev Idêntica à função PHP strrev [[+texto espelho:reverso]]
quebra de linha Idêntica à função wordwrap do PHP. Assume o valor ideal para definir a posição da quebra de linha. [[+bodytext:wordwrap=`80`]]
corte de texto Idêntica à função wordwrap do PHP com quebras de palavras. Assume o valor ideal para definir a posição da quebra de linha. [[+bodytext:wordwrapcut=`80`]]
limite Limita (trunca) o comprimento de uma string em um número especificado de caracteres. O limite de comprimento padrão é de 100 caracteres. [[+descrição:limite=`50`]]
reticências Corta uma string para o número especificado de caracteres e adiciona reticências. O limite padrão é 100 caracteres. [[+descrição:reticências=`50`]]
marcação Exibe o elemento chamado sem :tag. Útil para documentação, por exemplo, como a minha =) [[+ mostrar isto]]
matemática Retorna o resultado dos cálculos (não recomendado porque cria uma carga no processador)
adicionar, incrementar, aumentar Retorna um valor incrementado por um valor especificado (por padrão, por um) [[+downloads:incr]]
[[+blackjack:add=`21`]]
subtrair, decrementar, diminuir Diminui o valor especificado de um valor (padrão: -1) [[+contagem regressiva:decr]]
[[+dinheiro:subtrair=`100`]]
multiplique, mpy Retorna o resultado da multiplicação por um número (padrão: *2) [[+trifeta:mpy=`3`]]
dividir, dividir Retorna o resultado da divisão por um número (padrão: /2) 0 não é permitido. [[+classificação:div=`4`]]
módulo, mod Retorna o restante de uma divisão (Padrão: %2, retorna 0 ou 1) [[+número:mod]]
ifempty,padrão,vazio,isempty Retorna a string fornecida se a saída estiver vazia. [[+nome:default=`anônimo`]]
não está vazio,! vazio, se não está vazio, não está vazio Retorna a string fornecida se a saída não estiver vazia. [[+nome:notempty=`Olá [[+nome]]!`]]
nl2br Idêntica à função nl2br do PHP. Todas as quebras de linha são substituídas por
[[+arquivo de texto:nl2br]]
data Idêntica à função strftime do PHP. O formato é passado como um valor. Consulte Formatos de data. [[+ano de nascimento:data=`%Y`]]
strtotime Idêntica à função strtotime do PHP. Aplica-se apenas a datas. Consulte Formatos de data. [[+hora:strtotime]]
data difusa Retorna a data no formato "hoje às 13h40", "ontem às 18h40". [[+publicado em:fuzzydate]]
atrás Retorna o número de segundos, minutos, horas, semanas, etc. de uma data até o momento atual. Aplica-se apenas a datas [[+criado em:ago]]
md5 Idêntica à função PHP md5. [[+senha:md5]]
cdata Inclui uma string em tags CDATA. [[+conteúdo:cdata]]
informações do usuário Retorna os dados do usuário solicitados. Aplica-se ao ID do usuário no MODx. O modificador contém o campo que precisa ser retornado. [[+modx.user.id:userinfo=`nome de usuário`]]
está logado Retornará "true" se o usuário estiver autorizado neste contexto. [[+modx.user.id:isloggedin]]
não está logado Retorna "true" se o usuário estiver autorizado neste contexto [[+modx.user.id:isnotloggedin]]
código de url Idêntica à função PHP urlencode [[+minhastring:urlencode]]
código de url Idêntica à função PHP urldecode [[+meuparam:urldecode]]

Criando modificadores personalizados

Snippets podem ser usados ​​como modificadores. Para fazer isso, basta substituir o nome do filtro pelo nome do snippet. Por exemplo, temos um trecho chamado "makeDownloadLink"

[[+arquivo:makeDownloadLink=`notitle`]]

Esta chamada passará os seguintes parâmetros para o snippet:


O resultado será o que será retornado trecho.

Exemplos de uso

Aqui está um exemplo onde os filtros são chamados um após o outro. Este exemplo formata uma data de uma string para outro formato:

[[+minhadata:strtotime:data=`%Y-%m-%d`]]

O acesso direto à tabela modx_user_attributes do banco de dados do snippet pode ser substituído simplesmente usando o modificador userinfo. Para obter o campo obrigatório, você precisa passar o nome da coluna do banco de dados para os parâmetros modificadores.

Chave interna: [[!+modx.user.id:userinfo=`internalKey`]]

Nome de usuário: [[!+modx.user.id:userinfo=`nomedeusuário`]]

Nome completo: [[!+modx.user.id:userinfo=`nomecompleto`]]

Função: [[!+modx.user.id:userinfo=`role`]]

E-mail: [[!+modx.user.id:userinfo=`email`]]

Telefone: [[!+modx.user.id:userinfo=`phone`]]

Celular: [[!+modx.user.id:userinfo=`mobilephone`]]

Fax: [[!+modx.user.id:userinfo=`fax`]]

Data de nascimento: [[!+modx.user.id:userinfo=`dob`:date=`%Y-%m-%d`]]

Gênero: [[!+modx.user.id:userinfo=`gender`]]

País: [[+modx.user.id:userinfo=`país`]]

Região: [[+modx.user.id:userinfo=`state`]]

Código postal: [[+modx.user.id:userinfo=`zip`]]

Avatar: [[+modx.user.id:userinfo=`foto`]]

Saudações, amigos! Hoje aprenderemos como criar um filtro de recursos no MODx Revolution com a capacidade de classificar por qualquer campo de TV e carregar os resultados clicando em “Carregar mais”. Para exibir os resultados usaremos o snippet pdoResources.

Legal

Gaguejar

Baixe todos os trechos e arquivos de aulas necessários.

Primeiro você precisa instalar o pacote recursos pdo, que está incluído no pacote ferramentas pdo. Você pode instalar o conjunto completo de pacotes pdo (pdoTools) ou apenas pdoResources como um pacote separado para criar um filtro no MODx Revolution.

Após instalar os pacotes, vamos incluir o snippet que você baixou em seu projeto. Se você está desenvolvendo um diretório do zero, aconselho você a usar classes específicas para filtragem Ajax. Esquema de nomenclatura de classe:

Porém, se você já possui um diretório pronto, você pode definir as classes dos elementos do filtro Ajax no arquivo JS (veja abaixo).

Observe que .ajax-item deve ser descendente direto .ajax-container. Se você estiver usando a grade Bootstrap para layout de coluna, poderá definir a classe do contêiner como "linha ajax-container", e as colunas do item são como "col-md-4 item ajax".

Conectando o filtro Ajax do script JS

Vamos conectar o script JS ao projeto. Você pode conectá-lo como um arquivo separado ou diretamente no arquivo de scripts personalizados do projeto. O script requer jQuery para ser executado.

$(function() ( //MODx pdoResources Filtro Ajax //Configurações do filtro var fadeSpeed ​​​​= 200, // Fade Animation Speed ​​​​ajaxCountSelector = ".ajax-count", // Seletor CSS de itens Contador ajaxContainerSelector = ". ajax-container" , // Seletor CSS do contêiner Ajax ajaxItemSelector = ".ajax-item", // Seletor CSS do item Ajax ajaxFormSelector = ".ajax-form", // Seletor CSS do formulário de filtro Ajax ajaxFormButtonStart = ".ajax -start", // Seletor CSS de botão Iniciar filtragem ajaxFormButtonReset = ".ajax-reset", // Seletor CSS de redefinição de botão Formulário Ajax sortDownText = "Decrescente", sortUpText = "Ascendente"; function ajaxCount() ( if($ (" .ajax-filter-count").length) ( var count = $(".ajax-filter-count").data("count"); $(ajaxCountSelector).text(count); ) else ( $ (ajaxCountSelector ).text($(ajaxItemSelector).length); ajaxCount(); função ajaxMainFunction() ( $.ajax(( dados: $(ajaxFormSelector).serialize()).done(function(response) ( var $ resposta = $(resposta); $(ajaxContainerSelector).fadeOut(fadeSpeed);

  • Linhas 5-13: Definindo variáveis ​​para seletores de filtros CSS Ajax. Não alteramos se utilizarmos valores padrão, como na figura acima;
  • Linhas 15-22: script de contador de recursos na filtragem de resultados;
  • Linhas 24-35: principal função de filtragem do Ajax;
  • Linhas 37-49: manipulador de eventos para clicar no botão "Carregar mais";
  • Linhas 51-54: manipulador de eventos para clicar no botão "filtro". Este botão pode estar ausente, pois a filtragem ocorre automaticamente. A filtragem automática pode ser desativada removendo as linhas 68-70;
  • Linhas 56-66: manipulador de eventos para limpar o formulário e redefinir o filtro. As linhas 59-63 são responsáveis ​​por redefinir o agrupamento;
  • Linhas 68-70: função de classificação automática ao alterar os campos do formulário de filtro;
  • Linhas 72-82: função de classificação universal por parâmetro de TV.

Tentei tornar esse script o mais universal possível, portanto, se você usar seletores de elemento de filtro Ajax padrão, não precisará editar nada.

Conectando um snippet PHP ao MODx Revolution

Crie um novo snippet no painel de controle do MODx catálogoFiltro e preencha-o com o seguinte conteúdo:

=".$_GET["area_from"]; ) if($_GET["area_to"]) ( $filter = "area<=".$_GET["area_to"]; } //Checkbox Type if($_GET["garage"]) { $filter = "garage=1"; } //End Settings //Sort if($_GET["sortby"]) { $sortby = $_GET["sortby"]; } else { $sortby = "pagetitle"; } if($_GET["sortdir"]) { $sortdir = $_GET["sortdir"]; } else { $sortdir = "asc"; } //End Sort //Offset $offset = 0; if($_GET["offset"]){ $offset = $_GET["offset"]; } if($filter) { $where = $modx->toJSON(array($filtro)); ) else ( $where = ""; ) $params_count = array("parents" => $parents, "limit" => 0, "tpl" => "@INLINE ,", "select" => "id", "includeTVs" => $fields, "showHidden" => "1", "where" => $where); $count = $modx->runSnippet("pdoResources",$params_count); $contar = contar(explodir(",",$contar))-1; $modx->setPlaceholder("contagem",$contagem); $params = array("parents" => $parents, "limit" => $limit, "offset" => $offset, "tpl" => $tpl, "select" => "id,pagetitle,introtext,content ", "includeTVs" => $fields, "showHidden" => "1", "sortby" => $sortby, "sortdir" => $sortdir, "where" => $where); $mais = $contagem - $deslocamento - $limite; $lim = $mais > $limit ? $limite: $mais; $botão = ""; if($mais > 0)( $botão = "
Carregue mais ".$lim." de ".$mais."
"; ) return $modx->runSnippet("pdoResources",$params).$button;

Entre comentários //Configurações dos campos de filtro E //Finalizar configurações Existem parâmetros que você precisa editar para se adequar ao seu projeto. Não há nada complicado aqui, basta escrever o nome dos campos de entrada e verificá-los com uma condição if. Para campos como Radio, Select e Text, usamos o exemplo das linhas 5 a 8. Para determinar o valor intermediário de e para, você pode usar o exemplo das linhas 11 a 16. Para caixas de seleção, o exemplo das linhas 19 a 21 é adequado.

Na linha 74 do trecho você pode definir suas classes, mas não remova a marcação atual, pois ela é utilizada nos scripts de carregamento de conteúdo.

Exemplo de valores possíveis no painel de controle MODx para botões de opção: Primeiro==1||Segundo==2||Terceiro==3


Um exemplo de exibição de botões de opção no frontend:

Aqui está o nome nome="piso" corresponde às linhas 6-8 do nosso trecho catálogoFiltro. O processamento de outros campos do formulário é implementado de forma semelhante. Acho que isso é compreensível e criar seus próprios campos não será um problema para você.

O snippet é gerado no modelo de catálogo da seguinte maneira:

[[!catalogFilter?

  • &tpl=`tplCatItem` &limit=`3` &parents=`5` &fields=`imagem,área,piso,garagem,preço`]] tpl=`tplCatItem`
  • - item chunk na lista do catálogo; limite=`3`
  • - Quantos registros exibir e quantos registros carregar ao clicar no botão “Carregar mais”; pais=`5`
  • - indique o id do documento pai do catálogo de recursos; campos=`imagem,área,andar,garagem,preço`

- liste as TVs que precisam ser mostradas no bloco tplCatItem e que precisam ser processadas durante a filtragem. Exemplo de pedaço

tplCatItem

[[+tv.floor]] `]]
[[+título da página]] Chão
[[+tv.area:isnot=``:então=` Quadrado
[[+área de tv]] m² Garagem
[[+tv.garage:is=`1`:then=`Sim`:else=`Não`]] Preço:

Você pode ver um exemplo complexo de saída para o frontend no repositório do projeto no Github no arquivo demonstração.html.

Classificação Ajax por TV

Nosso script possui uma solução pronta para classificar os resultados da filtragem por qualquer campo de TV. Insira os seguintes campos ocultos no formulário de filtro e não altere seu valor, eles só precisam estar no formulário de filtro:

Em qualquer lugar do seu modelo HTML, crie uma saída de botão e no atributo data especifique o campo pelo qual deseja filtrar os resultados:

Ordenar por preço: Crescente

Quando clicado, a classe é alternada botão-classificar-asc, que você pode usar para criar um botão ao alterar a direção de classificação, adicionar setas, etc. classificação de dados por Você pode gravar qualquer TV que participe da filtragem. Isso é tudo com classificação.

Então, analisamos a criação de um filtro de recurso Ajax simples no MODx com a saída dos resultados em um snippet recursos pdo.



gastroguru 2017