- déc. 16, 2010
-
-
cerdic a rédigé
methode skip() generique sur la classe Iter, qui permet de retrouver une balise #SAUTER fonctionnelle
-
cerdic a rédigé
-
cerdic a rédigé
Suppression de seek(), la methode parent fait cela tres bien (et avec moins de bug)
-
cerdic a rédigé
Utiliser protected plutot que private, pour permettre des surcharges eventuelles proteger les 3 proprietes de Iter, qui ne doivent pas etre accedees en direct Ajout des proprietes pos et total qui memorisent la position courant et le nombre total de resultat Implementations par defaut dans Iter, qui gerent la mise a jour de pos et total Debog de la methode seek() de IterSQL qui ne prenait pas en compte correctement le saut
-
cerdic a rédigé
-
Fil a rédigé
http://php.net/manual/fr/class.iterator.php il devient possible de faire : {{{ <?php $s = new IterSQL( array ( 'select' => array ( 0 => 'articles.date', 1 => 'articles.id_article', 2 => 'articles.id_rubrique', 3 => 'articles.titre', 5 => 'articles.descriptif', 6 => 'articles.chapo', 7 => 'articles.lang', ), 'from' => array ( 'articles' => 'spip_articles', ), 'type' => array ( ), 'where' => array ( 0 => array ( 0 => '=', 1 => 'articles.statut', 2 => '\'publie\'', ), 1 => '1=1', ), 'join' => array ( ), 'groupby' => array ( ), 'orderby' => array ( 0 => 'articles.date DESC', ), 'limit' => '0,1', 'having' => array ( ), 'table' => 'articles', 'id' => '_articles_recents', 'connect' => '', ) ); foreach ($s as $k=>$v) { var_dump($v); } ?> }}} mais aussi : {{{ <?php $s = new IterDATA( array ( 'source' => 'http://rezo.net/backend/', 'sourcemode' => 'rss' ) ); foreach ($s as $k=>$v) { var_dump($v); } ?> }}}
-
- déc. 15, 2010
-
-
cerdic a rédigé
modificateur['criteres']['statut'] mais modificateur['tout'] (idem pour plat ou lien)
-
cerdic a rédigé
-
cerdic a rédigé
via la globale table_statut : $table_statut[nom_table][] = array( 'champ'=>'statut', // champ de la table sur lequel porte le filtrage par le statut 'publie'=>'publie', // valeur ou liste de valeurs, qui definissent l'objet comme publie. 'previsu'=>'publie,prop', // valeur ou liste de valeurs qui sont visibles en previsu 'post_date'=>'date', // un champ de date pour la prise en compte des post_dates, ou rien sinon 'exception'=>'statut', // liste des modificateurs qui annulent le filtrage par statut // si plusieurs valeurs : array('statut','tout','lien') ); Pour 'publier' ou 'previsu', si la chaine commence par un "!" on exclu au lieu de filtrer sur les valeurs donnees si la chaine est vide, on ne garde rien si elle est seulement "!" on n'exclu rien Si le statut repose sur une jointure, 'champ' est alors un tableau du format suivant : 'champ'=>array( array(table1, cle1), ... array(tablen, clen), champstatut ) champstatut est alors le champ statut sur la 'tablen' dans les jointures, 'clen' peut etre un tableau pour une jointure complexe : array('id_objet','id_article','objet','article') On evacue le codes des boucles sur les tables articles, auteurs, et rubriques. La table documents est en sursis, son cas est deja regle dans le plugin mediatheque
-
cerdic a rédigé
-
Fil a rédigé
-
Fil a rédigé
-
- déc. 14, 2010
-
-
cerdic a rédigé
Permet a un critere d'injecter une clause group dynamique, evaluee au calcul, qui rendra '' si pas de group a faire.
-
- déc. 13, 2010
-
-
Fil a rédigé
une {{{ {datasource,plugins} }}} vite fait (n'offre pas de critere pour les plugins pas actifs)... qui veut faire mieux... {{{ <BOUCLE_r5(DATA){datasource , plugins}{pagination 7}> <dt>#CLE</dt> <dd> [(#VALEUR|var_export{1})] </dd> </BOUCLE_r5> }}}
-
http://core.spip.org/trac/spip/changeset/aa0a47bcerdic a rédigé
Il subsiste un defaut : seuls les criteres present avant le {recherche} sont pris en compte dans la recherche. A ameliorer si possible.
-
Fil a rédigé
recherche generique d'un filtre sur la datasource, grace a charger_fonction() ; pour feter ca, un filtre 'file' qui lit un fichier ligne a ligne
-
- déc. 12, 2010
-
-
Fil a rédigé
-
Fil a rédigé
-
Fil a rédigé
critere {{{ {datasource #ARRAY, table} }}} pour la boucle (DATA). Exemple: {{{ <BOUCLE_y(DATA){datasource #CONFIG**,table}{valeur>0}{cle==version}> }}}
-
Fil a rédigé
Boucle POUR: ============ <BOUCLE_x(POUR){tableau=#CONFIG**}{valeur>0}{cle==version}> Boucle DATA: ============ <BOUCLE_r(DATA){datasource http://localhost/spip/?page=backend, rss}> <BOUCLE_r1(DATA){datasource http://localhost/spip/rien.json, json}> <BOUCLE_r2(DATA){datasource http://localhost/spip/rien.yaml, yaml}{pagination 5}> <BOUCLE_r3(DATA){datasource TEST.CSV, csv}{valeur==France}> Boucle ENUM: ============ [(#REM) Echiquier ]<B_z> <table> <BOUCLE_z(ENUM){1,8}> <tr> <BOUCLE_y(ENUM){1,8}> <td> [(#_z:VALEUR|plus{64}|chr)]#VALEUR </td> </BOUCLE_y> </tr> </BOUCLE_z> </table> </B_z> [(#REM) Une pagination qui va jusqu'au max possible ]<B_a> [<p class="pagination">(#PAGINATION)</p>] <BOUCLE_a(ENUM){pagination 10}> #VALEUR </BOUCLE_a>
-
- déc. 11, 2010
- déc. 09, 2010
-
-
cerdic a rédigé
et on delegue a trouver_fond la tache de trouver un fond dans le chemin en prenant en compte son extension. Elle s'enrichit d'un argument optionnel booleen permettant de retourner son resultat sous forme de tableau type pathinfo dont la valeur 'extension' est toujours renseignee (meme en cas d'echec), et dont la valeur 'fond' contient le nom du fichier sans l'extension. Cela permet d'eviter de mettre l'extension en dur dans styliser. Les plugins pourront utiliser cette fonction, et continuer a etre compatible avec les anciennes versions de SPIP simplement en la definissant si elle n'existe pas
-
cerdic a rédigé
-
cerdic a rédigé
-
cerdic a rédigé
La constante _EXTENSION_SQUELETTE qui indique l'extension d'un sauelette avait beaucoup trop d'occurrences dans le code, ce qui ne permet pas facilement de mettre en place une strategie ou plusieurs extensions seraient possibles simultanement. Il n'y a besoin que d'une seule occurrence en fait, dans la fonction {{{trouve_modele}}} sur laquelle toutes les autres se rabattent. Pour le decompilateur, il faut se baseru sur l'extension du fichier de depart pour retrouver l'information, et n'avoir qu'un seul point d'entree poureviter de gerer une valeur par defaut. Pour le debusqueur, on donne le nom du squelette sans l'extension puisque justement il est possible qu'il y ait le choix.
-
cerdic a rédigé
-
cerdic a rédigé
-
- déc. 08, 2010
- nov. 18, 2010
- nov. 16, 2010
-
-
denisb a rédigé
-
- nov. 09, 2010
-
-
cerdic a rédigé
-
- nov. 08, 2010
-
-
davux a rédigé
Évaluer html5_permis() une fois pour toutes à la compilation du squelette, au lieu de repousser le test au moment de la génération des caches de pages.
-
- oct. 23, 2010
-
-
cerdic a rédigé
La complexite est liee a la compat ascendante, car les vieilles fonctions manipulaient directement des globales. La fonction urls_decoder_url() de inc/urls gere donc tout cela une fois pour toute, en isolant les globales concernees (sauvegarde/restauration) ce qui permet de l'utiliser partout sans precaution. Un flag $assembler par defaut a false permet de distinguer l'appel principal depuis public/assembler, qui accepter une redirection brutale, et necessite de prendre en compte les globales $_SERVER['REDIRECT_url_propre'] et $_ENV['url_propre'] Celles-ci ne sont plus videes par assembler car elles sont gerees proprement par la fonction urls_decoder_url Il serait neanmoins plus prudent d'evacuer aussi ces arguments implicites au profit d'arguments explicites, pour plus de clarete du code. Si les tests sur form_hidden sont exhaustif, on ne casse rien en passant par cette fonction depuis le filtre form_hidden. Si des cas de bugs sont remontes, il faudra completer les tests avant de corriger la fonction ou le filtre.
-
- oct. 18, 2010
-
-
cerdic a rédigé
lorsque la balise <head> contient des attributs, il faut quand meme etre capable de poser un <base...> en urls arbos report de [16480]
-
- oct. 15, 2010
-
-
b_b a rédigé
-
- oct. 07, 2010
-
-
cerdic a rédigé
dans une pagination, lorsque la page demandee etait superieure au nombre de resultats, cela provoquait une boucle vide et des messages saugrenus du genre "Il n'y a aucun ...". On borne donc, et dans tous les cas, la boucle affiche ce qui correspond a la derniere page de la pagination. Ainsi, si en ajax on retire des elements de la liste paginee, celle-ci revient automatiquement a la page precedente lorsqu'on a vide la deniere page.
-