130 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			130 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| # nulib-base
 | |
| 
 | |
| * [nulib\schema](src/schema/TODO.md)
 | |
| * [nulib\cache](src/cache/TODO.md)
 | |
| * [nulib\app\cli](src/app/cli/TODO.md)
 | |
| 
 | |
| ## Vrac
 | |
| 
 | |
| * classe de base `profile_manager` qui permet de gérer des profils
 | |
| * class Tool permettant d'appliquer un traitement à une valeur scalaire
 | |
|   * ArrayTool permet d'appliquer les traitement à tous les éléments du tableau
 | |
|   * les traitements sont une suite d'opérations à faire, ou de filtres à
 | |
|     appliquer, qui ne sont appliqués que lors du parcours effectif de la liste
 | |
|   * exemple
 | |
|     ```php
 | |
|     $result = ArrayTool::with($source)
 | |
|       ->filterKey("key")
 | |
|       ->filter("value")
 | |
|       ->add("value", "key")
 | |
|       ->addAll($iterable)
 | |
|       ->all();
 | |
|     ```
 | |
|     déterminer le genre de traitements que l'on peut offrir
 | |
| * syntaxe pour CTable: définition des en-têtes et des valeurs des colonnes dans
 | |
|   la même expression
 | |
|   ~~~php
 | |
|   new CTable($rows, [
 | |
|     "contents" => [
 | |
|       ## champ
 | |
|       ["Nom", "nom"],
 | |
|       ["Prénom", "prenom"],
 | |
|       ## fonction
 | |
|       ["Age", function(Cursor $cursor) {
 | |
|         return (new Date())->diff($cursor->row["date_naissance"]);
 | |
|       }],
 | |
|       ## Pas de contenu
 | |
|       ["Vide", null],
 | |
|       ## Contenu dynamique
 | |
|       ["Contenu", [
 | |
|         "before",
 | |
|         v::span("hello"),
 | |
|         Cursor::dyn("name"),
 | |
|         "after",
 | |
|         Cursor::dyn(function(Cursor $cursor) {
 | |
|           return $cursor["surname"];
 | |
|         }),
 | |
|       ]],
 | |
|       ## colspan
 | |
|       ["First",
 | |
|         function() { return "sur deux colonnes"; },
 | |
| 	      "colspan" => 2,
 | |
|       ],
 | |
|       ["Second", null],
 | |
|       ## colspan dynamique
 | |
|       # la valeur de Element n'est évaluée que si colspan==null
 | |
|       ["Groupe", function(Cursor $row) {
 | |
|         $break = $breaker->shouldBreakOn($row["code_groupe"]));
 | |
|         if ($break) {
 | |
|           $row->set("colspan", 2);
 | |
|           return "{$row["code_groupe"]} {$row["libelle_groupe"]}";
 | |
|         } else {
 | |
|           $row->set("colspan", null);
 | |
|           return null;
 | |
|         }
 | |
|       }, "colspan" => function(Cursor $row) {
 | |
|         return $row->get("colspan");
 | |
|       }],
 | |
|       ["Element", function(Cursor $row) {
 | |
|         return $row["libelle_element"];
 | |
|       }]
 | |
|     ],
 | |
|   ]);
 | |
|   ~~~
 | |
|   bien entendu, bien que ce ne soit pas démontré ici, le premier argument
 | |
|   (l'en-tête) est un contenu, pas seulement une chaine
 | |
| 
 | |
|   chaque élément de contenu défini header, body et footer
 | |
|   ~~~php
 | |
|   $element = ["header" => [], "body" => [], "footer" => []];
 | |
|   ~~~
 | |
| 
 | |
|   colspan peut être utilisé dans header, body ou footer. si spécifié dans
 | |
|   $element, colspan s'applique à body
 | |
|   ~~~php
 | |
|   # les deux suivants sont équivalents
 | |
|   $element = ["myheader", "mybody", "colspan" => 2, "myfooter"];
 | |
|   $element = [
 | |
|     "header" => [
 | |
|       "content" => "myheader",
 | |
|     ],
 | |
|     "body" => [
 | |
|       "content" => "mybody",
 | |
|       "colspan" => 2,
 | |
|     ],
 | |
|     "footer" => [
 | |
|       "content" => "myfooter",
 | |
|     ],
 | |
|   ];
 | |
|   ~~~
 | |
| 
 | |
|   si $element est une fonction, il retourne la valeur de l'élement
 | |
|   ~~~php
 | |
|   $element = function() {
 | |
|     return ["header", "body"];
 | |
|   }
 | |
|   ~~~
 | |
| 
 | |
|   clé "enabled" permet d'activer dynamiquement un élément
 | |
|   ~~~php
 | |
|   $element = function() {
 | |
|     return ["header", "body", "enabled" => $includeElement];
 | |
|   }
 | |
|   ~~~
 | |
| 
 | |
|   clé "func" pour spécifier la fonction dans un contexte statique
 | |
|   ~~~php
 | |
|   $element = ["func" => [My::class, "get_element"]];
 | |
|   ~~~
 | |
|   func n'est considéré que si $element était un tableau à la base
 | |
|   s'il y a d'autres clés, elles sont fusionnées avec le résultat de $func()
 | |
|   (dont les clés sont prioritaires)
 | |
| 
 | |
| * Cursor::dyn permet d'insérer une valeur qui sera évaluée plus tard lors de la
 | |
|   résolution du contenu
 | |
| * pour Cursor, CTable, etc., un paramètre "params_func" permet de générer une
 | |
|   partie des paramètres de façon dynamique.
 | |
|   c'est juste du sucre, c'est strictement équivalent à construire le tableau
 | |
|   des paramètres avant d'instancier l'objet.
 | |
| 
 | |
| -*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8:noeol:binary |