Esta función, colocada en el archivo mes_fonctions.php3 añade un nuevo criterio de selección utilizable en cualquier bucle que tenga contexto de fecha. El nuevo criterio joursemaine toma un parámetro numérico, entre 0 y 6 que indica el día de la semana a seleccionar (0=Domingo 6=Sábado).
Por ejemplo, para tener todos los artículos publicados un Lunes lluvioso ;), se utilizará un bucle :
<BOUCLE_lunes(ARTICLES) {joursemaine 1}>
#TITRE
</BOUCLE_lunes>
El código
function critere_joursemaine($idb, &$boucles, $crit) {
global $table_date;
$boucle = &$boucles[$idb];
$date = $table_date[$boucle->type_requete];
$date = $boucle->id_table . ".$date";
if(!$crit->param[0]) {$jour = "'0'";}
else
$jour = calculer_liste($crit->param[0], array(), $boucles, $boucle->id_parent);
$boucle->where[] = "DATE_FORMAT($date, '%w') ".(($crit->not)?'!=':'=')." \".(($jour != '')?$jour:'0').\"";
}
Algunas explicaciones
- Es necesario encontrar el bucle antes de agregarle una limitación (where) :
$boucle = &$boucles[$idb];
($boucles
es la tabla de todos los bucles presentes en la página y$idb
el nombre del bucle actual)
- Es necesario encontrar también la columna correcta de fecha, en función del tipo del bucle que sea, así pues :
$table_date[$boucle->type_requete];
que devuelve la columna de fecha para el tipo de bucle en cuestión.
- A continuación, se debe decir a qué tabla se hace referencia :
$date = $boucle->id_table . ".$date";
- Se calcula el valor del parámetro
if(!$crit->param[0]) { $jour = 0; } else $jour = calculer_liste($crit->param[0], array(), $boucles, $boucle->id_parent);
-
- Si no se pasa un criterio, se toma 0 (domingo) por defecto
- Si no, se « calcula » el criterio, así se puede pasar una baliza como parámetro si se quiere.
- Se construye la sentencia where de sql y se tiene en cuenta el not para invertir el criterio en caso de que esté presente el criterio inverse
- Probablemente, si se pasa una baliza como parámetro, el valor devuelto sea vacío. No se puede saber eso antes de haber calculado esta baliza, es necesario pues hacer la prueba :
(($jour != '')?$jour:'0')
que se evaluará en el último momento, cuando se conozca el valor de la baliza
Un ejemplo de utilización
Se puede ver un ejemplo de utilización en esta página del bloc de notas de desordre.net que construye una semana compuesta aleatoriamente a partir de 7 bucles del tipo
(ARTICLES){0,1}{par hasard}{joursemaine X}
Aucune discussion
Ajouter un commentaire
Avant de faire part d’un problème sur un plugin X, merci de lire ce qui suit :
Merci d’avance pour les personnes qui vous aideront !
Par ailleurs, n’oubliez pas que les contributeurs et contributrices ont une vie en dehors de SPIP.
Suivre les commentaires : |