No description
Find a file
2022-11-08 08:25:50 +01:00
action pas de slash dans le nom d'un fichier sinon ca plante 2022-09-29 21:52:41 +02:00
css maj css suite maj gulp 2022-09-27 11:28:29 +02:00
formulaires ajout d'une option de config pour selectionner la version de vue, par defaut vue.min.js 2020-03-10 22:07:22 +01:00
img * image de tri des cols : on n'utilise plus fontawesome mais des icones 2020-08-19 10:11:18 +02:00
inc pour les pdfs, on passe par une action afin de pouvoir avoir tous les 2022-09-27 15:01:52 +02:00
inclure export pdf : Il faut pouvoir passer des arg au chargement du gamutable, cf doc 2022-09-27 16:35:30 +02:00
js correction du search dans le select 2022-11-08 08:25:50 +01:00
lang recup des fichiers gamutable de souscriptions 2020-03-10 16:59:10 +01:00
prive sorti de la fabrique 2020-03-10 16:11:01 +01:00
svg * image de tri des cols : on n'utilise plus fontawesome mais des icones 2020-08-19 10:11:18 +02:00
.gitignore la recherche devient insensible à la casse 2020-05-06 23:37:47 +02:00
gamutable_autorisations.php pour les pdfs, on passe par une action afin de pouvoir avoir tous les 2022-09-27 15:01:52 +02:00
gamutable_fonctions.php pour les pdfs, on passe par une action afin de pouvoir avoir tous les 2022-09-27 15:01:52 +02:00
gamutable_options.php Pour CYRILLE, var_mode=gamutable compatible minibando 2020-07-22 22:23:31 +02:00
gamutable_pipelines.php correction si on utilise les crayons sans gamutable 2022-05-23 17:16:12 +02:00
gulpfile.js maj gulp 2022-09-27 11:27:55 +02:00
json_gamutable.json.html Nouvelle fonctionnalite, dans le json on peut definir l'ordre de tri 2022-04-26 10:09:16 +02:00
localforage.min.js Utilisation de la lib localforage pour pouvoir stocker en indexedDB et 2021-10-13 21:49:21 +02:00
package-lock.json maj gulp 2022-09-27 11:27:55 +02:00
package.json maj gulp 2022-09-27 11:27:55 +02:00
paquet.xml ajout de la gestion des col en checkbox 2022-10-13 12:49:42 +02:00
README.md On gere correctement l'envoi du json complet ou seulement ce qui est 2022-09-27 21:11:34 +02:00

gamutable

Stockage

On utilise maintenant la lib localforage : https://localforage.github.io/localForage/ Dans cette nouvelle version, on découpe le stockage en 2:

  • le header en localstorage avec la cle prefixe par header_ afin d'éviter les pb avec les anciens stockages
  • le table est stocké via localforage : en indexedb et async

Configuration

Choisir entre la version minifiée de vuejs (sans le debug) ou la version de dev

PHP dans php.ini

  • post_max_size which is directly related to the POST size
  • upload_max_filesize which may be unrelated, not sure
  • max_input_time, if the POSt takes too long
  • max_input_nesting_level if your data is an array with a lot of sublevels
  • max_execution_time, but quite sure its not that
  • memory_limit, as you may reach a size exceding the subprocess allowed memory
  • max_input_vars, if your data array has many elements => le plus important

Utilisation

  • charger l'inclure (5 args possibles et facultatifs)
<INCLURE{fond=inclure/gamutable,env}>

 Ou avec tous les arguments facultatifs

[(#SET{pdfuri,#URL_PAGE{spipdf}
	|parametre_url{spipdf,mon_fichier_pdf}
	|parametre_url{nom_fichier,mon_nom_de_fichier_pdf}
})]
<INCLURE{fond=inclure/gamutable,
	apiuri="spip.php?page=json_souscripteurs.json",
	namepdf="resultats_epreuve_type-1",
	fichierpdf="resultats_epreuve_type-1", // obligatoire si on veut pouvoir afficher
	argpdf="#ENV{argpdf}"
	tparpage=[15,25,50,'Tous'],
	champcsv="search",
	delimitercsv=";",
	urlvuebloc=spip.php?page=mon_bloc_type_html,
	vueblocdefaut='bloc ou tableau', // par defaut tableau
	namecsv="souscripteurs.csv",
	url_sort_asc="#CHEMIN{...}",
	url_sort_desc="#CHEMIN{...}",
	stockage="indexeddb", // par defaut : localstorage
	includespip="#ENV{includespip}", // pour ajouter un code html dans la ligne au dessus du tableau
	nomBlocAjaxReload="nom bloc a recharger à la fin du chargement des donnees",
	filtrerselect=[(#ENV{filtrerselect})],
	env
}>

[(#SET{filtrerselect,#ARRAY{
	0,#ARRAY{champ,secteur,valeurs,#LISTE{Le chat}},
	1,#ARRAY{champ,voie,valeurs,#LISTE{Turlut, man}}
	}|json_encode|rawurlencode})]
<a class="btn" href="[(#URL_PAGE{gestionnaire_voies}|parametre_url{filtrerselect,#GET{filtrerselect}})]"> aaaa </a>
  • url_sort_asc et url_sort_desc => surcharge possible des icones de tri de colonnes

Personnalisation du contenu : surcharger json_gamutable.json.html en suivant son modele

  • pour le header c'est de la forme : "champ":"label"
  • IMPORTANT pour le content du json, il que le cle de la KEY de la table soit "id" et non pas "id_souscription"
  • pour les champs date, pour avoir l'ordre de la col, il faut le format : dd/mm/yyyy ou dd/mm/yy
  • on peut ajouter une clé classes pour ajouter des classes spécifiques à certaines colonnes
"classes":{
	"nom": "toto",
	"email":"toto"
}
  • On peut ajouter des filtres par colonne soit avec un select soit avec un input
"filtreCol" : {
	"statut" : "select",
	"nom": "select",
	"prenom": "input"
}
  • On peut ajouter des ordre de tri par colonne : asc ou desc
"ordreCol" : {
	"nom" : "desc"
}

Utiliser les actions :

[(#SET{statut,
	#SET{args,#ID_SOUSCRIPTION|concat{-}|concat{#STATUT}}
	<a class="url_action" data-id="#ID_SOUSCRIPTION" href="[(#URL_ACTION_AUTEUR{changer_statut_souscription,#GET{args}})]">
		[(#STATUT|!={publie}|oui)
			<i title="Souscription en attente" class="fa fa-check fa-2x orange" aria-hidden="true"></i>
		]
		[(#STATUT|=={publie}|oui)
			<i title="Souscription validée" class="fa fa-check fa-2x verte" aria-hidden="true"></i>
		]
	</a>
})]
"statut" : [(#GET{statut}|json_encode)],
  • il faut ajouter data-confirm="Confirmez vous ..." si on veut ajouter un popin de confirmation
  • il faut ajouter data-id="" si on veut recharger que cette ligne
  • si une variable du nom de nomBlocAjaxReload est définie (ou un data-ajaxreload), alors, un ajaxReload de ce bloc sera joué dans la fonctione de callback de l'action

Utiliser les crayons :

[{
"header":{
"id": "ID",
"activite": "Activité",
"massif": "Massif",
"sommet": "Sommet",
"voie": "Voie",
"participants_max": "Participants max",
"tarif_prive": "Prix"
},
"crayons":{
	"tarif_prive" : "activite"
}

Dans cet exemple :

  • activite est le raccourci du nom de la table (spip_activites)
  • tarif_prive est obligatoirement l'intitulé du champs dans cette table (si besoin il faut modifier la clé du champ...)

Caches

l'invalidation du cache ne se fait que pour les objets publiés Les Crayons utilisent l'api modifier_objet de SPIP qui invalide le cache que si objet est publie, il faut donc forcer l'invalidation du cache en passant pour le pipeline post_edition

/**
 * invalider le cache pour l'objet souscription
 *
 */
function prefixPlugin_post_edition($flux){
	if ($flux['args']['table'] === "spip_souscriptions") {
		include_spip('inc/invalideur');
		suivre_invalideur("id='id_souscription/1'");
	}
	return $flux;
}

Autorisations

Il faut surcharger cette autorisation : autoriser_crayonner_dist() inc/crayons

@Deprecated

=> integre par default dans la 3.4.2 pour tous les objets

  • il faut utiliser le pipeline crayons_vue_affichage_final
/**
 * injection du reload de vuejs pour les crayons de l'objet souscription
 *
 */
function prefixPlugin_crayons_vue_affichage_final($flux){
	if ($flux['args']['type'] === 'souscription') {
		$id = $flux['args']['id'];
		if ($id = intval($id)) {
			$flux['data'] .= ' <script type="text/javascript"> app.rechargerJson('.$id.'); </script>';
		} else {
			$flux['data'] .= ' <script type="text/javascript"> app.rechargerJson(); </script>';
		}
	}
	return $flux;
}

Utiliser une mediabox ou modalbox :

  • pour rechargement total/partiel de la page: on peut demander à vuejs de recharger tout le json ou simplement une ligne dans le cas d'une modification
    1. Dans le json : ajouter un lien avec la classe mediabox ou modalbox (cf ex de json)
    "modif" : [(#VAL{<a class="modalbox" href="[(#URL_PAGE{souscrire}|parametre_url{id_souscription,#ID_SOUSCRIPTION}|parametre_url{redirect,gamutable})]"><i class="fa fa-pencil"></i></a>}|json_encode)],
    
    1. On charge en ajax le formulaire en l'englobant d'une div avec la classe ajax (du pur spip)
    2. Dans le traiter du formulaire => supprimer la redirection et on ajoute :
    if ($retour === 'gamutable') {
    	$res['redirect'] = "";
    	// pour recharger que la ligne $id_patate du tableau
    	$res['message_ok'] = gamutable_fermer_modalbox($id_patate);
    	// ou si on veut recharger tout le tableau
    	$res['message_ok'] = gamutable_fermer_modalbox();
    }
    
  • Ajouter data-confirm="Confirmez vous ..." si on veut ajouter une popin de confirmation

Utiliser deux Gamutables dans la même page :

  • créer les 2 apiuri dans l'#ENV : apiuri et apiuri_deux
  • tous les paramètres envoyés a inclure/gamutable peuvent êtres "dédoublés" avec le suffixe _deux
  • pour personnaliser le contenu entre les 2 gamutables on peut surcharger inclure/separateur_gamutables
  • Exemple :
<div class="tableau_resas">
	#SET{s,#VAL{spip.php?page=json_resas.json}}
	[(#ENV{statut}|oui)
		[(#SET{s,#GET{s}|concat{&statut=}|concat{#ENV{statut}}})]
	]
	#SET{t,#VAL{spip.php?page=json_totaux.json}}
	[(#SET{t,#GET{t}|concat{&saison=}|concat{#ENV{saison,#DATE|affdate{Y}}}})]
	<INCLURE{fond=inclure/gamutable,
		titregamutable="Le premier gamutable",
		titregamutable_deux="Le deuxieme gamutable",
		apiuri=#GET{s},
		apiuri_deux=#GET{t},
		tparpage=[15,25,50,'Tous'],
		tparpage_deux=[20,50,'Tous'],
		champcsv="search",
		champcsv_deux="search",
		delimitercsv=";",
		delimitercsv_deux=";",
		namecsv="premier.csv",
		namecsv_deux="deuxieme.csv",
		id_gamutable="id_premier",
		id_gamutable_deux="id_deuxieme",
		env
	}>
</div>

URLs avec filtrage :

Concatener le filtrage dans l'url d'appel du json :

 http://guides.spip/?page=grille_tarifs&activite=Alpinisme

ou

<a class="btn" href="[(#URL_PAGE{commandes}|parametre_url{annee,2021})]">2021</a>

Refs

https://unpkg.com/browse/vue-next-select@2.10.4/