O critério where aceita um único argumento, que é a parte condicional de uma consulta (My)SQL. O SPIP usa esse valor em combinação com os outros elementos de condições provenientes dos outros critérios do loop.
Exemplos
O critério where permite realizar OR:
<BOUCLE_ou(ARTICLES){statut=redac}{where id_rubrique=10 OR id_rubrique=20}>
Permite chamar funções MySQL:
<BOUCLE_ou(ARTICLES){where YEAR(date_creation) > 1970}>
Permite fazer subconsultas (aqui, no plugin info_site
):
{where id_organisation IN (SELECT id_objet FROM spip_projets_liens WHERE objet='organisation' AND id_projet=#ID_PROJET)}
O critério where permite usar uma condição onde os 2 termos do teste são campos da tabela: queremos encontrar as matérias do mesmo id_rubrique e id_secteur
<BOUCLE_where(ARTICLES){where id_rubrique = id_secteur}>
Note que teria sido possível prescindir do where em todos estes casos:
- com {id_rubrique IN #LISTE{10,20}}
- com {date_creation>1970-01-01}
- com uma junção no loop SPIP
- com um loop envolvente
Preparação da condição
Quando há uma vírgula na expressão where, frequentemente por causa de uma chamada a uma função MySQL, é preciso incluir a condição numa tag #VAL
.
Exemplo:
{where #VAL{"DATE_ADD(date_debut,INTERVAL 2 WEEK)<date_fin"}}
Quando as condições são ainda mais complexas, é preciso preparar a consulta num #SET
:
#SET{where,aqui cálculo complexo}
<BOUCLE_articles_racine(ARTICLES) {...}{where #GET{where}}>
Critério where condicional
O critério permite também usar o valor de where
passado no ambiente, se existir: {where?}