FORUM SPX

Aide au projet spx : plugins pour pluxml - Forums pluxml

Vous n'êtes pas identifié(e).

#1 2014-05-28 07:14:36

je-evrard
Responsable du projet
Lieu : Pau
Inscription : 2014-01-24
Messages : 206
Site Web

Résumé base et requêtes

La version 1.56 ou supérieure de spxdatas permet de faire des enregistrements de table en json mais aussi des requêtes coté clients comme en sql :

spxdatas peux être vu comme un outil qui permet de gérer une sorte de base de données json
où on peut faire des requetes genre select, insert, delete, etc... comme si on avait une base mysql

- un enregistrement de table en json
- un insert coté client (en requete) ou admin (via l'admin du plugin)
- un delete coté client (en requete) ou admin (via l'admin du plugin)
- un update coté client (en requete) ou admin (via l'admin du plugin)
- un select (en requete)

Pour enregistrer en json voici comment faire avec la version 1.56 ou supérieure

[== Indéfini ==]
<table name="auteur" dataformat="json">

Voici un exemple de description de base  avec une table qui sera enregistré en json (dataformat) :

[== Indéfini ==]
<?xml version="1.0" encoding="UTF-8"?>
<document>
	<table name="link" maxparam="4" groupe="Liens"     tableuserlevel="0,1,2,3,4"  datauserlevel="0,1,2,3,4"   dataformat="json" >
		<description><![CDATA[<p>Vos liens.</p>]]></description>
		<column>
			<parameter name="name" type="cdata" option="textinput/20/30"></parameter>
			<parameter name="url" type="cdata" option="textinput/20/30"></parameter>
			<parameter name="description" type="cdata" option="textarea/20/5"></parameter>
		</column>
	</table>
</document>

Select sur la table :

[== Indéfini ==]
<?php
global $plxShow;
$o= array();
$o["table"]="link";
$o["out"]="html";
$o["format"]='<li><a href="#url" title="#description">#name</a></li>';

echo ("<u1>".$plxShow->callHook('spxdatas::getData',$o)."</u1>");
?>

select sur la table avec filtre sur le nom: name

[== Indéfini ==]
<?php
global $plxShow;
$o= array();
$o["table"]="link";
$o["filter"]="name=toto";
$o["out"]="html";
$o["format"]='<li><a href="#liens" title="#description">#nom</a></li>';

echo ("<u1>".$plxShow->callHook('spxdatas::getData',$o)."</u1>");
?>

Select sur la table par l'id avec sortie en tableau php (le filter par id est de la forme : nomtable_id

[== Indéfini ==]
<?php
global $plxShow;
$o= array();
$o["table"]="link";
$o["filter"]="link_id=001";
$o["out"]="array";


print_r($plxShow->callHook('spxdatas::getData',$o)
?>

a noter : pour le select le filter accepte le "and" --> $o["filter"]="actif=1 and category=001";


Update de l'id 001 de la table link

[== Indéfini ==]
<?php
global $plxShow;
$o=array();
$o["table"]="link";
$o["id"]="001";
$o["column"]=array("url");
$o["value"]=array("http://plumxml.org");
		
$plxShow->callHook ('spxdatas::setData',$o);
?>

Insert dans la table link (on laisse l'id vide)

[== Indéfini ==]
<?php
global $plxShow;
$o=array();
$o["table"]="link";
$o["id"]="";
$o["column"]=array("name","url");
$o["value"]=array("test","http://test.fr");

$plxShow->callHook('spxdatas::setData',$o);

?>

delete d'un id de la table link (ex 001)

[== Indéfini ==]
<?php
global $plxShow;
$o=array();
$o["table"]="link";
$o["id"]="001";

$plxShow->callHook ('spxdatas::delData',$o);
?>

Petit à petit l'oiseau fait son nid.
creation de site web : http://secretsitebox.fr/ - création artistique : http://art.je-evrard.net

Hors ligne

#2 2014-06-15 19:03:29

paysan hardi
Membre
Inscription : 2014-01-30
Messages : 28
Site Web

Re : Résumé base et requêtes

effectivement c'est prometteur...
concernant $o['filter'], je ne m'en sert que pour alléger le poids du tableau avant un tri plus approfondi car il ne prend que des variables simples (data1=x and data2=y)
au final il me sert surtout pour discriminer l'$id de façon à afficher rapidement un résultat unique.
je poste mon code ci-dessous si ça peut servir à quelqu'un :

[== PHP ==]
$o["table"]=$table;	
	$filters="";
	foreach ($_SESSION['search'] as $a=>$b){
        if ($b!=""){$filters.=$a.'='.$b.' and ';}
    }
	if ($filters!=""){$o["filter"] =substr($filters,0,-5);} //supprimer dernier " and "
	if ($id!="") {$o["filter"]== $table.'_id='.$id;} //prédominance à l'id
		
$query = $plxShow->callHook('spxdatas::getData',$o); //$id et selects filtrés
# filtrage du texte sur $query restant
	foreach($query as $a => $b){
		#filtre 1 : texte
		if ($chaine!=""){
			if( stristr($b['champtexte1'], $chaine)==false AND 
				stristr($b['description'], $chaine)==false) AND 
                                stristr($b['grosTextarea'], $chaine)==false) AND 
                                stristr($b['bigstring'], $chaine)==false) 

			{unset($query[$a]);} 
		} 		
	}

1. $table parce que j'avais 6700 lignes dans phpMyAdmin à transférer, j'ai donc découpé par année de saisie
2. $_SESSION['search'] contient les requêtes simples des selects (champ=>valeur). Pratique pour conserver l'affichage du tableau trié en même tps qu'on saisi de nouveaux enregistrements.(copier/coller c'est moins fatiguant)
3. getData ne part qu'après être épuré au maximum. Je suis un traumatisé du Fatal error Memory...forcément avec Free. (au point d'avoir pondu un plugin pour gérer ça).
4. le dernier foreach intervient pour la recherche de texte et filtre autant de champ que nécessaire
5. c'est là que je place les champs select ou chkbox multiples car $o['filter'] ne fait pas d'explode sur un string (001|002|003|004)

bref, tout ça pour lire qu'un type à sorti une gestion JSON de BDD qui sera du tonnerre !
...tant pis, j'aurais appris à le faire cool

Bonne soirée.

Hors ligne

Pied de page des forums