
Recherche avancée
Autres articles (70)
-
Le profil des utilisateurs
12 avril 2011, parChaque utilisateur dispose d’une page de profil lui permettant de modifier ses informations personnelle. Dans le menu de haut de page par défaut, un élément de menu est automatiquement créé à l’initialisation de MediaSPIP, visible uniquement si le visiteur est identifié sur le site.
L’utilisateur a accès à la modification de profil depuis sa page auteur, un lien dans la navigation "Modifier votre profil" est (...) -
Configurer la prise en compte des langues
15 novembre 2010, parAccéder à la configuration et ajouter des langues prises en compte
Afin de configurer la prise en compte de nouvelles langues, il est nécessaire de se rendre dans la partie "Administrer" du site.
De là, dans le menu de navigation, vous pouvez accéder à une partie "Gestion des langues" permettant d’activer la prise en compte de nouvelles langues.
Chaque nouvelle langue ajoutée reste désactivable tant qu’aucun objet n’est créé dans cette langue. Dans ce cas, elle devient grisée dans la configuration et (...) -
Sélection de projets utilisant MediaSPIP
29 avril 2011, parLes exemples cités ci-dessous sont des éléments représentatifs d’usages spécifiques de MediaSPIP pour certains projets.
Vous pensez avoir un site "remarquable" réalisé avec MediaSPIP ? Faites le nous savoir ici.
Ferme MediaSPIP @ Infini
L’Association Infini développe des activités d’accueil, de point d’accès internet, de formation, de conduite de projets innovants dans le domaine des Technologies de l’Information et de la Communication, et l’hébergement de sites. Elle joue en la matière un rôle unique (...)
Sur d’autres sites (7622)
-
Révision 23396 : Ticket #3819 : Permettre d’indiquer comme dépendance d’un plugin une extension PH...
7 février 2017, par marcimat@rezo.netPour cela, comme on le fait déjà pour la version de PHP, on ajoute chaqque extension PHP chargée
dans les éléments procurés par le simili plugin ’SPIP’, sous la clé "php :nom de l’extension".Ainsi il est possible d’écrire dans un paquet.xml :
```
```Attention certaines extensions n’ont pas de numéro de version. Vérifier avec `php_version(’nom extension’)`.
Il faut adapter les messages de langue cependant pour éviter de dire qu’un plugin PHP:CURL est absent,
et du coup il y a quelques chaînes de langues en plus.Il va falloir également adapter les chaînes de langue du plugin SVP.
-
aarch64 : Add missing sign extension in ff_h264_idct8_add_neon
30 septembre 2016, par Martin Storsjö -
Evolution #3801 (Nouveau) : Filtrage des boucles DATA selon des contenus divers, et extension des ...
2 juillet 2016, par marcimat ☺☮☯♫Je suis tombé sur un cas de boucle DATA qui m’a ennuyé car le filtrage que je souhaitais n’était pas directement possible actuellement avec les critères dont on dispose.
Soit le tableau, disons
#TAB
suivant :$tab = [ [ ’id’ => 1, ’mots’ => [ 11, 120, 53 ]], [ ’id’ => 2, ’mots’ => [ 32, 11, 20 ]], [ ’id’ => 3, ’mots’ => [ 11, 78, 34 ]], [ ’id’ => 4, ’mots’ => [ 120, 26, 91 ]], ] ;
Je souhaitais boucler sur les éléments ayant le mot 11 par exemple, dans la clé ’mots’.
De base la boucle serait :#ID
Il faudrait ajouter un critère pour restreindre aux seuls éléments contenant le mot 11, mais
{mots = 11}
ne va pas, ni{mots IN 11}
vu que c’est le champ "mots" qui est un tableau.
On pourrait imaginer pouvoir écrire{11 IN mots}
qui serait probablement plus clair, mais ce n’est pas permis.Il n’y a actuellement pas moyen de réaliser ce filtre, ni d’étendre simplement les filtres à appliquer.
On propose ici de réfléchir à éventuellement permettre l’extension de ces tests de validation en fonction des contenus, ce qui s’apparente à ajouter quelque chose dans le WHERE en SQL, mais pour les itérateurs, c’est plutôt ajouter une contrainte sur la méthode
valid()
. Les critères tel que{id=3}
ajoutent déjà des contraintes, même{chemin/du/tableau > 5}
fonctionne.Une idée serait d’ajouter un critère
{filtre NN}
ou{valider NN}
et de définir une fonctionNN()
dans son code (mes_fonctions.php par exemple) qui recevrait la clé et la valeur en cours de validation et retournerait true ou false pour indiquer si cette entrée est acceptée ou pas. La fonction à créer serait au minimum doncNN($cle, $valeur) { return true; }
On pourrait transmettre des paramètres supplémentaires, tel que
{filtre nom, p1, p2}
qui arriveraient dans un tableau d’arguments en 3è paramètre :NN($cle, $valeur, $args)
.Voici un diff qui permet :
1) de prendre en compte `$command[’filtres’]` dans les itérateurs. Chaque entrée de ce tableau est un tableau décrivant 1 filtre, avec comme premier élément le nom de la fonction à appeler, et les suivants les éventuels arguments.
2) de déclarer un critère `filtre` sur les boucles DATA qui remplissent ce tableau de filtres
3) de montrer un exemple d’un filtre (mal nommé) ’contient’ avec 2 argumentsIndex : public/iterateur.php ===================================================================
— - public/iterateur.php (revision 23091) +++ public/iterateur.php (working copy) @@ -300,6 +300,18 @@ $this->limit = $limit[1] ;+ // filtres explicites filtre nom_fonction, param, param
+ if (!empty($this->command[’filtres’]))
+ foreach ($this->command[’filtres’] as $args)
+ $nom = array_shift($args) ;
+ if (function_exists($nom))
+ $this->filtre[] = $nom . ’( $me->key(), $me->current(), ’ . var_export($args, true) . ’)’ ;
+ else
+ spip_log("Filtre d’itérateur non connu : " . (string)$filtre) ; // [todo] mettre une erreur de squelette
+
+
+
+/**
* Compile le critère `filtre` d’une boucle DATA
*
* @syntaxe `filtre nom, [arg1, [arg2, [...]]]`
* @example `filtre contient, mots, 3`
*
* @param string $idb Identifiant de la boucle
* @param array $boucles AST du squelette
* @param Critere $crit Paramètres du critère dans cette boucle
*/
function critere_DATA_filtre_dist($idb, &$boucles, $crit)
$boucle = &$boucles[$idb] ;
// créer le tableau de tous filtres de la boucle
$boucle->hash .= "\n\tif (!isset(\$filtres_init)) \$command[’filtres’] = array() ; \$filtres_init = true ; \n" ;
// créer le tableau de ce filtre
$boucle->hash .= "\t\$i = count(\$command[’filtres’]) ; \$command[’filtres’][\$i] = array() ;\n" ;
// ajouter les arguments du filtre
foreach ($crit->param as $param)
$boucle->hash .= "\t" . ’$command[\’filtres\’][$i][] = ’ . calculer_liste($param, array(), $boucles, $boucles[$idb]->id_parent) . " ;\n" ;
/**
* Conserve les éléments de la boucle dont le chemin indiqué contient une certaine valeur
* sous entendu que ce chemin pointe sur une liste de valeurs possibles
*
* @syntaxe `filtre contient, chemin, val`
* @example `filtre contient, mots, 3`
*
* - chemin : est un parcours qui sera fait dans le tableau $valeurs,
* chaque / entrant dans un sous élément @see table_valeur()
* - val : est une valeur à trouver dans le tableau retrouvé du chemin indiqué
* dans l’exemple le chemin ’mots’ retourne pour une entrée une liste tel que `array(12, 31, 21)`
*
* @param int|string $cle Clé analysée
* @param mixed $valeur Valeur analysée
* @param array $args Arguments passés au filtre
* @return bool True pour accepter cette entrée, false sinon.
**/
function contient($cle, $valeur, $args)
if (count($args) != 2)
return false ;
list($chemin, $val) = $args ;
if ($valeurs = table_valeur($valeur, $chemin))
return in_array($val, $valeurs) ;
return false ;
Et un exemple d’utilisation en squelettes
Test
#SETobjets,#LISTE
#SETobjets,#GETobjets|push#ARRAYid,1,mots,#LISTE10,11,12#SETobjets,#GETobjets|push#ARRAYid,2,mots,#LISTE30,31,32
#SETobjets,#GETobjets|push#ARRAYid,3,mots,#LISTE50,51,52
#SETobjets,#GETobjets|push#ARRAYid,4,mots,#LISTE32,11
#SETobjets,#GETobjets|push#ARRAYid,5,mots,#LISTE52,10
#SETid,32
#ID
À réfléchir…