Escolha dos leitores
Artigos populares
Os filtros no Revolution permitem manipular como certas tags são processadas. Eles permitem que você altere valores diretamente em seus modelos.
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.
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):
[]
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.
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`]] |
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.
Se uma tag tiver parâmetros, eles deverão ser escritos imediatamente após o modificador:
[[!getResources:default=`Desculpe, nada encontrado`?
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 =)
("page.nav" | espaço reservado)
$(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.
Modificador | Descrição | Modificadores 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`]] |
Modificador | Descrição | Modificadores 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]] |
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.
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".
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);
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.
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 = "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?
- liste as TVs que precisam ser mostradas no bloco tplCatItem e que precisam ser processadas durante a filtragem. Exemplo de pedaço
[[+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.
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.
Artigos relacionados: | |
Instruções para instalar e usar o disco Yandex e o programa de bônus para capturas de tela
Como instalar o disco Yandex e para que serve? Cada vez mais pessoas com... USB: tipos de conectores e cabos para smartphone
Olá, queridos leitores! Muitas pessoas muitas vezes têm um problema: não... O que significa que este tipo de comunicação não está disponível para assinantes do MTS? Por que eles não conseguem, mas eu consigo?
Toda pessoa já experimentou o fato de que ao ligar para alguém ouviu um robô:... |